【问题标题】:Detecting "surrounded" areas in a binary image检测二值图像中的“包围”区域
【发布时间】:2016-07-11 20:35:24
【问题描述】:

通过执行另一个操作,我得到了一个黑白(二进制)图像,它具有白色和黑色区域。现在我想找到并填充完全被白色包围且不接触图像边框的 blacj 区域。

我使用的“蛮力”方法基本上是遍历所有像素(除“边界”行/列之外的所有像素),如果找到黑色的,我会查看邻居(将它们标记为“已访问” " ) 如果它们是黑色的,则递归地转到它们的邻居。如果我只击中白色像素并且没有在边界处结束,我会填充该区域。 这在高分辨率图像上可能需要一段时间。

有没有一种不太复杂的更快的方法来做到这一点? 谢谢。

【问题讨论】:

    标签: image-processing


    【解决方案1】:

    由于您有一个二值图像,您可以对黑色组件执行连接组件标记。找到的所有组件都被白色包围。然后沿着边界查找与边界接触的组件,然后删除它们。

    另一种更简单、更快速的解决方案是沿着边界走,一旦找到黑色像素,就设置一个扩展的种子,直到所有与原始像素接触的黑色像素都是白色的。这样做,你删除了所有接触边界的黑色像素。它将仅保留不接触边框的黑色组件。

    【讨论】:

    • 嗨,谢谢你的想法!我使用了你的第二个建议,效果很好。
    【解决方案2】:

    如果大多数黑色区域不接触边框,则反向操作可能会更快(但同样复杂)。

    从边界标记任何可到达的像素(可到达意味着您只能通过黑色像素到达边界)。在此之后,对整个图像进行一次传递。任何黑色且未访问的区域都将是一个包围区域。

    【讨论】:

    • 您好,感谢您的回答。如果我理解正确,您的回答类似于 FiReTiTi 的第二个建议。将两者都标记为解决方案,但只有一个有效,还不能投票!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 2016-09-25
    • 1970-01-01
    相关资源
    最近更新 更多