sift算法图像相似度matlab,matlab – 如何使用SIFT算法来计算如何相似的两个图像?...

本文介绍了如何利用vl_sift函数在MATLAB中实现SIFT特征匹配,以找到两个图像之间的对应关系。通过比较描述符的欧几里得距离,确定最佳和次优匹配,并设置阈值来过滤模糊匹配,从而提高匹配质量。示例代码展示了从读取图像到匹配点的整个过程。
摘要由CSDN通过智能技术生成

首先,你不应该使用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> = threshold(我在示例代码中使用1.5),那么这个匹配是可以接受的;否则,它不明确地匹配,并且作为对应被拒绝,并且我们不匹配F2到P中的任何点。基本上,如果最佳和次优匹配之间存在很大差异,则可以期望这是一个质量匹配。

这是很重要的,因为图像中的模糊匹配有很多空间:想象湖中的匹配点或具有多个窗口的建筑物,描述符可以看起来非常相似,但是对应显然是错误的。

你可以用任何数量的方式进行匹配。你可以使用MATLAB很容易地做到自己,或者你可以通过使用KD树或近似最近的号码搜索,如FLANN,已在OpenCV实施加快速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值