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

一、背景介绍

可见光与红外图像融合(Visible and infrared image fusion)是图像融合领域的一个分支。其在很多领域都有应用,例如可见光与红外图像融合跟踪(RGB-T tracking)、人脸识别、人耳识别、SLAM、国防领域。因此,多年以来,一直是比较活跃的研究领域。

从方法上来讲,主要包含基于空间域的和基于变换域的方法。

基于空间域的方法是指直接在空间域对源图像进行操作从而得到融合图像的方法,主要包含基于像素的(pixel-based)、基于块的(block-based)和基于区域(region-based)的方法。

基于变换域的方法是指首先将源图像变换到某个变换域,然后在该变换域内进行图像融合(一般以系数的形式),最后再用逆变换得到融合图像的过程。常用的变换包括多尺度变换(例如小波变换)、压缩感知、稀疏表达等。

近年来,随着深度学习的发展,深度学习技术也被引入到了可见光与红外图像融合领域。包括CNN,GAN等在内的一些深度学习模型被应用到了可见光与红外图像融合领域,并取得了不错的效果。

二、存在的问题

然而,从可见光与红外图像融合这个研究方向出现以来,该方向的研究就存在一个重大问题:缺乏benchmark。这主要表现在以下几个方面:

首先,没有统一的数据集。尽管有一些数据集相对常用,但并没有形成标准或者共识,因此在文献里,普遍存在测试图片不一致的情况。很多时候,是张三用A图片测试性能,而李四用B图像对在测试性能

其次,没有统一的评价指标。和目标跟踪等有ground truth的领域不同,图像融合领域一般没有ground truth,从而导致对融合结果的评价没有标准答案。因此,图像融合领域的性能评价一般分类两部分:定性评价和定量评价。

定性评价也称主观评价,即靠人眼去观察融合图像的质量。尽管定性评价很重要,但显然主观性太强,毕竟“众口难调”,每个人的评判标准都不一样。定量评价是指使用一些评价指标(evaluation metrics)去对融合图像进行评价。然而,由于前述的没有标准答案存在的缘故,目前也没有统一的评价指标。事实上,到目前为止,研究人员大约设计了不下30种各种各样的评价指标用于评价融合图像的质量。然而,这些指标中并不存在最好的指标。指标的评价效果非常取决于测试图像,并且指标之间还存在互相矛盾的现象。因此,在文献中通常的做法是只展示对自己算法有利的几组指标的结果

基于上述两个原因,在可见光与红外图像融合领域,缺乏一个统一的benchmark来客观、全面地评价算法性能。目前的文献里基本上都是“王婆卖瓜,自卖自夸”。考虑到这些情况,以及目标跟踪等领域普遍存在benchmark(如OTB, VOT等),我们认为制作可见光与红外图像融合领域的benchmark是非常有必要的。

%% 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

完整代码或者代写添加QQ1575304183

往期回顾>>>>>>

【图像识别】国外车牌识别matlab源码

【图像识别】基于cnn卷积神经网络之验证码识别matlab源码

【图像识别】基于svm植物叶子疾病检测和分类matlab源码

【图像识别】路面裂缝识别含GUI源码matlab源码​​​​​​​

【图像识别】基于RGB和BP神经网络的人民币识别系统含GUI界面matlab源码​​​​​​​

【图像识别】条形码识别系统matlab源码​​​​​​​

【图像识别】基于不变矩的数字验证码识别含GUI界面matlab源码​​​​​​​

【图像识别】基于模板匹配之手写数字识别系统GUI界面matlab源码​​​​​​​

【图像识别】基于贝叶斯分类器之目标识别matlab源码

【图像识别】身份证号码识别matlab源码

【图像识别】条形码识别系统matlab源码​​​​​​​

【图像分类】基于极限学习分类器对遥感图像分类matlab源码​​​​​​​

【图像识别】基于BP神经网络之字母识别matlab源码

【图像特征处理】指纹图像细节特征提取matlab源码

【图像识别】基于反馈神经Hopfield的数字识别matlab源码

【图像识别】基于二值膨胀差分和椒盐滤波之教室内人数识别系统matlab源码

【图像识别】火灾检测matlab源码GUI

【模式识别】基于 Hough变换视频车道线检测matlab源码​​​​​​​

【模式识别】基于matlab Hough变换图片车道线检测

【模式识别】基于差影法之三维人体姿态行为识别matlab源码

【模式识别】指针式表盘识别matlab源码

猜你喜欢

转载自blog.csdn.net/qq_34763204/article/details/113801843