模板匹配不是解决这个问题的有效方法(就像从一个小针孔看物体一样),边缘探测器不一定能让你回到图像的真实边缘; 还会返回错误的边缘,例如由阴影引起的边缘.此外,您必须处理不完整边缘和其他问题,这些问题会随着图像中场景的复杂性而扩展.
一般来说,你提出的问题是一个非常具有挑战性的问题,除了玩具的例子,没有好的解决方案.
粗略的尝试可能是首先尝试使用边缘检测器(例如建议的canny边缘检测器)检测合理的边缘.接下来,使用RANSAC尝试将检测到的边缘中的点的子集拟合到曲线模型中.
例如,假设您正在尝试检测以下形式的曲线f(x)= ax ^ 2 + bx + c.RANSAC将基本上尝试从检测到的边缘中的点中找到最适合该曲线模型的子集.要检测不同的曲线,请相应地更改f(x)并为每个曲线运行RANSAC.然后,您可以尝试确定f(x)表示的曲线是否确实存在于您的图像中,使用从RANSAC分配给它的点应用的一些启发式算法(例如,如果模型中的点数太少,则可能是曲线不存在.但是如何确定点数的良好阈值?).当您必须考虑允许的转换(例如旋转等)时,您的模型将变得更加复杂.
这种方法的问题在于你基本上试图将你认为应该在图像中的点与点相符,有时候,即使你所寻找的不存在,它也会让你恢复"最佳".例如,您从同心圆中检测到一大堆点.如果您尝试从这些点检测直线,RANSAC将为您返回最合适的线!实际上,根据在随机初始化阶段选择的点,它可以为您提供来自不同运行的许多不同行.
有关如何对这类问题使用RANSAC更多的细节,看看RANSAC傻瓜由马可Zuliani.他还有一个很好的MATLAB工具箱来配合这个技术报告,您可以将其移植到您选择的语言中.
除非你知道你的背景是什么样的,或者如果你控制它,例如通过强制干净的背景,这是一个非常难以解决的问题.
| 归档时间: |
|
| 查看次数: |
3539 次 |
| 最近记录: |