假设我们有一个白色背景上的深色甜甜圈。什么是好方法,只查看任何像素的值(0 = 非白色,1 = 白色)和任何相邻像素值,以确定图像上发现的两个白色区域中的哪一个在甜甜圈内?
(来源:123rf.com)
假设我们有一个白色背景上的深色甜甜圈。什么是好方法,只查看任何像素的值(0 = 非白色,1 = 白色)和任何相邻像素值,以确定图像上发现的两个白色区域中的哪一个在甜甜圈内?
(来源:123rf.com)
在计算机图形学中,这个问题已经在几何处理的背景下得到了广泛的研究。目标是知道一个点是在多边形之外还是在多边形之外(可能带有孔),并且已用于例如颜色填充。
最常见的解决方案是从当前点沿随机方向抛出一条线(为简单起见,您可以取一条水平扫描线),并计算与边界相交的数量。如果这个数字是偶数,你在外面,如果它是奇数,你在里面。
在图像处理的上下文中,可以使用边缘查找技术(例如,Sobel 算子)来查找边界。您现在可以从给定点向右走(例如)并计算找到的边数。
WhitAngl 的回答是正确的,所以我的回答只是在上下文中引入图像处理中涉及的一些问题。如果您知道这些,请为您的幼稚感到抱歉。
给定您的初始图像,由于自身检测边缘的问题,仅考虑其边缘必然会给出不正确的结果。它们可能已损坏,可能无法检测到,等等。另外,从您自己的考虑来看,我们不能简单地使用 0 = 非白色,1 = 白色。使用您的原始图像,这是这种考虑的结果:
如果我们假设您有一个更好的二进制表示形式:
然后 WhitAngl 的回答完美适用。同样,在这种情况下,答案可以简化为:如果外部边缘的黑色像素与白色像素接触,则该白色像素不是内部像素。这给出了:
每个白色像素都在您的甜甜圈内部。