【halcon】亚像素轮廓XLD

XLD(eXtended Line Descriptions):XLD其实就是指的亚像素轮廓。

 如何理解亚像素



上一篇《halcon入门小技巧》提到的:

threshold (Image, Region, 128, 255) 这个呢,是给了一个灰度的范围,通过像素进行划分区域。

像素已经是图片成像的最小单位了,下图就是将一张图片放大到看到像素的程度。这每一个方块就是一个像素,每个像素都有自己的一个灰度值。两个像素之间的灰度值是跳变的

如果进一步细分,假设像素的正中间点才是该像素的值,像素其他地方的值是渐变的方式过度到另一个像素。那么像素内部除中间点之外的点的值需要参考周围像素的值。

现在又有一个函数,针对亚像素:

threshold_sub_pix (ImageReduced, Border, 128)这个函数的意思就是,按照上述的方式,推算出每个像素点中128这个灰度值应该出现在哪个位置,再将128的这个位置连线,得到一个轮廓称之为“亚像素轮廓”

当我们得到了一堆的轮廓之后,我们应该如何筛选呢?

 我们可以通过长度选择轮廓线,首先通过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得到图片

posted @ 2022-05-31 20:21  宋桓公  阅读(723)  评论(0编辑  收藏  举报