用MATLAB实现图像的拼接显示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用MATLAB实现图像的拼接显示相关的知识,希望对你有一定的参考价值。

一共四幅图像,图像大小不一样,将四幅图像均变成512*384大小,然后拼接为1024*748大小进行显示。

看楼主的要求,似乎没楼上说的那么复杂。

楼主只是要求把四幅图片变成同样大小然后拼接起来就是了。

 

如果上述理解无误,那么实现并不困难,主要有以下几点需要注意:

1、图像格式:由于图像格式包括索引色和真彩色这两大类不同的类型,所以需要统一转换一下才能拼接。这两类图像的判断根据是读入的数据是二维还是三维,对于二维的数据,如果调色板为空,则按照灰度图像处理。

2、数据格式:根据具体的图像文件格式不同,读入的数据可能是logical、uint8、uint16、uint32、single、uint64、double 等不同的格式,要想进行拼接,需要转换为同一种数据类型。

3、注意图像的宽高顺序:512*384的图像应为[384 512]。

 

参考代码

% 待拼接文件
imfile = '1.jpg', '2.jpg', '3.gif', '4.png';

% 读入文件,并调整大小、转换格式
A = cell(2,2);
for i=1:4
    % 读入图像数据
    [X, map] = imread(imfilei);
    if size(X,3) == 1
        % 有些灰度图像无map数据
        if isempty(map)
            map = gray;
        end
        % 转换为真彩色
        X = ind2rgb(X,map);
    end
    % 调整图像大小,并转换数据格式
    Ai = im2double( imresize(X, [384 512]) );
end

% 拼接图像并显示
A = [A1 A2; A3 A4];
imshow(A)

参考技术A 这个...20分实在太少了
这里面涉及到重采样、特征匹配, 甚至纠正、配准、拼接处处理等等。
每一步都会有好多算法,这个东西写好了都可以博士论文了。。。

Matlab中VLFeat的图像拼接

【中文标题】Matlab中VLFeat的图像拼接【英文标题】:VLFeat's Image Mosaicing in Matlab 【发布时间】:2015-01-22 07:14:28 【问题描述】:

以下是一段代码,它在使用 RANSAC pror 计算单应矩阵 H 后形成两个图像的马赛克,SIFT 用于计算描述符:

% --------------------------------------------------------------------
%                                                               Mosaic
% --------------------------------------------------------------------
box2 = [1  size(im2,2) size(im2,2)  1 ;
        1  1           size(im2,1)  size(im2,1) ;
        1  1           1            1 ] ;
box2_ = inv(H) * box2 ;
box2_(1,:) = box2_(1,:) ./ box2_(3,:) ;
box2_(2,:) = box2_(2,:) ./ box2_(3,:) ;
ur = min([1 box2_(1,:)]):max([size(im1,2) box2_(1,:)]) ;
vr = min([1 box2_(2,:)]):max([siize(im1,1) box2_(2,:)]) ;
[u,v] = meshgrid(ur,vr) ;
im1_ = vl_imwbackward(im2double(im1),u,v) ;
z_ = H(3,1) * u + H(3,2) * v + H(3,3) ;
u_ = (H(1,1) * u + H(1,2) * v + H(1,3)) ./ z_ ;
v_ = (H(2,1) * u + H(2,2) * v + H(2,3)) ./ z_ ;
im2_ = vl_imwbackward(im2double(im2),u_,v_) ;
mass = ~isnan(im1_) + ~isnan(im2_) ;
im1_(isnan(im1_)) = 0 ;
im2_(isnan(im2_)) = 0 ;
mosaic = (im1_ + im2_) ./ mass ;
figure(2) ; clf ;
imagesc(mosaic) ; axis image off ;
title('Mosaic') ;
if nargout == 0, clear mosaic ; end
end

现在我知道我们需要在使用计算的 Homography 拼接图像之前以某种方式扭曲图像? 那么,"box2"的定义背后的逻辑是什么,即为什么要考虑im2的第一维和第二维的大小?还有,ma​​ss的作用是什么,后面的代码行是什么?

【问题讨论】:

【参考方案1】:

box2的内容只是第二张图片的边界框(角坐标);然后box2_ 将这个边界框转换为im1 的坐标系 - 您可以在其中计算坐标范围(urvr)在转换后投影im2 的位置。

变量mass 的目的只是表明有多少图像覆盖了每个像素:如果只有一个图像在给定像素处非空,则其mass(...)=1,结果等于该图像的值。如果两个图像都不是空的,mass(...)=2 会计算它们的平均值。

【讨论】:

以上是关于用MATLAB实现图像的拼接显示的主要内容,如果未能解决你的问题,请参考以下文章

怎么用halcon软件来实现图像的二值化呢?

毕设题目:Matlab图像拼接

matlab图像处理教程

图像拼接基于matlab机器视觉图像拼接含Matlab源码 2346期

图像拼接基于matlab最低能量线裁剪图像拼接含Matlab源码 2127期

图像拼接基于matlab最低能量线裁剪图像拼接含Matlab源码 2127期