edgessubpix参数说明_二十五.Edge

edgessubpix参数说明_二十五.Edge


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条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信