2

以下是一段代码,它在使用 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的第一维和第二维的大小?另外,mass的功能和后面的代码行是什么?

4

1 回答 1

1

的内容box2只是第二张图像的边界框(角坐标);box2_那么这个边界框是否被转换到im1- 的坐标系中,您可以在其中计算坐标范围(urvr)在转换后投影到哪里im2

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

于 2015-03-17T08:22:43.407 回答