0

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

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

示例图片:

在此处输入图像描述 模型图片:

描述

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

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

在此处输入图像描述

在此处输入图像描述

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

两个例子:

在此处输入图像描述 在此处输入图像描述

我还尝试使用边缘检测(canny、gray、with histogramm Equalization)来检测几何结构。对于我可以想象的某些结果,它会起作用,但是对其他图片使用相同的精明参数“失败”。两个例子:

在此处输入图像描述 在此处输入图像描述

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

提前致谢

杰莫拉

4

1 回答 1

2

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

或者,您可以尝试检测您的椭圆并计算一个仿射扭曲来规范化它们并运行互相关来注册它们。这种替代方案确实意味着更多的工作,但非常令人着迷。关于使用协方差矩阵及其 choletsky 分解进行归一化的一些想法

于 2014-09-09T10:17:58.050 回答