一、背景介绍

可见光与红外图像融合(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

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

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