使用屏幕截图匹配拍摄的图像(或基于数据模型生成的图像)

时间:2014-09-09 09:18:46

标签: algorithm opencv computer-vision edge-detection keypoint

首先,我不得不说我是计算机视觉领域的新手,我目前面临一个问题,我试图用opencv(Java Wrapper)解决这个问题但没有成功。

基本上我有一张相机拍摄的模型中的部分图片(不同角度,重新旋转,旋转......),我需要在模型中找到该部分的位置。

示例图片:

enter image description here 模特图片:

desc

所以一个问题是:我应该从哪里开始/我应该使用哪种算法?

我的第一次尝试是使用与SURF的KeyPoint匹配作为检测器,描述符和BF作为匹配器。 它适用于10个中的大约2个。我使用默认参数并尝试其他检测器,没有任何改进。 (也许这是一个关于正确参数的问题。但是如何找到合适的参数并结合正确的算法?......) 两个例子:

enter image description here

enter image description here

我的第二次尝试是使用颜色来区分模型中的某些元素,并将结构与模型本身进行比较(除了我还拥有的模型图片和模型的xml表示之外)。 现在我将红色从图像中拉出红色,手动调整h,s,v值以获得大约4张图片的最佳检测效果,但其他图片无效。

两个例子:

enter image description here enter image description here

我还尝试使用边缘检测(canny,灰色,使用histogramm Equalization)来检测几何结构。对于一些我可以想象的结果,它会起作用,但对其他图片使用相同的canny参数"失败"。两个例子:

enter image description here enter image description here

正如我所说,我不熟悉computervision,只是尝试了一些算法。我正面临这个问题,我不知道哪种算法和技术组合是最好的,除了我应该使用哪些参数。手动测试似乎是不可能的。

提前致谢

gemorra

1 个答案:

答案 0 :(得分:2)

您最初使用SURF功能的想法实际上非常好,只是尝试了解此算法的参数如何工作,您应该能够注册您的图像。你的参数的一个很好的起点只会改变Hessian阈值,并且在这样做时会产生恐惧:你的特征定义得非常好,所以尝试使用大约2000及以上的阈值(以500-1000的步长增加,直到你变好为止)结果完全没问题。)

或者,您可以尝试检测省略号并计算仿射它们的仿射变形并运行互相关来记录它们。这种替代方案确实意味着更多的工作,但是非常吸引人。关于使用协方差矩阵及其choletsky分解进行归一化的一些想法here