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