| 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)
 例程执行结果为:
 
 
 工业视觉一维测量相关函数基本使用   
 
   如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!    
 
 
 
 |