本文主要是介绍【halcon】亚像素轮廓XLD,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
XLD(eXtended Line Descriptions):XLD其实就是指的亚像素轮廓。
如何理解亚像素
上一篇《halcon入门小技巧》提到的:
threshold (Image, Region, 128, 255) 这个呢,是给了一个灰度的范围,通过像素进行划分区域。
像素已经是图片成像的最小单位了,下图就是将一张图片放大到看到像素的程度。这每一个方块就是一个像素,每个像素都有自己的一个灰度值。两个像素之间的灰度值是跳变的。
如果进一步细分,假设像素的正中间点才是该像素的值,像素其他地方的值是渐变的方式过度到另一个像素。那么像素内部除中间点之外的点的值需要参考周围像素的值。
现在又有一个函数,针对亚像素:
threshold_sub_pix (ImageReduced, Border, 128)这个函数的意思就是,按照上述的方式,推算出每个像素点中128这个灰度值应该出现在哪个位置,再将128的这个位置连线,得到一个轮廓称之为“亚像素轮廓” :
这里的参数Border就是我们说的轮廓:
类型为 xld_cont, 这种类型就是”亚像素轮廓“,是一条线(线是给你看的,其实是由一系列的点组成)可以用长度描述。
cont是contour的缩写:
当我们得到了一堆的轮廓之后,我们应该如何筛选呢?
我们可以通过长度选择轮廓线,首先通过halcon软件提供的特征提取功能,得到轮廓的长度
然后调用select_contours_xld进行筛选。
select_contours_xld (Border, SelectedContours, 'contour_length', 90, 120, -0.5, 0.5)
参数解释:
- Border, SelectedContours:从亚像素轮廓Border中选出符合条件的SelectedContours
- 'contour_length':表示条件是轮廓长度
- 90, 120:表示轮廓的长度范围
- -0.5, 0.5:作用目前还不清楚
此时还可以查看符合条件轮廓的个数:
count_obj (SelectedContours, Number)
通过亚像素轮廓得到区域

gen_region_contour_xld (SelectedContours, Region1, 'filled')
这里就会发现和亚像素轮廓不同,区域和图像一样是一像素为单位的。
再次通过区域得到image
reduce_domain (ImageReduced, Region1, ImageReduced1)
这里再解释一下reduce_domain,他是通过区域Region得到图片,区域可以很多个,但是得到的图片只能由一张,如果此时有多个Region,那么得到的图片是通过第一个Region生成的图片。
小结:
这里发现了一个小套路:
1、先得到亚像素轮廓
2、筛选轮廓
3、通过轮廓得到Region
4、通过Region得到图片
这篇关于【halcon】亚像素轮廓XLD的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!