Matlab中VLFeat的图像拼接

Posted

技术标签:

【中文标题】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中VLFeat的图像拼接的主要内容,如果未能解决你的问题,请参考以下文章

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

用MATLAB实现图像的拼接显示

MATLAB图像拼接问题

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

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

Matlab:图像拼接和混合