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.使用代码生成的具有“阴…

Visual Studio 2013运行的结果一闪而过

在Visual Studio 2013中运行一个程序,发现输出结果的窗口DOS一闪而过,解决的办法是通过按CtrlF5键来运行程序即可

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

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

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

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

this和static

1 【this】 2 指的是明确的标记本类的结构3 当前正在调用类中方法的对象,不是一个固定的4 java中以“{}”为界限。如果现在属性名称和参数名称重名,那么默认情况下,如果没有加任何的限制,指的是最近的“{}”内的变量名…

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的安装…

数字图像处理:图像的频域

数字图像处理:图像的频域 一、图像高频信号和低频信号的理解 1.1 图像中的低频信号和高频信号也叫做低频分量和高频分量。 1)空间频率指的是图像中灰度值相对它的邻居点变化方式。如果一副图像中灰度从一边到另一边变化很小,那就说这副图像…

点击Cell中的按钮时,如何取所在的Cell

点击Cell中的按钮时,如何取所在的Cell: -(void)OnTouchBtnInCell:(UIButton *)btn { CGPoint point btn.center; point [table convertPoint:point fromView:btn.superview]; NSIndexPath* indexpath [table indexPathForRowAtPoint:point]; UITableV…

opencv2.4.9报错找不到opencv_video249d.dll

解决方法:将opencv_video249d.dll从“opencv安装路径\opencv\build\x86\vc12\bin”复制到“C:\Windows\SysWOW64”(若是32位系统则复制到C:\Windows\System32) opencv_video249d.dll中的249是版本号,代表OpenCV版本是2.4.9

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

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

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

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

visual studio如何中止正在运行的程序

如果是正在调试的程序,按shiftF5可以中止调试如果是正在运行的程序,按CtrlBreak(Pause) 可以中止运行

数字图像处理:数值图像的文件格式总结

文档下载: 数字图像文件的存储格式研究 1.前言 通过计算机处理的图像一般称为数字图像,它与传统照片不同,它可以通过某种软件被任意修改和编辑。但他又与传统照片有密切联系,因为好多图像信息大都由照片扫描而来,另…

OpenCV中VideoCapture判断isOpened()时总是返回false

将“OpenCV安装路径\opencv\build\x86\vc12\bin”下的opencv_ffmpeg249.dll文件拷贝到 exe 执行文件目录下(工程文件下) 注意两点: 这里opencv_ffmpeg249.dll中的249是版本号,代表安装的OpenCV版本是2.4.9,如果安装的…

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

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

[转]2016年Web前端面试题目汇总

记得去年 12月份刚来北京面试前端的时候 ,下面的这问题大部分有涉及到...是不是要做题的都会出这些。。 HTML/CSS部分 1、什么是盒子模型? 在网页中,一个元素占有空间的大小由几个部分构成,其中包括元素的内容(conte…

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…

Atitit.js this错误指向window的解决方案

Atitit.js this错误指向window的解决方案 1.1. 出现地点and解决之道1 1.2. call,apply和bind这三个方法2 1.2.1. Function.prototype.call2 1.3. 在函数内部出现的this,指什么要看这个this所在的函数的被调用方式。 不论这个this出现在什么样的函数中,层…

win10下VS2013+OpenCV2.4.9环境配置

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