我一直在努力想出一个兴趣点检测算法,这就是我想出来的:
一次经过X和Y轴3n像素,创建3n x 3n的正方形。
对于3n x 3n方块中间的nxn方块(我们称之为方形Z),R,G和B值被平均并舍入到预设值以限制颜色数量,这是广场将被视为的颜色。
对于8个周围的n×n平方也是如此。
之后,如果它与8个周围的正方形中的x匹配,则将方形Z的颜色与周围的正方形进行比较,其中x <= 3或x =&gt; 5那么这是一个兴趣点(检测到一个角落)。依此类推,直到所有图像都被覆盖。
n越大,扫描的图像越快,检测的准确性就越低,反之亦然。
据说,这可以检测到“文字角”,即你可以在图像上看到的角落。
您对此算法有何看法?它有效吗?它可以在手持设备上的实时视频流(比如来自相机)上使用吗?
答案 0 :(得分:10)
我很遗憾地说我不认为这可能是非常好的。您的算法看起来有点像Moravec's algorithm的简化版本,它本身就是最简单的角点检测算法之一。您测试的硬编码限制有效地使您的边缘测试成为阶梯函数,而不像求和方差等方法。对于某些值,这几乎肯定会使您的检测功能出现不连续性(角落在应有的时候不匹配)。
你也有与Moravec相同的问题,即如果边缘与被考虑的邻居的方向成一定角度,则不会被检测到。
开发算法很有趣,如果这不是一个关键业务项目,那么一定要进行修补和试验(不要被我的评论推迟!)。但事实是,对于几乎任何实际问题,几乎可以肯定的是,你想要解决的任务的更好算法已经存在。真正的挑战是确定如何以一种能够使用由专家设计的现有的,易于理解的方法解决问题的方式来最好地模拟您的问题。
特别是,对边缘案例和最坏情况运行时的可靠识别和分析是一项棘手的工作;除非你是一名专业的算法运动员,否则你很可能会发现困难。但我当然鼓励你通过尝试自己发现这一点。 nlucaroni提到了一些很好的问题,可以作为分析的起点。
答案 1 :(得分:2)
为什么不尝试一下,看看它是否按预期方式工作?听起来应该是这样。性能与其他方法相比如何?算法的复杂性是什么?相比其他人有效吗?哪里可以改进?预计会出现什么样的误报和漏报?它们是否基于我计划使用的数据?应使用什么阈值来比较周围的方块? ....
这是你应该做的事情,而不是我们。
答案 2 :(得分:1)
我建议你看一下SIFT算法。它是图像中感兴趣点的事实标准。不幸的是,它也获得了专利,因为它非常好。
如果您对SIFT的实时版本感兴趣,可以让它在GPU上运行,但此时它的高度实验性。请注意,如果您正在开发商业应用程序,则必须首先购买使用SIFT的许可证或获得David Lowe的批准。