QQ登录

只需一步,快速开始

工业视觉一维测量相关函数基本使用

[ 复制链接 ]
1.gen_measure_rectangle2( : : Row, Column, Phi, Length1, Length2, Width, Height, Interpolation : MeasureHandle)gen_measure re_rectangle2准备提取垂直于矩形主轴的直线边缘。
矩形的中心在参数Row, Column中传递.
矩形主轴的方向为Ph。
两个轴的长度,即,矩形直径的一半为Length1和Length2中。
要了解一维测量的概念,请参阅一维测量章节的介绍。
创建的结果保存在句柄MeasureHandle,用于后续调用。


边缘提取算法在算子measure_pos的文档中进行了描述。
如前所述,一维灰度值剖面的计算可以采用不同的插值方法。
对于Interpolation = 'nearest_neighbor',测量中的灰度值由最近像素的灰度值得到,即,通过常数插值。
对于Interpolation = 'bilinear',使用双线性插值,
而对于Interpolation = 'bicubic',使用双三次插值。


为了以最佳速度执行实际测量,可用于多个测量的所有计算都已经在操作符gen_measure re_rectangle2中执行。
为此,在measure rehandle中构造并返回一个优化的数据结构,即所谓的度量对象。
对执行测量的图像的大小必须在参数Width, Height中指定。


系统参数“int_zoom”(参见set_system)影响用于构造度量对象计算的准确性和速度。
如果'int_zooming'设置为'true',则使用定点算法执行内部计算,从而缩短执行时间。
然而,这种模式下的几何精度略低。
如果'int_zooming'设置为'false',则使用浮点数算法执行内部计算,从而获得最大的几何精度,同时显著增加了执行时间。




2.measure_pairs(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdgeFirst,
ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)


函数measure re_pair用于提取垂直于矩形或环形圆弧主轴的直线边缘对。


measure_pairs的提取算法与measure_pos算法相同。
此外,函数将边缘分组为成为对:
如果Transition = 'positive',则在矩形主轴方向上具有从暗到亮转换的边缘点,在RowEdgeFirst和ColumnEdgeFirst中返回。
在这情况下,具有从亮到暗转换的对应边缘,在RowEdgeSecond和columnedgesececond中返回。


如果Transition = 'negative',则行为正好相反。


如果Transition = 'all',则第一个检测到的边缘定义RowEdgeFirst和ColumnEdgeFirst。
即根据测量对象的位置,返回具有亮-暗-亮过渡的边缘对或具有暗-亮-暗过渡的边缘对。
这是非常有用,例如,测量对象相对于背景有不同的亮度。


如果发现多个具有相同转换的连续边,则将第一个边用作对元素。
这种行为可能会在一些应用中导致一些问题,可以将Threshold选择小些,以抑制相同转换的连续边缘。


对于这些应用,存在第二种配对模式,该模式只选择连续上升和下降边缘序列中各自最强的边缘。
此模式是通过将“_strong”附加到参数Transition(例如“negative_strong”)来选择的。
最后,可以选择返回哪些边对。
如果Select设置为'all',则返回所有边缘对。
如果将其设置为“first”,则只返回提取的边缘对中的第一个。
而将其设置为“last”,则只返回最后一个。


提取的边缘作为位于矩形主轴上的单点返回。
相应的边缘振幅 在AmplitudeFirst , AmplitudeSecond返回
每个边缘对之间的距离在intrdistance中返回,
相邻边缘对之间的距离在InterDistance中返回。
其中IntraDistance对应EdgeFirst与edgeecond 之间的距离,
InterDistance对应edgeecond 与EdgeFirst[i+1]之间的距离,即的元组的元组间距离包含一个元素。


参数Sigma,Threshold为处理过程中用到的高斯平滑系数,和最低边缘阈值。


3.close_measure( : : MeasureHandle : )
close_measure删除measure rehandle给出的度量对象。
用于度量对象的内存被释放。


4.write_measure( : : MeasureHandle, FileName : )
write_measure将gen_measure re_rectangle2等创建的度量对象写入文件FileName 。
度量对象由句柄measure rehandle定义。
可以使用read_measure读取度量对象。
度量对象的默认HALCON文件扩展名是'msr'。


5.serialize_measure( : : MeasureHandle : SerializedItemHandle)
serialize_measure串行化度量对象的数据(有关串行化的基本原理,请参阅fwrite_serialized_item)。
度量对象由句柄measure rehandle定义。
串行化的度量对象由句柄SerializedItemHandle返回,可以通过deserialize_measure反序列化。


6.deserialize_measure( : : SerializedItemHandle : MeasureHandle)
deserialize_measure反串行化一个由serialize_measure串行化的度量对象。
串行化的度量对象由句柄SerializedItemHandle定义。
反串行化的值存储在句柄MeasureHandle。


7.translate_measure( : : MeasureHandle, Row, Column : )
translate_measure将measure句柄给出的度量对象的参考点移动为点(Row, Column )。
如果度量对象和被平移的度量对象完全位于图像中,则度量对象将有效地移动到新的参考点。
否则,使用创建度量对象MeasureHandle时指定的参数和新的参考点,
利用函数gen_measure_rectangle2或gen_measure_arc重新生成度量对象。
以上函数综合使用例程为:
dev_close_window ()
read_image (Fuse, 'fuse')
get_image_size (Fuse, Width, Height)
dev_open_window_fit_image (Fuse, 0, 0, Width, Height, WindowID)
dev_display (Fuse)
set_display_font (WindowID, 12, 'mono', 'true', 'false')
dev_set_line_width (3)
dev_set_draw ('margin')
* 在指定测量位置生成测量矩形。
Row := 297
Column := 545
Length1 := 80
Length2 := 10
Angle := rad(90)
gen_rectangle2 (ROI, Row, Column, Angle, Length1, Length2)
gen_measure_rectangle2 (Row, Column, Angle, Length1, Length2, Width, Height, 'bilinear', MeasureHandle)
measure_pairs (Fuse, MeasureHandle, 1, 1, 'negative', 'all', RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)


*结果显示
for i := 0 to |RowEdgeFirst| - 1 by 1
    gen_contour_polygon_xld (EdgeFirst, [-sin(Angle + rad(90)) * Length2 + RowEdgeFirst,-sin(Angle - rad(90)) * Length2 + RowEdgeFirst], [cos(Angle + rad(90)) * Length2 + ColumnEdgeFirst,cos(Angle - rad(90)) * Length2 + ColumnEdgeFirst])
    gen_contour_polygon_xld (EdgeSecond, [-sin(Angle + rad(90)) * Length2 + RowEdgeSecond,-sin(Angle - rad(90)) * Length2 + RowEdgeSecond], [cos(Angle + rad(90)) * Length2 + ColumnEdgeSecond,cos(Angle - rad(90)) * Length2 + ColumnEdgeSecond])
    dev_display (Fuse)
    dev_set_color ('red')
    dev_display (EdgeFirst)
    dev_set_color ('green')
    dev_display (EdgeSecond)
    dev_set_color ('blue')
    if (i == 0)
        set_tposition (WindowID, RowEdgeFirst + 5, ColumnEdgeFirst + 20)
    else
        set_tposition (WindowID, RowEdgeFirst - 40, ColumnEdgeFirst + 20)
    endif
    write_string (WindowID, 'width: ' + IntraDistance + ' pix')
endfor
*保存程序后,会在程序的同级目录生成文件。
write_measure (MeasureHandle, '123.msr')
close_measure (MeasureHandle)
read_measure ('123.msr', MeasureHandle)
*串行化测量句柄
serialize_measure (MeasureHandle, SerializedItemHandle)
deserialize_measure (SerializedItemHandle, MeasureHandle1)
open_file ('filename', 'output_binary', FileHandle)
fwrite_serialized_item (FileHandle, SerializedItemHandle)
close_file (FileHandle)
clear_serialized_item (SerializedItemHandle)
close_measure (MeasureHandle)
*移动测量位置后,再次测量
translate_measure (MeasureHandle1, Row, Column+Length2*2)
measure_pairs (Fuse, MeasureHandle1, 1, 1, 'negative', 'all', RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
gen_contour_polygon_xld (EdgeFirst, [-sin(Angle + rad(90)) * Length2 + RowEdgeFirst[0],-sin(Angle - rad(90)) * Length2 + RowEdgeFirst[0]], [cos(Angle + rad(90)) * Length2 + ColumnEdgeFirst[0],cos(Angle - rad(90)) * Length2 + ColumnEdgeFirst[0]])
gen_contour_polygon_xld (EdgeSecond, [-sin(Angle + rad(90)) * Length2 + RowEdgeSecond[1],-sin(Angle - rad(90)) * Length2 + RowEdgeSecond[1]], [cos(Angle + rad(90)) * Length2 + ColumnEdgeSecond[1],cos(Angle - rad(90)) * Length2 + ColumnEdgeSecond[1]])
dev_display (Fuse)
dev_display (ROI)
dev_display (EdgeFirst)
dev_display (EdgeSecond)
例程执行结果为:

工业视觉一维测量相关函数基本使用

工业视觉一维测量相关函数基本使用

  

halcon从自学到接项目视频教程,另外再赠送全网最全资源  

  

欢迎围观我录制的一套halcon自学视频教程(进入)


  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  



回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索