工控编程吧

标题: 工业视觉halcon标签纸长宽测量 [打印本页]

作者: qq263946146    时间: 2019-11-8 10:24
标题: 工业视觉halcon标签纸长宽测量
几何测量就是测量几何图形的相关参数,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

帖子为下面视频教程的部分内容,
可以下载教程学习观看。
[halcon]1[/halcon]
[MFC408]1[/MFC408]
[weixinlianxi]1[/weixinlianxi]







欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4