halcon中亚像素边缘,轮廓提取
在图像处理中,提取图像特征主要从两个角度,区域或者边缘。提取亚像素边缘有三种思路,提取过后再用边缘模板匹配,连接与分割都可以。这里不涉及边缘对用作视觉测量类的算子,仅对刚学习halcon的新人而言。
这幅图代表着在项目的过程中使用边缘的三种思路。之前某大厂主管面的时候也是问的我这个问题,我觉得很有必要拿出来说一下,嘿嘿。当然,真正对边缘提取还要看光源的打光,项目具体需求等,这里只是简单介绍三种思路。
第一种思路是我很常用的思路,将ROI区域找出来之后,再对特定的区域从原图中剪切出来,对区域内的边缘进行提取。这里注意,边缘和轮廓是有些许区别的,边缘包括内部纹理和灰度阶变化的部分,常常指的是亚像素级别的线条。轮廓一般指区域四周部分。先提取区域的话,考虑到有成熟的阈值分割算法,如动态阈值分割,分水岭分割,阈值分割等等,可以排除掉一些光照带来的噪点影响。
如果放大图像细节的话,可以看到XLD(亚像素边缘)是一根线,会在像素内插补,放大图像不会变化,而轮廓是图像区域四周,放大看会看到不对像素内插补。很多时候图像处理算法工程师不区分边缘和轮廓的区别,但是最好严格区分一下吧,这样在halcon中看到contour和xld就知道区分了。
接下来第一种思路里相关算子做解释:
首先先将图像的区域分割出来,再对区域转成轮廓,再挑选轮廓出来(这一步可以使用特征检测查看xld的特征)
threshold(Image, Regions,163,255)gen_contour_region_xld(Regions, Contours,'border')select_contours_xld(Contours, SelectedContours,'contour_length',0.5,200,-0.5,0.5)
第二种思路,直接将整幅图像转化成xld,再一步步挑选自己想要的xld
edges_sub_pix(Image, Edges,'canny',1,20,40)select_shape_xld(Edges, SelectedXLD,'circularity','and',0.4,0.6)
图像效果是
第三种就是根据整幅图灰度值范围找到xld,这里的xld是封闭的,这里是找到比128灰度值小的区域的xld
threshold_sub_pix(Image, Border,128)
版权归原作者 手写不期而遇 所有, 如有侵权,请联系我们删除。