2014-11-24 40 views
2

以下是一段代碼,使用RANSAC PROR到其中使用SIFT計算描述符計算單應性矩陣H之後形成兩個圖像的馬賽克:VLFeat的圖像拼接在Matlab

% -------------------------------------------------------------------- 
%                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的第一維和第二維的大小?另外,質量和下面的代碼行的功能是什麼?

回答

1

box2的內容只是第二個圖像的邊界框(角座標) box2_然後將此邊界框轉換爲im1的座標系 - 在該座標系中計算座標範圍(urvr)轉換後投影im2的位置。

變量mass的用途僅僅是指示每個像素覆蓋了多少圖像:如果給定像素上只有一個圖像是非空的,則其mass(...) = 1,結果等於該圖像的值。如果兩個圖像都不是空的,則mass(...) = 2會導致計算它們的平均值。