我有一个二进制图像,包含一些超像素的轮廓。我想将这个图像叠加在原始图像的顶部,但轮廓线很厚,很难看出超像素内部是什么?
什么是将超像素的轮廓线缩小到最大1像素厚度的好方法?
我尝试使用opencv的erode
函数和标准的3x3内核,但结果看起来很差(见图b))。人们再也看不到超像素的轮廓了。有人有更好的主意吗?
我在考虑非最大抑制,但只有当像素有两个以上的值才能计算出一个渐变时才有效...
修改:
c)使用Zhang-Suen's & Guo-Hall's algorithm进行细化后的图像
答案 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
而且,如果闪烁的图像不让你发疯,你可以看到原始线框与镂空图像之间的区别: