使用扩张/侵蚀或非最大抑制从轮廓图像中获取1像素厚度的线条

时间:2016-07-20 19:40:49

标签: image-processing computer-vision

我有一个二进制图像,包含一些超像素的轮廓。我想将这个图像叠加在原始图像的顶部,但轮廓线很厚,很难看出超像素内部是什么?

什么是将超像素的轮廓线缩小到最大1像素厚度的好方法?

我尝试使用opencv的erode函数和标准的3x3内核,但结果看起来很差(见图b))。人们再也看不到超像素的轮廓了。有人有更好的主意吗? 我在考虑非最大抑制,但只有当像素有两个以上的值才能计算出一个渐变时才有效...

a)显示超像素轮廓线的原始图像 enter image description here

b)侵蚀图像,轮廓线也被擦除 enter image description here

修改:

c)使用Zhang-Suen's & Guo-Hall's algorithm进行细化后的图像 enter image description here

1 个答案:

答案 0 :(得分:1)

阅读有关形态变薄或骨架化的内容。

例如:http://homepages.inf.ed.ac.uk/rbf/HIPR2/thin.htm

侵蚀有点过于愚蠢"处理复杂的线条。它更适合清理斑点轮廓。

在细化操作之后,您可能希望使用修剪来消除任何不需要的段。

它们是图像处理的标准工具。你应该在网上和任何体面的教科书中找到大量的资源。

由Mark Setchell编辑

为了阐明Piglet的答案,参考链接中描述的算法是在ImageMagick中实现的,所以你可以像这样运行它:

convert wireframe.png -morphology Erode Diamond -morphology Thinning:-1 Skeleton:2 result.png

enter image description here

而且,如果闪烁的图像不让你发疯,你可以看到原始线框与镂空图像之间的区别:

enter image description here