我已经用过 实施 安德里亚·维达尔迪, ,计算两个相似图像的sift描述符(第二个图像实际上是同一物体从不同角度的放大图片)。

现在我无法弄清楚 如何比较描述符来判断图像的相似程度?

我知道这个问题是无法回答的,除非你之前确实玩过这类东西,但我认为 以前做过这件事的人可能知道这一点, ,所以我发布了这个问题。

我为生成描述符所做的一点工作:

>> i=imread('p1.jpg');
>> j=imread('p2.jpg');
>> i=rgb2gray(i);
>> j=rgb2gray(j);
>> [a, b]=sift(i);  % a has the frames and b has the descriptors
>> [c, d]=sift(j);
有帮助吗?

解决方案

首先,你不是应该使用 vl_sift 而不是 sift 吗?

其次,您可以使用 SIFT 特征匹配来查找两幅图像中的对应关系。这是一些示例代码:

    I = imread('p1.jpg');
    J = imread('p2.jpg');

    I = single(rgb2gray(I)); % Conversion to single is recommended
    J = single(rgb2gray(J)); % in the documentation

    [F1 D1] = vl_sift(I);
    [F2 D2] = vl_sift(J);

    % Where 1.5 = ratio between euclidean distance of NN2/NN1
    [matches score] = vl_ubcmatch(D1,D2,1.5); 

    subplot(1,2,1);
    imshow(uint8(I));
    hold on;
    plot(F1(1,matches(1,:)),F1(2,matches(1,:)),'b*');

    subplot(1,2,2);
    imshow(uint8(J));
    hold on;
    plot(F2(1,matches(2,:)),F2(2,matches(2,:)),'r*');

vl_ubcmatch() 本质上执行以下操作:

假设您在 F1 中有一个点 P,并且您想在 F2 中找到“最佳”匹配。一种方法是将 F1 中 P 的描述符与 D2 中的所有描述符进行比较。通过比较,我的意思是找到欧几里得距离(或两个描述符之差的 L2 范数)。

然后,我在 F2 中找到两个点,即 U 和 V,它们分别与 P 的距离最小和第二小(例如 Du 和 Dv)。

以下是 Lowe 的建议:如果 Dv/Du >= 阈值(我在示例代码中使用了 1.5),则此匹配是可以接受的;否则,它是不明确匹配的,并且作为对应被拒绝,并且我们不将 F2 中的任何点与 P 匹配。本质上,如果最佳匹配和次优匹配之间存在很大差异,则可以预期这是一场高质量的匹配。

这很重要,因为图像中存在很大的模糊匹配范围:想象一下在湖泊或具有多个窗户的建筑物中匹配点,描述符可能看起来非常相似,但对应关系显然是错误的。

您可以通过多种方式进行匹配..您可以使用 MATLAB 自己轻松完成,也可以使用 KD 树或近似最近数字搜索来加速它,例如 弗兰 已实施于 开放式计算机视觉.

编辑:另外,还有几个 MATLAB 中的 kd 树实现.

其他提示

您应该阅读大卫·罗伊的,其中谈到如何做到这一点。它应该是足够的,如果你想比较确切的同一对象的图像。如果你想匹配同一类别的不同对象的图像(例如汽车或飞机),你可能想要看的金字塔匹配内核通过格劳曼和达雷尔。

尝试每个描述符从所述第一图像与描述符从所述第二个位于一个靠近附近(使用欧几里得距离)进行比较。因此,你从基于它和从所述第二图像中最类似的邻居描述符之间的相似程度的第一图像分配分数给每个描述符。所有这些成绩的统计指标(总和,平均,分散,平均误差等),让你的图像的相似程度的估计。实验与附近的大小和统计度量给你最好的答案的不同组合。

如果您只想比较缩放和旋转与您可以在数极坐标使用相位相关的已知的中心旋转图像。通过峰值和相位相关的直方图的清晰度可以判断图像的接近程度。也可以使用在傅立叶系数的绝对值欧几里德距离。

如果你想比较SIFT描述符,欧氏距离旁边还可以使用“漫距离” - 让上逐步较为粗糙的规模描述符和与原始描述串联它们。这样,“大规模”特征相似度将有更多的权重。

如果你想要做的图像之间的匹配,你应该使用vl_ubcmatch(如果你还没有使用它)。你可以解释输出“成绩”来查看功能的接近程度。这代表了两个匹配特征描述符之间的欧几里德距离的平方。您也可以改变最佳匹配和输入第二最佳匹配之间的阈值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top