在图像中寻找正方形形状的算法?

7

假设我有一张图像,上面有一个圆和一个正方形。有没有一种方法可以通过图像的矩阵找到这个正方形呢?(只有一个正方形,时间不是真正的问题)。


1
它是一个完全平方数,还是“类似于平方数”? - Bart Kiers
1
矩形,确切地说。但它相当普通。假设它是用MS Paint的“正方形”工具绘制的,然后保存为gif格式。 - Dervin Thunk
1
这个正方形是对齐坐标轴还是旋转了? - thejh
是否有已知的背景颜色? - thejh
@thejh:白色或透明。形状的线条始终为黑色。 - Dervin Thunk
显示剩余2条评论
4个回答

3

让我们将所有点分为“亮”和“暗”两类。

寻找亮点,上下的点也是亮的。这些点很可能是边缘的一部分。

同样地:如果一个点(x,y)是亮的,而点(x+1,y)、(x+2,y)也是亮的,但点(x-1,y)和(y-1,y)是暗的,并且在Y方向上类似地,那么你很可能找到了一个左上角。通过这种方式,您可以找到角落,然后从中找到正方形 - 这似乎是一种简单的方法。


3
像这样吗?
for (x,y of every black pixel) {
 #those methods should return true if the lines length is more than one pixel
 if (hasLineToRight(x,y)&&hasLineToBottom(x,y)) {
  otherx=highestXOfLineToRight();
  othery=highestYOfLineToBottom();
  if (isLine(x,y,x,othery)&&isLine(x,y,otherx,y)) {
   addBoxToList(x,y,otherx,othery);
  }
 }
}

盒子图像

您可能希望使用宽度和高度值最高的盒子。


0

如果图片中的正方形完美无缺,请检查预期位置是否有边框。 jh的答案中的伪代码应该可以正常工作。


谢谢,Gintautas。很抱歉要这么问您,但您能更正式一些吗?可以用一些数学符号或者伪代码来说明吗?我在理解那句话方面有些困难。谢谢。 - Dervin Thunk
是的,我的第一句话语法有误,抱歉。正在修正中。 - Gintautas Miliauskas
我误解了你的问题,我以为你要找的是填充的矩形而不仅仅是轮廓,就像Paint软件中的“矩形”工具提供的一样。在这种情况下,解决方案要简单得多。 - Gintautas Miliauskas

0

如果从随机点开始泛洪填充,直到找到矩形,这个方案怎么样?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接