从点阵列中获取矩形

0xS*_*ina 2 signal-processing image-processing avfoundation ios gpuimage

使用GPUImage,我能够检测图像中书籍/页面的角落.但有时,它会超过4个点,在这种情况下,我需要处理并找出这些点中最好的矩形.这是一个例子:

在此输入图像描述

在这种情况下,找出最佳矩形的最有效方法是什么?谢谢

Ret*_*unk 5

如果您正在使用角点检测算法,则可以根据检测到的角点的相对强度过滤结果.书角相对于当前背景的对比度似乎比木纹中的对比度强得多.是否存在与每个点相关的相对大小,或者您是否获得了分数?除非前景和背景的强度相对恒定,否则设置边缘强度的阈值可能意味着大量的摆弄.

您的示例图像可能会模糊或变形.例如,光像素上的正确形态"闭合"可以消除木纹中的纹理,而不会影响书的大小和形状.(http://en.wikipedia.org/wiki/Mathematical_morphology)

另一种可能性是将图像缩小到更小的尺寸,然后对其进行检测.调整图像大小将会消除微小的细节,例如当前检测到的任何木纹图案.

选择合适的镜头和照明可以使图像更容易处理.在处理之前尽量简化图像.如上所述,仅照亮书籍边缘的"暗场"照明将呈现用于处理的更简单的图像.写下约束可以使哪个解决方案最强大,最简单的实现更加明显.在图像中的任何位置查找任何矩形都非常困难; 如果矩形的尺寸至少为100 x 100像素,从正方形到图像边缘旋转不超过15度等,则在深色背景上找到浅色矩形要容易得多.

更多涉及的解决方案可分为两种方法:

  1. 仅使用4个或更多(x,y)点来解决问题.
  2. 对样本图像使用不同的图像处理技术.

1.解决只给出点数的程序 如果你通常只有5点或6点,如果你确信其中4点将属于你想要的矩形的角落,那么你可以试试这个:

  1. 找到所有点的凸包.凸包是完全包含所有点的N-gon.如果这些点是钉子粘在上面,如果你在它们周围拉伸橡皮筋并让它咬合到位,那么橡皮筋的最终形状就是一个凸起的船体.找到凸包的算法通常会返回从最左下角逆时针排序的点列表.
  2. 制作点列表的副本并从副本中删除点,直到只剩下四个点.这四个剩余点仍将按逆时针方向订购.
  3. 计算由每组三个连续点形成的角度:点1,2,3,然后2,3,4,然后3,4,1等.
  4. 如果角度超出合理的公差 - 小于70度或大于110度 - 请跳回到步骤2并移除下一个点(或一组点).
  5. 存储每组4个点的最小和最大角度.
  6. 重复步骤2 - 6,每次删除不同的点(或点).
  7. 跟踪最小和最大角度最接近90度的点集.

http://en.wikipedia.org/wiki/Convex_hull

可以引入许多其他检查和约束.例如,如果凸包中3个连续点(点N到N + 1,N + 1到N + 2)的点到点距离接近书的预期宽度和高度,那么你可能会将这些标记为已知的优点,并仅测试其余的点以查看哪个是第四点.

如果你得到很多分数,上面的技术可能变得笨拙,但是如果预计在凸包上发现两个或三个书角点,它可能会起作用.

对于任何几何问题,我总是建议您查看GeometricTools.com,它有很多优秀的源代码可以解决各种问题.这本书也非常方便,特别是如果你能用AddAll.com找到便宜的副本.

http://www.geometrictools.com/

2.样本图像的其他图像处理技术 虽然我可能错了,但GPUImage似乎没有很多通用的图像处理算法.一些其他图像处理算法可以使这个问题更容易解决.

虽然这里没有空间,但成功进行图像处理的关键之一是适当的照明.确保你的照明是一致的.漫射光均匀照亮书本和背景,效果很好.您可以使用更有趣的灯光来简化问题:如果您有四个灯(或特殊的环形灯),您可以从顶部,底部,左侧和右侧提供水平照明,这将使书的边缘显得明亮,而其他表面看起来很暗. http://www.benderassoc.com/mic/lighting/nerlite/Darkfield.htm

如果您可以使用其他一些GPU库来进行图像处理,那么下列技术之一可以很好地工作:

  1. 连接组件标签(也就是查找blob).使用二进制阈值处理或分水岭算法将书中的白色斑点与背景的其余部分分开应该不会太难.一旦识别出书籍的斑点,找到角落就更容易了.(http://en.wikipedia.org/wiki/Connected-component_labeling)在OpenCV中,您可以找到"轮廓".
  2. 生成一个边缘点列表,然后有四个单独的线条拟合工具从上到下,从右到左,从下到上,从左到右搜索,找到与书籍相关的四个强(并且大部分是直的)边.但是,在您的样本图像中,书籍封面略微翘曲或相机镜头引入了桶形失真.
  3. 使用角落探测器设计用于在深色背景上找到光角.如果您一直在寻找木纹背景上的白皮书,您可以创建一个探测器来查找棕色背景上的白色角落.
  4. 使用霍夫技术找到图像中的四条最强线.(http://en.wikipedia.org/wiki/Hough_transform)

最有效的算法技术将取决于您的约束:您是否正在寻找仅具有特定大小的矩形?前景和背景之间的对比是否一致?你能引入照明来简化图像的外观吗?等等.

  • 谢谢你的详细解答. (2认同)