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)
执行结果为:
工业视觉圆环工件距离测量
3.measure_projection(Image : : MeasureHandle : GrayValues)
measure re_projection提取垂直于矩形或环形弧的一维灰度值剖面。
这是通过对垂直于矩形或圆弧主轴的“切片”中的灰度值求平均值来实现的。
采样是在图像的亚像素位置完成的,图像的行和列距离(在矩形的坐标系中)为整数,距离矩形的中心为整数。
由于这涉及到一些可以在多个投影中重复使用的计算,所以操作符gen_measure_rectangle2只用于执行这些计算一次,
从而显著提高了measure_projection的速度。
由于在灰度值的亚像素计算中存在精度和速度的权衡,
所以可以在gen_measure re_rectangle2中选择不同的插值方案(插值只影响与图像轴线不对齐的矩形)。
使用gen_measure_rectangle2生成的度量对象句柄为measure rehandle。
将上边的代码添加几句后,可将灰度值剖面以图形方式显示
stop()
Sequence := [1:|GrayValues|]
create_funct_1d_pairs (Sequence, GrayValues, Function)
dev_open_window (0, 0, 520, 520, 'black', GrayProfileWindow)
plot_funct_1d (GrayProfileWindow, Function, [], [], 'white', 'axes_color', 'none')
结果为
工业视觉圆环工件距离测量1
4.measure_thresh(Image : : MeasureHandle, Sigma, Threshold, Select : RowThresh, ColumnThresh, Distance)
measure_thresh提取一维灰度值概要中灰度值等于指定阈值阈值的点。
将灰度值轮廓投影到measure rehandle传递的测量矩形主轴上,
使得灰度值轮廓内计算的阈值点对应于矩形主轴上的特定图像坐标。
RowThresh和ColumnThresh返回这些坐标。
如果灰度值与阈值线相交多次,则参数Select确定返回哪些值。
可能的设置是“first”、“last”、“first_last”(first and last)或“all”。
对于最后两种情况,Distance返回计算点之间的距离。
通过对所有线段的灰度值进行平均,得到灰度值轮廓,其由测量矩形定义如下:
1.线段垂直于矩形的主轴,
2.它们到矩形中心的距离是整数,
3.矩形以线段为界。
对于每个线段,计算到主轴距离为整数的所有点的灰度值的平均值。
由于测量矩形相对于图像坐标的平移和旋转,输入图像Image 通常在亚像素位置采样。
因为这涉及到一些可以在多个投影中重复使用的计算,所以操作符gen_measure re_rectangle2只提前执行一次这些计算。
这里生成了测量对象测量句柄,可以选择不同的插补方案。
例程:在例程1后面添加如下代码,可以查看函数执行效果
measure_thresh (Zeiss1, MeasureHandle, 1, 90, 'all', RowThresh, ColumnThresh, Distance1)
dev_set_color ('red')
disp_arc (WindowHandle, Row, Column, AngleExtent, RowPoint, ColPoint)
dev_set_color ('green')
disp_cross (WindowHandle, RowThresh, ColumnThresh, 6, 0)
close_measure (MeasureHandle)
执行结果:
可以看到在红色测量范围内提取出了满足灰度条件的绿色点。
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|