查找图中的内部区域

Posted

技术标签:

【中文标题】查找图中的内部区域【英文标题】:Finding interior regions in figure 【发布时间】:2012-11-18 08:23:36 【问题描述】:

假设我们有一个白色背景上的深色甜甜圈。有什么好的方法,只查看任何像素的值(0 = 非白色,1 = 白色)和任何相邻的像素值,以确定在图像上找到的两个白色区域中的哪一个在甜甜圈内?

(来源:123rf.com)

【问题讨论】:

@talonmies 还有其他更适合的 Stack 站点吗? 这怎么跑题了?它很实用,可以回答,并且询问特定的编程问题或算法。 【参考方案1】:

在计算机图形学中,这个问题已经在几何处理的背景下得到了广泛的研究。目标是知道一个点是在多边形之外还是在多边形之外(可能带有孔),并且已用于例如颜色填充。

最常见的解决方案是从当前点沿随机方向抛出一条线(为简单起见,您可以取一条水平扫描线),并计算与边界相交的数量。如果这个数字是偶数,你在外面,如果它是奇数,你在里面。

在图像处理的上下文中,可以使用边缘查找技术(例如,Sobel 算子)来查找边界。您现在可以从给定点向右(例如)在单​​行上行走,然后计算找到了多少条边。

【讨论】:

【参考方案2】:

WhitAngl 的回答是正确的,所以我的回答只是在上下文中引入图像处理中涉及的一些问题。如果您知道这些,请原谅我的幼稚。

鉴于您的初始图像,由于自身检测边缘的问题,仅考虑其边缘必然会给出不正确的结果。它们可能已损坏,可能无法检测到,等等。另外,从您自己的考虑来看,我们不能简单地使用 0 = 非白色,1 = 白色。对于您的原始图像,这是这样考虑的结果:

如果我们假设你有一个更好的二进制表示:

那么 WhitAngl 的回答完美适用。同样,在这种情况下,答案可以简化为:如果外部边缘的黑色像素与白色像素接触,则该白色像素不是内部像素。这给出了:

每个白色像素都在您的甜甜圈内部。

【讨论】:

存在黑色对象具有 1 像素宽边缘的边缘情况。如果将像素视为正方形(在 2D 矩形网格中)并且可以定义其外部和内部,则可以解决此问题。在图像中这通常很容易,因为我们可以将左上角的像素(如果需要我们甚至可以扩展图像)作为背景像素。 感谢您的进一步解释!

以上是关于查找图中的内部区域的主要内容,如果未能解决你的问题,请参考以下文章

使用 numpy 和/或 cv2 在深度图中查找最暗区域

在无向图中查找多边形

使用嵌套多边形数组中的实际区域查找最内部的多边形

EXCEL中如何查找区域内满足条件的值,并依次将其对应的值依次输出至指定区域?

在 R(邻居)中查找相邻的多边形

在图中查找连接边