工控编程吧

标题: 工业视觉圆环工件距离测量 [打印本页]

作者: qq263946146    时间: 2019-6-23 00:24
标题: 工业视觉圆环工件距离测量
gen_measure_arc( : : CenterRow, CenterCol, Radius, AngleStart, AngleExtent, AnnulusRadius, Width, Height, Interpolation : MeasureHandle)
gen_measure re_arc准备提取垂直于环形弧的直线边缘。
这里,环形弧表示具有相关宽度的圆弧
弧的中心为:CenterRow,CenterCol,
半径为:Radius,
起始角与相对于起始角范围为:AngleStart,AngleExtent。
如果AngleExtent>0,则生成逆时针方向的弧,否则生成顺时针方向的弧。
环形弧的半径,即,其宽度的一半为:AnnulusRadius


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


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

2.measure_pos(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdge, ColumnEdge, Amplitude, Distance)
measure re_pos提取垂直于矩形或环形圆弧主轴的直线边缘。
measure re_pos算法的工作原理是将垂直于矩形或环形圆弧主轴的“切片”中的灰度值平均,得到一维的边缘轮廓。
采样是在图像的亚像素位置完成的,图像Image 的行和列距离(在矩形的坐标系中)为整数,距离矩形的中心为整数。
由于这涉及到一些可以在多个测量中重复使用的计算,
所以操作符gen_measure_rectangle2或gen_measure_arc只用于执行这些计算一次,从而显著提高了measure_pos的速度。
由于在灰度值的亚像素计算中存在精度与速度的权衡,因此在提取边缘位置的精度上,可以在gen_measure re_rectangle2中选择不同的插值方案。
(插值只影响与图像轴不对齐的矩形。)使用gen_measure_rectangle2生成的度量对象用句柄measure rehandle表示。


参数:
Image 输入的图像
MeasureHandle 输入的测量句柄
Sigma 高斯平滑系数
Threshold 最低边缘幅度阈值
Transition 选择亮转暗,或暗转亮,或全部边缘,有'all', 'negative', 'positive'
Select 结果边缘点的选择,有 'all', 'first', 'last'
RowEdge,ColumnEdge,Amplitude边缘中心的行列坐标及边缘振幅(带符号)
Distance  相邻边距


两函数的例程:执行圆环上间距测量
read_image (Zeiss1, 'zeiss1')
get_image_size (Zeiss1, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width / 2, Height / 2, 'black', WindowHandle)
Row := 275
Column := 335
Radius := 107
AngleStart := -rad(55)
AngleExtent := rad(170)
dev_set_draw ('fill')
dev_set_color ('green')
dev_set_line_width (1)
get_points_ellipse (AngleStart + AngleExtent, Row, Column, 0, Radius, Radius, RowPoint, ColPoint)
disp_arc (WindowHandle, Row, Column, AngleExtent, RowPoint, ColPoint)
dev_set_line_width (3)
gen_measure_arc (Row, Column, Radius, AngleStart, AngleExtent, 10, Width, Height, 'nearest_neighbor', MeasureHandle)
stop ()
for i := 1 to 10 by 1
  measure_pos (Zeiss1, MeasureHandle, 1, 10, 'all', 'all', RowEdge, ColumnEdge, Amplitude, Distance)
endfor
distance_pp (RowEdge[1], ColumnEdge[1], RowEdge[2], ColumnEdge[2], IntermedDist)
dev_display (Zeiss1)
dev_set_color ('red')
disp_circle (WindowHandle, RowEdge, ColumnEdge, RowEdge - RowEdge + 1)
disp_line (WindowHandle, RowEdge[1], ColumnEdge[1], RowEdge[2], ColumnEdge[2])
dev_set_color ('yellow')
disp_message (WindowHandle, 'Distance: ' + IntermedDist, 'image', 250, 80, 'yellow', 'false')
measure_projection (Zeiss1, MeasureHandle, GrayValues)
close_measure (MeasureHandle)
执行结果为:
(, 下载次数: 2)