1 简介
本文所要研究的问题是通过对图像进行匹配与融合,实现同一场景的两张图片的全景拼接。首先对图像进行采集,因采集的图片会受环境因素影响而存在很多质量问题,若直接进行图像拼接,拼接结果会很不理想,因此需要对图像进行相关的预处理以提高图像的质量。利用 SAD 算法实现块匹配,利用加权平均法对图像进行融合,最终实现全景图像无裂缝、无鬼影的拼接。实现全景图像拼接的流程如图 1 所示。想要进行图像拼接,那么首先是要准备拼接的图像。图片采集的基本方法有以下几种:旋转式相机拍摄、手持式相机拍摄和平移式相机拍摄。在图像采集过程中,因为光照,拍摄场景的问题,图片中可能存在一定的噪声,要想得到效果好的拼接图片,在拼接前要对图像进行去燥处理。图像去燥具体方法有:均值滤波器、自适应维纳滤波器、中值滤波器、形态学噪声滤波器、小波去燥[4]。中值滤波器的响应是基于滤波器包围的像素的灰度值的中值,用滤波器包围的图像区域的灰度值代替某个像素点的滤波结果。这是一个非线性滤波器。
2 部分代码
function [MStitch, result] = RGBListMain_Process(file) for i = 1 : length(file)-1 if i == 1 file1 = file{i}; im1 = imread(file1); im1 = rgb2gray(im1); MStitch.im1 = double(im1); [Pheight, Pwidth] = size(im1); MStitch.Pwidth = Pwidth; MStitch.Pheight = Pheight; MStitch.W_min = round(0.60*Pwidth); MStitch.W_max = round(0.83*Pwidth); MStitch.H_min = round(0.98*Pheight); MStitch.minval = 255; im1 = imread(file1); MStitch.imrgb1 = double(im1); im1 = rgb2gray(im1); MStitch.im1 = double(im1); else MStitch.im1 = double(result1); end file2 = file{i+1}; im2 = imread(file2); MStitch.imrgb2 = double(im2); im2 = rgb2gray(im2); im2 = double(im2); [W_box, H_box, bdown, MStitch] = Fun_Match(im2, MStitch); [MStitch, result1] = Fun_StitchRGB(im2, W_box, H_box, bdown, MStitch); end result = result1;
3 仿真结果
4 参考文献
[1]曾恬恬, & 吴建清. 基于matlab的图像拼接技术及其实现. 海南师范大学学报:自然科学版, 34(1), 10.