如何填补大区域的小洞?

时间:2016-05-31 01:18:41

标签: image-processing binary fill

附加的二进制文件是我现在面临的问题。我想填补黑色区域内的小白洞。我试图转换黑色和白色,然后使用imfill功能,问题是它只是填充所有白色区域,包括中间的大白色区域。任何人都可以帮我吗?谢谢! binary

我尝试了形态侵蚀,然后用se = strel('diamond',10)扩张dilated;它确实可以填补空洞,但也会分别改变白色和黑色的区域,这会影响结果。由于我将使用分水岭来分离星团(黑色),然后计算它们的数量和面积。我很困惑如何正确使用开启和关闭。

3 个答案:

答案 0 :(得分:0)

您没有提及任何特定工具,因此我只是从命令行尝试使用 ImageMagick 。它安装在大多数Linux发行版上,可以免费下载到OSX和Windows上 - 它还有Python,Perl,.Net,PHP,节点,Ruby,Java绑定,我做的任何事情都可以在Matlab或OpenCV中完成。

基本上,我认为您需要先缩小图像以获得不错的效果。我试过这个:

convert holey.png -resize 10% -threshold 75% -median 3 \
    -morphology erode:2 disk:1.5                       \
    -morphology dilate:2 disk:1.5 -resize 3872x2592! result.jpg

将尺寸减小到原始尺寸的10%,并将灰度像素阈值化,然后应用小的中值滤波器去除噪声。然后进行侵蚀,然后进行扩张并将图像重新缩放,将其保存为result.jpg

enter image description here

然后我制作了一个小GIF动画,通过运行来可视化效果并查看其实际效果:

convert -delay 100 holey.png result.jpg animated.gif

enter image description here

现在有一个更小,更易管理的白色blob,然后你可以运行“Blob Analysis”“Connected Components”并删除下面的任何blob您选择的尺寸/面积阈值。

答案 1 :(得分:0)

问题是你只想填补黑暗区域内的洞。所以首先你必须找到黑色区域或删除白色区域(暂时)。

  1. 仅在白色图案上标记连接组件。
  2. 找出最大的白色图案
  3. 删除最大的白色图案并保存。
  4. 按照您的尝试填充孔。
  5. 放回最大的白色图案。

答案 2 :(得分:0)

谢谢你们的建议!我已经解决了,现在正在研究聚合的​​细分。但在此步骤之前,我需要将修改后的二进制图像屏蔽到初始RGB图像,并在几次操作后显示差异。