Halcon学习笔记:1D Measuring一维测量_fuse.hdev灯丝测量示例

Halcon学习笔记:1D Measuring一维测量_fuse.hdev灯丝测量示例

一.基本概念

在这里插入图片描述
基本流程为:

  • 获取图像
  • 对图像进行灰度值标定
    (针对相机获取的图像灰度和输入能量之间的非线性关系,获得相机对输入能量的线性函数)
  • 排列感兴趣区域或图像
  • 校正图像
  • 创建测量句柄
  • 进行测量
  • 将测量结果转换到世界坐标系
  • 结果可视化
  • 释放测量句柄。

二.典型相关算子:

  • 1.gen_rectangle2( : Rectangle : Row, Column, Phi, Length1, Length2 : )
    创建任意方向的一个矩形,控制输入分别为矩形中心的行列坐标,矩形纵向与水平方向的夹角,长和宽的一半。

  • 2.gen_measure_rectangle2( : : Row, Column, Phi, Length1, Length2, Width, Height, Interpolation : MeasureHandle)
    产生测量句柄,准备提取和矩形主轴垂直的直边缘。插值方法有:‘nearest_neighbor’, ‘bilinear’, 'bicubic’三种。

  • 3.measure_pairs(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
    抽取和矩形或者圆弧垂直的直线。
    MeasureHandle:测量句柄
    Sigma:进行高斯平滑的方差值。
    Threshold :边缘的最小幅值。
    Transition:沿主轴方向dark-to-light定义为第一类边缘,反之为第二类边缘。
    Select (input_control) string → (string)
    RowEdgeFirst ;ColumnEdgeFirst ;AmplitudeFirst
    第一类边缘点的行列坐标和幅度值。
    RowEdgeSecond ;ColumnEdgeSecond ;AmplitudeSecond
    第二类边缘点的行列坐标和幅度值。
    IntraDistance :每个边缘对之间的距离。
    InterDistance :连续边缘对之间的距离。

  • 4.get_points_ellipse( : : Angle, Row, Column, Phi, Radius1, Radius2 : RowPoint, ColPoint)
    返回椭圆上某一点,该点与椭圆中线连线和椭圆长轴正方向成角为参数Angle。
    Row, Column, Phi, Radius1, Radius2:为椭圆的参数
    RowPoint, ColPoint:返回点的行列坐标。

  • 5.disp_arc( : : WindowHandle, CenterRow, CenterCol, Angle, BeginRow, BeginCol : )
    在窗口中显示圆弧。从(BeginRow, BeginCol)点,顺时针显示,角度为Angle

  • 6.gen_measure_arc( : : CenterRow, CenterCol, Radius, AngleStart, AngleExtent, AnnulusRadius, Width, Height, Interpolation : MeasureHandle)
    产生圆弧测量句柄,提取和圆弧垂直的直线。
    AnnulusRadius:为沿着半径方向测量宽度的一半。

  • 7.count_seconds( : : : Seconds)
    程序执行时间测量算子。

	Eg. count_seconds(Start)* program segment to be measuredcount_seconds(End)Seconds := End - Start
  • 8.measure_pos(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdge, ColumnEdge, Amplitude, Distance)
    提取和矩形或者弧垂直的边缘线。

RowEdge, ColumnEdge:提取的边缘线与测量弧线或测量矩形的交点坐标,为亚像素精度,改算子常和循环配合使用。
Distance:连续边缘线之间的距离。

  • 9.distance_pp( : : Row1, Column1, Row2, Column2 : Distance)
    计算两点之间的距离。

  • 10.create_funct_1d_pairs( : : XValues, YValues : Function)
    根据一系列的(x,y)坐标值创建一个函数。X坐标值会被升序排列。

  • 11.set_fuzzy_measure_norm_pair( : : MeasureHandle, PairSize, SetType, Function : )
    设置归一化的隶属度函数。
    PairSize:优先的边缘对宽度
    SetType:待选择的模糊集合
    Function :隶属度函数

  • 12.fuzzy_measure_pairs(Image : : MeasureHandle, Sigma, AmpThresh, FuzzyThresh, Transition : RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, RowEdgeCenter, ColumnEdgeCenter, FuzzyScore, IntraDistance, InterDistance)
    创建模糊测理论量句柄,提取和矩形或弧线垂直的直线。
    AmpThresh:最小的边缘梯度阈值;
    FuzzyThresh:最小的模糊阈值;
    FuzzyScore:对所提取边缘值的模糊评价;

  • 13.create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast, MinContrast : ModelID)
    为匹配准备一个形状模型。模型产生于多个图像金字塔级数,并储存在内存中。每个级数再进行多次旋转。最高的金字塔级数最少需要四个特征点进行匹配。
    Template:定义域用来创建模板的输入图像
    NzmLevels: 金字塔的最大级别。
    AngleStart ;AngleExtent ;AngleStep :匹配旋转开始的角度和终止的角度范围,角度步长,单位弧度。
    Optimization:产生模板的优化种类和方法。
    Metric :模板被识别的条件。
    Contrast:模板图像物体和背景之间或物体各部分之间的灰度差异值。最小为2个元素的数组。
    MinContrast :最小灰度差异。
    ModelID : 模型句柄代码。

  • 14.get_shape_model_contours( : ModelContours : ModelID, Level : )
    返回一个形状模型的多边形轮廓表示。

  • 15.hom_mat2d_identity( : : : HomMat2DIdentity)
    创建一个2D转换的齐次变换矩阵—平移矩阵。
    在这里插入图片描述

  • 16.hom_mat2d_translate( : : HomMat2D, Tx, Ty : HomMat2DTranslate)
    增加一个平移量到其次变换矩阵HomMat2D中。
    在这里插入图片描述

  • 17.affine_trans_contour_xld(Contours : ContoursAffinTrans : HomMat2D : )
    对多边形轮廓进行2D映射。HomMat2D为齐次变换矩阵,应用到轮廓的每一个点。

  • 18.wait_seconds( : : Seconds : )
    推迟程序执行时间。

三、示例:fuse.hdev灯丝测量

main

* fuse.hdev: 测量保险丝的宽度
* 
dev_update_window ('off')
dev_close_window ()
* ****
* 1.取图、显示
* ****
read_image (Fuse, 'fuse')
get_image_size (Fuse, Width, Height)
dev_open_window_fit_image (Fuse, 0, 0, Width, Height, WindowID)
set_display_font (WindowID, 12, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (3)
dev_display (Fuse)
set_display_font (WindowID, 12, 'mono', 'true', 'false')
disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* 2.创建测量对象
* ****
* -> 指定ROI
Row := 297
Column := 545
Length1 := 80
Length2 := 10
Angle := rad(90)
gen_rectangle2 (ROI, Row, Column, Angle, Length1, Length2)
* -> 创建测量对象(准备提取垂直于矩形的直边,MeasureHandle->检测矩形的句柄)
gen_measure_rectangle2 (Row, Column, Angle, Length1, Length2, Width, Height, 'bilinear', MeasureHandle)
dev_display (ROI)
disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* 3.测量
* ****
* 提取垂直于矩形或环形弧的直边对
* RowEdgeFirst ;ColumnEdgeFirst ;AmplitudeFirst 第一类边缘点的行列坐标和幅度值
* RowEdgeSecond ;ColumnEdgeSecond ;AmplitudeSecond 第二类边缘点的行列坐标和幅度值。
* IntraDistance :每个边缘对之间的距离。
* InterDistance :连续边缘对之间的距离。
measure_pairs (Fuse, MeasureHandle, 1, 1, 'negative', 'all', RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* 4.可视化结果
* ****
for i := 0 to |RowEdgeFirst| - 1 by 1* 从一个多边形(作为元组给出)生成一个XLD轮廓gen_contour_polygon_xld (EdgeFirst, [-sin(Angle + rad(90)) * Length2 + RowEdgeFirst[i],-sin(Angle - rad(90)) * Length2 + RowEdgeFirst[i]], [cos(Angle + rad(90)) * Length2 + ColumnEdgeFirst[i],cos(Angle - rad(90)) * Length2 + ColumnEdgeFirst[i]])gen_contour_polygon_xld (EdgeSecond, [-sin(Angle + rad(90)) * Length2 + RowEdgeSecond[i],-sin(Angle - rad(90)) * Length2 + RowEdgeSecond[i]], [cos(Angle + rad(90)) * Length2 + ColumnEdgeSecond[i],cos(Angle - rad(90)) * Length2 + ColumnEdgeSecond[i]])dev_display (Fuse)dev_display (ROI)dev_set_color ('cyan')dev_display (EdgeFirst)dev_set_color ('magenta')dev_display (EdgeSecond)dev_set_color ('blue')if (i == 0)set_tposition (WindowID, RowEdgeFirst[i] + 5, ColumnEdgeFirst[i] + 20)elseset_tposition (WindowID, RowEdgeFirst[i] - 40, ColumnEdgeFirst[i] + 20)endifwrite_string (WindowID, 'width: ' + IntraDistance[i] + ' pix')
endfor
disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* 5.清楚测量对象
* ****
close_measure (MeasureHandle)
dev_update_window ('on')
dev_clear_window ()

本例基本步骤:

  • 1.输入灰度图像
  • 2.gen_measure_rectangle2,划定ROI
  • 3.measure_pairs.在ROI内测量边缘对

重要函数解析:

  • gen_rectangle2 (ROI, Row, Column, Angle, Length1, Length2)
    产生一个矩形,以便用于显示gen_measure_rectangle2的处理范围

  • gen_measure_rectangle2 (Row, Column, Angle, Length1, Length2, Width, Height, ‘bilinear’, MeasureHandle)
    产生的这个矩形框将作为感兴趣区域(即为测量对象创建)
    Prepare the extraction of straight edges perpendicular to a rectangle.

  • measure_pairs (Fuse, MeasureHandle, 1, 1, ‘negative_strongest’, ‘all’, RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
    第4个参数阈值比较重要
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491037.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

尘埃落定!苹果 10 亿美元入局 5G,Intel 挥别 9 年基带业务

来源: 雷锋网 雷锋网消息,2019 年 7 月 25 日,苹果公司和 Intel 共同宣布,双方已经正式达成收购协议,Apple 将收购 Intel 智能手机调节解调器业务的绝大部分,收购价格正是此前《华尔街日报》爆料出的 10 亿…

[原创]android使用代码生成LayerDrawable的方法和注意事项

为了有更好的UI体验,一般我们会把button、textview等控件的背景设置上阴影。传统的做法是美工提供一张具有阴影效果的nine patch图,然后将其在xml文件中添加到background属性。这种做法没有问题,不过缺乏灵活性。 图1.使用代码生成的具有“阴…

数字图像处理:四连通域与八连通域

四连通域与八连通域 1、所谓四连通区域或四邻域,是指对应像素位置的上、下、左、右,是紧邻的位置。共4个方向,所以称之为四连通区域,又叫四邻域。 2、所谓八连通区域或八邻域,是指对应位置的上、下、左、右、左上、右…

深度学习奠基人特伦斯:美国学界已经找到了解释人工智能“黑盒子”的方法...

(图片来源:壹图网)来源:今日头条经济观察网 记者 宋笛 “是的,目前美国数学家已经找到了解释深度学习黑盒子的方法,但是还没有发表,所以我不能透露更多。”7月25日 ,美国“四院院士”…

vs2013配置opencv2.4.9后出现找不到opencv_core249d.dll和opencv_highgui249d.dll问题

问题:vs2013配置opencv2.4.9后,运行程序,出现找不到opencv_core249d.dll和opencv_highgui249d.dll问题 解决办法:首先将opencv_core249d.dll;opencv_highgui249d.dll;opencv_imgproc249d.dll三个文件从“OpenCV的安装…

Halcon算子学习:图像阈值分割-threshold、binary_threshold、dyn_threshold算子

Halcon算子学习:图像阈值分割算子前言1.threshold-全局固定阈值分割2.Binary Threshold-自动全局阈值分割3.dyn_threshold-局部动态阈值分割小结:4.var_threshold算子-均值和标准偏差局部阈值分割5.dual_threshold-双重阈值分割(有符号图像的…

起底软银帝国:芯片、机器人、棒球队无所不投

来源:巴伦全球投资企鹅号划重点:孙正义喜欢将软银的投资组合比作银河系中的星星,称它们“将持续闪耀300年。”孙正义对阿里巴巴的投资可能是所有投资人做过的最好的投资之一。软银并非真正意义上的企业集团,其结构也不是封闭式基金…

南京大学潘天群教授:人类智能发展的宏大叙事

作者:南京大学哲学系教授,科学技术与社会研究所所长潘天群新拿到刚出版的《崛起的超级智能》一书,我一口气读完了。作者刘锋敏锐地观察到,今天的互联网已经不是个人电脑及智能手机等的简单连接,而是一个有生命的智能体…

Halcon学习笔记:读取多张图片

1.第1种方法 遍历文件路径数组 path:E:/images1/ ImagePath:[] ImagePath[0]:a000.bmp ImagePath[1]:a001.bmp ImagePath[2]:a002.bmp ImagePath[3]:a003.bmp ImagePath[4]:a004.bmp ImagePath[5]:a005.bmp ImagePath[6]:a006.bmp ImagePath[7]:a007.bmp for i:0 to 7 by 1re…

win10下VS2013+OpenCV2.4.9环境配置

参考来源https://blog.csdn.net/wsf09/article/details/78853823 一、安装Visual Studio2013 VS2013的安装可以参考软件安装管家公众号 二、配置OpenCV2.4.9 1、首先下载安装包 可以从OpenCV的官网下载 OpenCV2.4.9,但是会有点慢,中途可能还下载失败…

大脑简史(3)-大脑的结构

来源:人机与认知实验室前两篇文章,笔者和大家简短的介绍了一下大脑历史上的大事件和研究大脑的常用手段,这篇文章,想和大家分享一下:大脑的结构,也就是说:我们的大脑内究竟有什么。1967年&#…

Halcon算子学习:xyz_to_object_model_3d

xyz_to_object_model_3d (X, Y, Z : : : ObjectModel3D) 将3D点从图像转换为3D对象模型。 输入: X (input_object) 单通道图像→object (real) 用三维点的x坐标和三维点ROI区域。Y (input_object) 单通道图像→object (real) 图像与三维点的y坐标。Z (input_obje…

传感器融合:自动驾驶领域的另一个突围方向

来源:AI芯天下目前,自动驾驶的安全事故原因绝大多数出现在传感器这个重要环节,将各类传感器融合在一起,能否就能起到1+1>2的效果呢?传感器是汽车感知周围的环境的硬件基础,在实现自动…

Halcon算子学习:surface_normals_object_model_3d

surface_normals_object_model_3d ( : : ObjectModel3D, Method, GenParamName, GenParamValue : ObjectModel3DNormals) 计算三维物体模型的三维曲面法线 输入: ObjectModel3D (input_control) 包含3D点数据的3D对象模型句柄。Method(input_control) 法线计算方…

Halcon算子学习:smooth_object_model_3d

smooth_object_model_3d ( : : ObjectModel3D, Method, GenParamName, GenParamValue : SmoothObjectModel3D) 平滑3D对象模型的3D点 输入: object_model_3d(input_control) 包含3D点数据的3D对象模型的句柄。Method(input_con…

机器人巨头争霸,谁主沉浮?

来源:高工机器人过去以来,ABB、发那科、安川、库卡这四家机器人巨头独霸中国一半以上的市场份额。但这一情况开始逆转,本土企业在被外企“教育”了多年之后,开始用更大的勇气和更快的创新速度给以“老师”们迎头痛击。2019年&…

Halcon算子学习:create_surface_model

create_surface_model ( : : ObjectModel3D, RelSamplingDistance, GenParamName, GenParamValue : SurfaceModelID) 创建执行基于表面的匹配所需的数据结构 输入: object_model_3d 3D对象模型的句柄。RelSamplingDistance (input_control) real→(real) 相对于物…

任正非:5G独立组网全世界只有华为一家做好了 我们在等待高通进步

任正非来源: TechWeb华为创始人、CEO任正非7月18日在广东接受了意大利媒体的采访。近日,华为在心声社区公布了这次采访的圆桌纪要。在回答意大利媒体记者的提问中,任正非表示:“国际媒体对华为几乎都是负面报道,因为他…

Halcon算子学习:find_surface_model

find_surface_model ( : : SurfaceModelID, ObjectModel3D, RelSamplingDistance, KeyPointFraction, MinScore, ReturnResultHandle, GenParamName, GenParamValue : Pose, Score, SurfaceMatchingResultID) 在3D场景中找到一个表面模型的最佳匹配。 输入: Surf…