1 简介
随着新型传感器的飞速发展,人们获取图像的能力也迅速提高,但是一种图像数据或者单一的传感器所获得的图像信息往往无法满足实际需求.图像拼接就是指将两个或两个以上关于某个具体场景的具有重叠区域的多幅图像加以综合,以生成新的有关此场景的更大视角范围的图像.图像拼接中的两个关键技术是图像配准和图像融合,图像配准和融合的关系十分紧密.图像配准是图像融合的先决条件,为了实现准确的图像融合,必须先对图像进行配准变换.图像配准和融合广泛应用于医学,遥感,航空航天和虚拟现实等领域,是其他技术无法取代的重要技术. 本文总结了基于特征的图像拼接中所用到的相关技术.基于特征的图像拼接的基本步骤包括:特征提取,特征匹配,模型参数估计,图像变换.文中以图像配准与融合的每个步骤中的相关方法为基础,着重阐述了基于SIFT特征的图像配准和基于小波变换的图像融合相关算法.
Lowe 于 1999 年正式提出的 SIFT(Scale invariant features transform)算法,对一些在匹配过程中遇到的关键性问题找到了很好的处理方法,因其 SIFT 算子具有放缩、旋转和仿射不变性的特点,并且对光照变化和视点变化有不错的适应性,鲁棒性良好。而 Mikolajczyk 团队研究人员通过对多种特征描述算子的特点和性能分析后,也证实了这一点,认为其最佳,因此对其进行研究也是一个热点的问题。SIFT 算法第一步要建立高斯尺度空间,即高斯差分金字塔,接着进行极值点的检测,然后对特征点所处的位置及尺度做进一步的处理以达到精确定位要求,再对所得特征点计算其邻域梯度,用算出的值作为参数来确定其主方向,最后得到 SIFT 特征描述符,此时其维数是 128 维。在完成上述处理后,就可以进行特征向量匹配,其基本流程可用图所示。
小波变换在图像处理领域具有广泛的应用,其在图像融合方面也是会经常用到的。小波的概念是由法国科学家 J.Morlet 于 1974 年首次提出,之后作为一个全新的数学分支迅猛的成长起来。通过小波变换之后能够非常准确地提取出信号中的有用的信息,加上小波变换能够实现对目标对象“聚焦”的功效,所以能达到使信号多尺度细化的用处,从而实现其能够统一在时间域和频率域的步调,同时能够把频率域进行正交分解。在小波变换的图像融合过程中,将不同的规则用于不同的频率域,使得源图像中的有用信息充分的保留在了合成图像里,得到了良好的融合效果,提高了图像拼接的质量。
2 部分代码
function [ imgout ] = imMosaic( img1,img2,adjColor )%[ imgout ] = imMosaic( img1,img2,adjColor )
% img1 and img2 can (both) be rgb or gray, double or uint8.
% If you have more than 2 images to do mosaic, call this function several
% times.
% If you set adjColor to 1, imMosaic will try to try to adjust the
% color(for rgb) or grayscale(for gray image) of img1 linearly, so the 2
% images can join more naturally.
% Yan Ke @ THUEE, 20110123, xjed09@gmail.com
% use SIFT to find corresponding points
[matchLoc1 matchLoc2] = siftMatch(img1, img2);
% use RANSAC to find homography matrix
[H corrPtIdx] = findHomography(matchLoc2',matchLoc1');
H %#ok
tform = maketform('projective',H');
img21 = imtransform(img2,tform); % reproject img2
%figure,imshow(img1)
%figure,imshow(img21)
% adjust color or grayscale linearly, using corresponding infomation
[M1 N1 dim] = size(img1);
[M2 N2 ~] = size(img2);
if exist('adjColor','var') && adjColor == 1
radius = 2;
x1ctrl = matchLoc1(corrPtIdx,1);
y1ctrl = matchLoc1(corrPtIdx,2);
x2ctrl = matchLoc2(corrPtIdx,1);
y2ctrl = matchLoc2(corrPtIdx,2);
ctrlLen = length(corrPtIdx);
s1 = zeros(1,ctrlLen);
s2 = zeros(1,ctrlLen);
for color = 1:dim
for p = 1:ctrlLen
left = round(max(1,x1ctrl(p)-radius));
right = round(min(N1,left+radius+1));
up = round(max(1,y1ctrl(p)-radius));
down = round(min(M1,up+radius+1));
s1(p) = sum(sum(img1(up:down,left:right,color))); % 取四周点色度
end
for p = 1:ctrlLen
left = round(max(1,x2ctrl(p)-radius));
right = round(min(N2,left+radius+1));
up = round(max(1,y2ctrl(p)-radius));
down = round(min(M2,up+radius+1));
s2(p) = sum(sum(img2(up:down,left:right,color)));
end
sc = (radius*2+1)^2*ctrlLen;
adjcoef = polyfit(s1/sc,s2/sc,1);
img1(:,:,color) = img1(:,:,color)*adjcoef(1)+adjcoef(2);
end
end
% do the mosaic
pt = zeros(3,4);
pt(:,1) = H*[1;1;1];
pt(:,2) = H*[N2;1;1];
pt(:,3) = H*[N2;M2;1];
pt(:,4) = H*[1;M2;1];
x2 = pt(1,:)./pt(3,:);
y2 = pt(2,:)./pt(3,:);
up = round(min(y2));
Yoffset = 0;
if up <= 0
Yoffset = -up+1;
up = 1;
end
left = round(min(x2));
Xoffset = 0;
if left<=0
Xoffset = -left+1;
left = 1;
end
[M3 N3 ~] = size(img21);
imgout(up:up+M3-1,left:left+N3-1,:) = img21;
% img1 is above img21
imgout(Yoffset+1:Yoffset+M1,Xoffset+1:Xoffset+N1,:) = img1;
end
3 仿真结果
4 参考文献
[1]陈燕文. 基于SIFT与小波变换的图像配准融合方法研究[D]. 武汉理工大学, 2011.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。