在实际应用中,经常会用到超过人眼视野范围甚至是全方位的高分辨率图像,普通数码相机的视野范围往往难以满足要求。为了得到大视野范围的图像,人们使用广角镜头和扫描式相机进行拍摄。但这些设备往往价格昂贵、使用复杂,而且在一幅低分辨率的图像中得到超宽视角会损失景物中物体的分辨率,所以,使用广角镜头和扫描式相机只能部分的解决这一问题。此外,广角镜头的图像边缘会难以避免的产生扭曲变形,不利于一些场合的应用。为了在不降低图像分辨率的条件下获取大视野范围的图像,人们提出了图像拼接技术,将普通图像或视频图像进行无缝拼接,得到超宽视角甚至360度的全景图,这样就可以用普通数码相机实现场面宏大的景物拍摄。利用计算机进行匹配,将多幅具有重叠关系的图像拼合成为一幅具有更大视野范围的图像,这就是图像拼接的目的。
本文的研究内容与组织结构
本文研究的重点是使用数码相机或手机手持拍摄的图像的全自动拼接。算法的基本流程如下:
- 读取n副连续有重叠部分的图像,在n副图像中检测SIFT特征,并用SIFT
特征描述子对其进行描述。
- 匹配相邻图像的特征点,并根据特征点向量消除误匹配。
- 使用RANSAC方法,确定变换参数。
- 图像融合
简介
如何确定矩阵M? 首先确定一定数量的特征点,利用特征点的匹配给出图像变换的估计初值,最后通过递归算法得到最后的变换。
特征提取与匹配
采用SIFT算法进行特征点的提取与匹配。主要包含4个步骤:
- 建立尺度空间,寻找候选点
- 精确确定关键点,剔除不稳定点
- 确定关键点的方向
- 提取特征描述符
本文中matlab实现代码如下:
im11 = img{ccc-1};
im22 = img{ccc};
[im1, des1, loc1] = sift2(im11);
[im2, des2, loc2] = sift2(im22);
distRatio = ;
des2t = des2';
match(size(des1,1)) = 0;
for i = 1 : size(des1,1)
dotprods = des1(i,:) * des2t;
[vals,indx] = sort(acos(dotprods));
if (vals(1) < distRatio * vals(2))
match(i) = indx(1);
end
end
im3 = appendimages(im1,im2);
figure('Position', [100 100 size(im