RIFT: 基于辐射变化不敏感特征变换的多模态图像匹配(Matlab代码实现)

本文介绍了一种新的图像特征匹配算法RIFT,它使用相位一致性检测特征点,提出最大指数图(MIM)描述特征,实现了对非线性辐射失真的稳健性。实验结果显示RIFT在多模态图像匹配中优于传统方法,如SIFT。
摘要由CSDN通过智能技术生成

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码及文献


💥1 概述

摘要:传统的特征匹配方法,如尺度不变特征变换(SIFT),通常使用图像强度或梯度信息来检测和描述特征点;然而,强度和梯度都对非线性辐射失真(NRD)敏感。为了解决这个问题,本文提出了一种新的特征匹配算法,能够抵抗大的NRD。该方法被称为辐射变化不敏感特征变换(RIFT)。RIFT 中有三个主要贡献。首先,RIFT 使用相位一致性(PC)而不是图像强度来检测特征点。RIFT 考虑了特征点的数量和重复性,并在 PC 图上检测角点和边缘点。其次,RIFT 最初提出了最大指数图(MIM)用于特征描述。MIM 是由对数Gabor卷积序列构建的,比传统的梯度图对NRD更加稳健。因此,RIFT 不仅大大提高了特征检测的稳定性,还克服了梯度信息对特征描述的局限性。第三,RIFT 分析了旋转对MIM值的固有影响,并实现了旋转不变性。我们使用了六种不同类型的多模态图像数据集来评估RIFT,包括光学-光学、红外-光学、合成孔径雷达(SAR)-光学、深度-光学、地图-光学和昼夜数据集。实验结果表明,RIFT 在多模态图像上优于SIFT和SAR-SIFT。据我们所知,RIFT 是第一个能够在所有上述类型的多模态图像上表现良好的特征匹配算法。RIFT 的源代码和多模态图像数据集是公开可用的。

关键词:多模态图像匹配、非线性辐射失真(NRD)、特征匹配、最大指数图(MIM)、相位一致性(PC)

图像特征匹配是摄影测量和遥感领域中的一个基本且关键的问题,其目标是从两个或多个具有重叠区域的图像中提取可靠的特征对应关系[1]。它也被广泛应用于计算机视觉[2, 3]、机器人视觉[4, 5]、医学图像分析[6]等领域。图像匹配一直是一个热门的研究问题,在过去几十年取得了巨大进展。然而,图像匹配,特别是遥感图像匹配,仍然是一个存在许多不确定性的棘手问题。一般来说,遥感图像对可能包含尺度、旋转、辐射、噪音、模糊或时间变化[7]。几何和辐射上的这些巨大差异对当前的图像匹配算法构成了巨大挑战,导致匹配性能大幅降低,并且难以满足不断变化的实际应用需求。因此,研究更有效、通用和稳健的图像匹配算法非常重要。为了实现通用稳健的图像匹配,需要解决三个困难问题:(1) 对各种几何和辐射失真的稳健性;(2) 更高效和稳健的异常值检测模型;(3) 非刚性变形图像匹配问题。在我们过去的工作中,我们研究了几何失真[8]、非刚性匹配[7, 9]和异常值去除[10-12]。在本文中,我们将专注于辐射失真,特别是非线性辐射失真(NRD)。

辐射失真是指在传感器成像过程中,地面物体的光谱发射率与实际光谱发射率不同的现象[13]。造成辐射失真的因素多种多样,可以总结为两个方面[14]:(1) 传感器本身的成像特性。这种错误可以被视为系统性错误。同一传感器获取的图像通常具有相同的系统性错误,因此对经典图像匹配算法影响不大。然而,随着传感器和应用的多样化,通常需要融合不同传感器的优势信息,最终实现对场景更准确可靠的描述。不同传感器的成像机制可能大不相同,获取的图像对同一物体有不同的表现,导致图像对之间存在巨大的辐射差异。经典特征匹配方法仍然能够处理线性辐射差异;不幸的是,对于NRD,这些方法可能无法奏效。通常,具有大量NRD的图像被称为多模态图像。传统方法通常使用强度信息或梯度信息进行特征检测和描述。然而,图像强度和梯度对NRD非常敏感。可以说,多模态图像的处理是图像匹配的瓶颈问题。目前,如果图像的地理几何信息不可用,没有图像匹配方法可以同时应用于光学-光学匹配、红外-光学匹配、合成孔径雷达(SAR)-光学匹配、深度-光学匹配、地图-光学匹配和昼夜匹配。(2)大气引起的辐射传输误差。在电磁波传输过程中,地面物体的光谱发射率可能受大气作用、太阳高度角和照明条件的影响而发生扭曲。这些类型的失真在多时相遥感图像中尤为突出,通常表现

📚2 运行结果

部分代码:

disp('RIFT feature detection and description')
% RIFT feature detection and description
[des_m1,des_m2] = RIFT_no_rotation_invariance(im1,im2,4,6,96);

disp('nearest matching')
% nearest matching
[indexPairs,matchmetric] = matchFeatures(des_m1.des,des_m2.des,'MaxRatio',1,'MatchThreshold', 100);
matchedPoints1 = des_m1.kps(indexPairs(:, 1), :);
matchedPoints2 = des_m2.kps(indexPairs(:, 2), :);
[matchedPoints2,IA]=unique(matchedPoints2,'rows');
matchedPoints1=matchedPoints1(IA,:);

disp('outlier removal')
%outlier removal
H=FSC(matchedPoints1,matchedPoints2,'affine',2);
Y_=H*[matchedPoints1';ones(1,size(matchedPoints1,1))];
Y_(1,:)=Y_(1,:)./Y_(3,:);
Y_(2,:)=Y_(2,:)./Y_(3,:);
E=sqrt(sum((Y_(1:2,:)-matchedPoints2').^2));
inliersIndex=E<3;
cleanedPoints1 = matchedPoints1(inliersIndex, :);
cleanedPoints2 = matchedPoints2(inliersIndex, :);

disp('Show matches')
% Show results
figure; showMatchedFeatures(im1, im2, cleanedPoints1, cleanedPoints2, 'montage');

disp('registration result')
% registration
image_fusion(im2,im1,double(H));

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

🌈4 Matlab代码及文献

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
首先,需要在前端页面中添加VR功能的按钮或者其他交互元素,用于触发VR功能的开启。然后,在后端代码中,可以通过以下步骤实现VR功能的添加: 1. 安装WebVR API库,例如 A-Frame 或 Three.js。 2. 在前端页面中添加WebVR API库的引用。 3. 创建VR场景,并将其渲染到WebGL画布中。 4. 将WebGL画布添加到前端页面中。 5. 监听VR功能的开启事件,例如用户点击了VR按钮。 6. 当VR功能开启时,将VR场景渲染到VR设备中,例如Oculus Rift或Google Cardboard。 7. 监听VR设备中的用户交互事件,并在VR场景中进行相应的操作。 下面是一个简单的代码示例,用于在Web端添加VR功能: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>VR System</title> <script src="https://aframe.io/releases/1.0.4/aframe.min.js"></script> </head> <body> <a-scene> <a-box position="-1 0.5 -3" rotation="0 45 0" color="#4CC3D9"></a-box> <a-sphere position="0 1.25 -5" radius="1.25" color="#EF2D5E"></a-sphere> <a-cylinder position="1 0.75 -3" radius="0.5" height="1.5" color="#FFC65D"></a-cylinder> <a-plane position="0 0 -4" rotation="-90 0 0" width="4" height="4" color="#7BC8A4"></a-plane> </a-scene> <button id="vr-button">Enable VR</button> <script> var vrButton = document.querySelector('#vr-button'); vrButton.addEventListener('click', function() { var scene = document.querySelector('a-scene'); scene.enterVR(); }); </script> </body> </html> ``` 在上面的代码示例中,我们使用了 A-Frame 库来创建了一个简单的VR场景,并添加了一个按钮(id="vr-button")用于触发VR功能的开启。当用户点击该按钮时,我们在JavaScript中监听到了该事件,并调用了enterVR()方法来开启VR功能。 当然,这只是一个简单的例子,实际上在现实的旅游系统中,还需要考虑更多的细节和交互操作,例如如何加载真实的场景、如何实现VR设备中的交互等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值