2023年12月12日发(作者:诺基亚智能手机正品)
edgessubpix参数说明_二十五.Edge Extraction (Subpixel。
。。
一.基本流程:
获取图像---矫正图像---确定ROI---提取边缘或直线---计算轮廓属性---处理多边形轮廓---转换到世界坐标系---结果可视化。
二.常用算子:
利用形态学算子计算区域边缘并返回。
BoundaryType:'inner', 'outer', 'inner_filled'
原始区域内部;外部;内部填充,边缘皆是一个像素宽。
返回区域的并集。
利用Deriche, Lanser, Shen, or Canny filters滤波器提取亚像素边缘。
对输入轮廓进行分类。
SortMode:分类参考点位置。
Order:升序排列还是降序。
RowOrCol:行或者列作为分类的第一标准。
5. colored_display(Objects
: : Colors : )
内部程序,用交替的颜色显示Objects.
用椭圆或椭圆弧拟合多边形轮廓,获得拟合数据。
Algorithm: 'fitzgibbon', 'fhuber', 'ftukey',
'geometric', 'geohuber', 'geotukey', 'voss', 'focpoints',
'fphuber', 'fptukey'
第一个算法:使得多边形上的点(Xi,Yi)到拟合椭圆的代数距离:a*Xi^2 + b*Xi*Yi + c*Yi^2 + d*Xi
+ e*Yi + f最小,已确定拟合椭圆。
MaxNumPoints:轮廓点上参与拟合的最大点数。
MaxClosureDist:作为封闭图像的端点间的最大距离。
Row, Column, Phi,:中心点和主轴方向。
产生椭圆轮廓,Resolution轮廓点上相邻邻域点的最大欧氏距离。
三.例子分析
例1. * rim_: measures the diameter of
drill-holes//测量钻孔直径//
*
dev_update_off ()
* ***** step: acquire image
* ****
read_image (Image, 'rim')
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, Width, Height,
WindowID)
set_display_font (WindowID, 14, 'courier', 'true', 'false')
* ****
* step: determine region of interest (ROI) //注意它提取ROI的方法,基于图像的,很智慧!//
* ****
threshold (Image, Dark, 0,
128) //设定阈值//
connection (Dark, DarkRegions)
select_shape (DarkRegions, Circles, ['circularity','area'],
'and', [0.85,50], [1.0,99999])
boundary (Circles, RegionBorder, 'inner')
dilation_circle (RegionBorder, RegionDilation, 6.5)
union1 (RegionDilation, ROIEdges) //四个包括边界区域的ROI,形状接近椭圆环//
dev_display (Image)
dev_set_color ('yellow')
dev_set_draw ('margin')
dev_display (ROIEdges)
disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* step: extract edges
* ****
reduce_domain (Image, ROIEdges, ImageROI)
edges_sub_pix (ImageROI, Edges, 'lanser2', 0.3, 10,
30)//提取亚像素边缘//
sort_contours_xld (Edges, SortedContours, 'upper_left', 'true',
'row')//对边缘进行编码//
dev_display (Image)
colored_display (SortedContours, ['cyan', 'white'])disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* step: process contours
* ****
fit_ellipse_contour_xld (Edges, 'ftukey', -1, 2, 0, 200, 3, 2,
Row, Column, Phi, Ra, Rb, StartPhi, EndPhi,
PointOrder))//产生椭圆弧拟合数据//
NumHoles := |Ra|//取长半轴数组的模//
gen_ellipse_contour_xld (ContEllipse, Row, Column, Phi, Ra, Rb,
gen_tuple_const(NumHoles,0), gen_tuple_const(NumHoles,rad(360)),
gen_tuple_const(NumHoles,'positive'), 1)//产生数据,前面是
数组的个数,后面为值,整体是赋值语句//
dev_display (Image)
sort_contours_xld (ContEllipse, SortedContEllipse, 'upper_left',
'true', 'row')
colored_display (SortedContEllipse, ['cyan',
'white']) //间隔着色//
dev_set_color ('yellow')
for i := 0 to NumHoles-1 by 1 //显示长轴和短周方向,用箭头表示,并显示长轴和短轴的长度//
sinPhi :=
sin(Phi[i])
cosPhi :=
cos(Phi[i])
disp_arrow (WindowID, Row[i], Column[i], Row[i] - sinPhi*Ra[i],
Column[i] + cosPhi*Ra[i], 1)
disp_arrow (WindowID, Row[i], Column[i], Row[i] - cosPhi*Rb[i],
Column[i] - sinPhi*Rb[i], 1)
disp_arrow (WindowID, Row[i], Column[i], Row[i] + sinPhi*Ra[i],
Column[i] - cosPhi*Ra[i], 1)
disp_arrow (WindowID, Row[i], Column[i], Row[i] + cosPhi*Rb[i],
Column[i] + sinPhi*Rb[i], 1)
set_tposition (WindowID, Row[i] - Rb[i] - 50, Column[i] - 85)
write_string (WindowID, 'D1=' + 2*Ra[i])set_tposition (WindowID, Row[i] - Rb[i] - 30, Column[i] - 85)write_string (WindowID, 'D2=' + 2*Rb[i])endfor
发布者:admin,转转请注明出处:http://www.yc00.com/num/1702361281a1207674.html
评论列表(0条)