使用GPUImage,我能够检测图像中书籍/页面的角落。但有时,它会通过超过 4 个点,在这种情况下,我需要从这些点中处理并找出最佳矩形。这是一个例子:
在这种情况下,找出最佳矩形的最有效方法是什么?谢谢
使用GPUImage,我能够检测图像中书籍/页面的角落。但有时,它会通过超过 4 个点,在这种情况下,我需要从这些点中处理并找出最佳矩形。这是一个例子:
在这种情况下,找出最佳矩形的最有效方法是什么?谢谢
如果您使用的是角点检测算法,则可以根据检测到的角点的相对强度过滤结果。相对于您当前背景的书角处的对比度似乎比在木纹中发现的点处的对比度要强得多。是否有与每个点相关的相对大小,或者你只是得到这些点?除非前景和背景的强度相对恒定,否则为边缘强度设置阈值可能意味着很多麻烦。
您的示例图像可能会模糊或变形。例如,对浅色像素进行正确的形态“关闭”可以消除木纹中的纹理,而不会影响书的大小和形状。(http://en.wikipedia.org/wiki/Mathematical_morphology)
另一种可能性是将图像缩小到更小的尺寸,然后对其进行检测。调整图像大小会消除微小的细节,例如当前检测到的任何木纹图案。
选择合适的镜头和照明可以使图像更容易处理。在处理之前尽量简化图像。如上所述,仅照亮书本边缘的“暗场”照明将呈现更简单的图像进行处理。写下约束可以更清楚地看出哪种解决方案最健壮和最容易实现。在图像的任何地方找到任何矩形都非常困难;如果矩形的大小至少为 100 x 100 像素,从正方形到图像边缘的旋转不超过 15 度等,则在深色背景上找到浅色矩形会容易得多。
更多涉及的解决方案可以分为两种方法:
1. 只给定点求解程序 如果你通常只有 5 或 6 个点,并且如果你确信其中 4 个点属于你想要的矩形的角,那么你可以试试这个:
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 库进行图像处理,那么以下技术之一可以很好地工作:
最有效的算法技术将取决于您的限制:您是否正在寻找仅具有特定大小的矩形?前景和背景之间的对比度是否一致?你能引入照明来简化图像的外观吗?等等。