【图像拼接】基于块匹配算法实现全景图像拼接matlab代码

  • Post author:
  • Post category:其他


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.