【图像融合】红外与可见光的融合与配准算法matlab代码

​1 简介

图像融合是将多个不同传感器对同一场景采集的多幅图片结合起来生成一幅图片更清晰,信息更丰富,包含所有源图像重要特征的图像,有助于人类和机器的理解以及后续的处理.目前图像融合技术在遥感,医学,军事,交通等方面得到广泛应用.其中,最主要的技术是红外与可见光图像的融合.它的原理是将经过配准的,描述同一场景的红外图像与可见光图像进行处理,综合有用信息,剔除冗余信息,方便进一步的观察和处理.这样的融合图像相比红外或可见光源图像,即保留了重要的信息,又减少了冗余的信息,而且往往具有更好的视觉效果.首先,介绍了图像融合的研究背景和意义,总结了红外与可见光融合技术的研究现状,明确了本文的研究内容及安排.其次,阐述了红外图像与可见光图像的成像原理,比较它们之间的优缺点,论证了图像融合的好处.​

2 部分代码

%% section I: Read source images(读取源图像)
clear all
set(0,'defaultfigurecolor','w') 
DistortFlag = 0;%input('Is there distortion of infrared image? :\n');(需要判断红外图像是否失真)
[I1gray, I2gray, I1rgb, I2rgb, f1, f2, path] = cp_readImage;...
%     (0,'F:\',['I' num2str(infrared) '.jpg'], ['V' num2str(visible) '.jpg']);
%% section II: Resize images based on the minimum imaclosege height(根据最小图像闭合高度调整图像大小)
height = size(I1gray,1);
[I1, I2, scale] = cp_resizeImage(I1gray,I2gray,height);
%% section III: Registrate iteratively & Coarse matching(反复注册和粗略匹配)
close all;
clc;
I1_itea = I1;
iterationNum = 1;
iteration = 0;
Runtime = 0;
maxRMSE = 4*ceil(size(I2,1)/300);
AffineTrans = zeros([3 3 iterationNum]);
while  iteration < iterationNum
   fprintf('\n%d(th) iteration of registration...\n',iteration);
  [P1,P2, Rt,corner12] = cp_registration(I1_itea,I2, 20, maxRMSE,iteration, 1,  0,      6, 1   ,I2gray);
                       % cp_registration(I1,   I2, theta,maxRMSE,iteration,zoom+,zoom-,Lc,showflag,I2gray)
   Runtime = Rt + Runtime
  [I1_itea,affmat] = cp_getAffine(I1_itea,I2,P1,P2); % [v1,u1]==[v2,u2]
   iteration = iteration+1;
   AffineTrans(:,:,iteration) = affmat.T;
end
% Points of I1gray after resize (调整大小的点位置)
P1 = [P1 ones([length(P1) 1])];
[pos_cor1,~] = find(corner12(:,1) == 0);
for iteration = iteration:-1:2
   P1 = P1 / AffineTrans(:,:,iteration-1);
   cor12 = [corner12(1:pos_cor1-1,1:2) ones(pos_cor1-1,1)] / AffineTrans(:,:,iteration-1);
   P1(:,1:2) = P1(:,1:2) ./ P1(:,3);
   P1(:,3) = ones(length(P1),1);
   corner12(1:pos_cor1-1,1:2) = cor12(:,1:2) ./ cor12(:,3);
   corner12(1:pos_cor1-1,3) = ones(pos_cor1-1,1);
end
P1 = P1(:,1:2);
corner12 = corner12(:,1:2);
% Correct matches in the source images
P1(:,2) = size(I1gray,1) / 2 + scale(1) * ( P1(:,2)-size(I1,1)/2);
P1(:,1) = size(I1gray,2) / 2 + scale(1) * ( P1(:,1)-size(I1,2)/2);
corner12(1:pos_cor1-1,2) = size(I1gray,1) / 2 + scale(1) * ( corner12(1:pos_cor1-1,2)-size(I1,1)/2);
corner12(1:pos_cor1-1,1) = size(I1gray,2) / 2 + scale(1) * ( corner12(1:pos_cor1-1,1)-size(I1,2)/2);

P2(:,2) = size(I2gray,1) / 2 + scale(2) * ( P2(:,2)-size(I2,1)/2);
P2(:,1) = size(I2gray,2) / 2 + scale(2) * ( P2(:,1)-size(I2,2)/2);
corner12(pos_cor1+1:end,2) = size(I2gray,1) / 2 + scale(2) * ( corner12(pos_cor1+1:end,2)-size(I2,1)/2);
corner12(pos_cor1+1:end,1) = size(I2gray,2) / 2 + scale(2) * ( corner12(pos_cor1+1:end,1)-size(I2,2)/2);
%% section IV: Fine matching
P3 = cp_subpixelFine(P1,P2); % Fine matching
%% section V: Show visual registration result
[~,affmat] = cp_getAffine(I1gray,I2gray,P1,P3);
Imosaic = cp_graymosaic(I1gray, I2gray, affmat);
figure, subplot(121),imshow(Imosaic);subplot(122),imshow(cp_rgbmosaic(I1rgb,I2rgb,affmat));
cp_showResult(I1rgb,I2rgb,I1gray,I2gray,affmat,3); % checkborder image
cp_showMatch(I1rgb,I2rgb,P1,P2,[],'Before Subpixel Fining');
cp_showMatch(I1rgb,I2rgb,P1,P3,[],'After Subpixel Fineing');
% imwrite(cp_rgbmosaic(I1rgb,I2rgb,affmat),['D:\' f1(1:end-4) '_Mosaic.jpg']);

%% Obtain reference transformation matrix manually

3 仿真结果

4 参考文献

[1]曾文锋. "红外与可见光图像融合中的快速配准方法." 红外与激光工程 02(2002):66-68.

[2]叶锴. (2019). 红外和可见光图像融合技术研究. (Doctoral dissertation, 哈尔滨工程大学).

博主简介:擅长智能优化算法神经网络预测信号处理元胞自动机图像处理路径规划无人机雷达通信无线传感器等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

SIFT算法是一种用于图像特征提取和匹配的经典算法,可以用于红外图像和可见光图像的配准。下面是基于MATLAB实现的红外图像和可见光图像配准流程: 1. 读取红外图像和可见光图像,并将其转换为灰度图像。 2. 对灰度图像进行SIFT特征提取。 3. 使用SIFT特征匹配算法,将红外图像和可见光图像的特征点进行匹配。 4. 使用RANSAC算法去除误匹配的特征点。 5. 根据匹配的特征点,计算红外图像和可见光图像之间的变换矩阵。 6. 使用变换矩阵对红外图像进行变换,使其与可见光图像对应。 7. 可以使用MATLAB中的imshow函数将变换后的红外图像和可见光图像进行对比显示。 下面是MATLAB代码实现: ```matlab % 读取红外图像和可见光图像 im_ir = imread('ir_image.jpg'); im_rgb = imread('rgb_image.jpg'); % 将图像转换为灰度图像 im_gray_ir = rgb2gray(im_ir); im_gray_rgb = rgb2gray(im_rgb); % SIFT特征提取 [f_ir, d_ir] = vl_sift(im2single(im_gray_ir)); [f_rgb, d_rgb] = vl_sift(im2single(im_gray_rgb)); % SIFT特征匹配 [matches, scores] = vl_ubcmatch(d_ir, d_rgb); % RANSAC去除误匹配的特征点 [~, inliers] = estimateFundamentalMatrix(f_ir(1:2, matches(1,:))', f_rgb(1:2, matches(2,:))', 'Method', 'RANSAC', 'NumTrials', 2000, 'DistanceThreshold', 0.1); % 计算变换矩阵 tform = estimateGeometricTransform(f_ir(1:2, matches(1,inliers))', f_rgb(1:2, matches(2,inliers))', 'affine'); % 变换红外图像 im_ir_trans = imwarp(im_ir, tform, 'OutputView', imref2d(size(im_rgb))); % 显示对比图像 figure; imshowpair(im_rgb, im_ir_trans, 'montage'); title('RGB and IR images registration'); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Matlab科研辅导帮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值