几何测量就是测量几何图形的相关参数,halcon中常用几何图形有点,线,平行矩形,旋转矩形,圆弧,椭圆弧,和由线组成的多边形。
每个几何图形都有对应的几何参数,如点有单个坐标,线有两个坐标,圆弧有圆心和旋转角度等等,通过这些几何参数我们就可以进行几何测量,
如计算点与线距离,线与线旋转角度等等。
所以几何测量的关键就是对图像进行BLOB分析,提取测量对象,拟合成几何图形进行测量。
这里我们测量一电脑机箱上一贴纸的长度和宽度。首先是通过阈值分割与面积特征选择,
快速进行blob分析提取贴纸,然后将贴纸拟合成旋转矩形,我们知道旋转矩形有几个几何参数:
中心点坐标,长短边半宽,旋转角度。
其中长短边的一半宽
乘以2就是矩形的长和宽,单位像素pix,再乘以像素与毫米关系mm/pix,就是物理空间单位mm。
像素与毫米关系mm/pix是我们事先要标定的步骤,我们这里假设为1,所以求得的单位就可直接认为是mm。
下面是例程,可以运行查看效果。
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
read_image (Image,'fabrik')
count_channels (Image, Channels)
threshold (Image, Regions, 150, 255)
connection (Regions, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, ['area','rectangularity'], 'and', [1000,0.85], [100000,1])
shape_trans (SelectedRegions, RegionTrans, 'convex')
gen_contour_region_xld (RegionTrans, Contours, 'border')
fit_rectangle2_contour_xld (Contours, 'regression', -1, 0, 0, 3, 2, Row, Column, Phi, Length1, Length2, PointOrder)
*
segment_contours_xld (Contours, ContoursSplit, 'lines_circles', 5, 4, 2)
count_obj (ContoursSplit, Number)
dev_set_draw('margin')
gen_empty_obj (Object)
for i := 1 to Number by 1
select_obj (ContoursSplit, ObjectSelected, i)
get_contour_global_attrib_xld (ObjectSelected, 'cont_approx', Attrib)
if (Attrib == -1)
fit_line_contour_xld (ObjectSelected, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)
gen_region_line (RegionLines, RowBegin, ColBegin, RowEnd, ColEnd)
concat_obj (Object, RegionLines, Object)
elseif(Attrib ==0)
fit_ellipse_contour_xld (ObjectSelected, 'fitzgibbon', -1, 0, 0, 200, 3, 2, Row1, Column1, Phi1, Radius1, Radius2, StartPhi, EndPhi, PointOrder1)
gen_ellipse_contour_xld (ContEllipse, Row1, Column1, Phi1, Radius1, Radius2, StartPhi, EndPhi, PointOrder1, 1.5)
concat_obj (Object, ContEllipse, Object)
elseif(Attrib == 1)
fit_circle_contour_xld (ObjectSelected, 'algebraic', -1, 0, 0, 3, 2, Row2, Column2, Radius, StartPhi1, EndPhi1, PointOrder2)
gen_circle_contour_xld (ContCircle, Row2, Column2, Radius, StartPhi1, EndPhi1, PointOrder2, 1)
concat_obj (Object, ContCircle, Object)
endif
endfor
帖子为下面视频教程的部分内容,
可以下载教程学习观看。
上位机VC MFC程序开发精典实例大全源码与视频讲解配套下载408例 经历1年的编程与录制点击进入查看
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|