2

以下は、SIFT を使用して記述子を計算した RANSAC pror を使用してホモグラフィ行列 H を計算した後、2 つの画像のモザイクを形成するコードの一部です。

% --------------------------------------------------------------------
%                                                               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

計算されたホモグラフィを使用して画像をステッチする前に、何らかの方法で画像をワープする必要があることを理解しましたか? では、 「box2」の定義の背後にあるロジックは何ですか?つまり、im2 の 1 番目と 2 番目の次元のサイズを考慮する理由は何ですか? また、質量の関数とそれに続くコード行は何ですか?

4

1 に答える 1

1

の内容box2は、単純に 2 番目の画像のバウンディング ボックス (角の座標) です。box2_次に、このバウンディング ボックスが - の座標系に変換されます。この座標系で、変換後に投影する座標 (および)im1の範囲を計算します。urvrim2

変数の目的は、mass各ピクセルをカバーする画像の数を示すことです。特定のピクセルで 1 つの画像のみが空でない場合、その画像はmass(...)=1 となり、結果はこの画像の値に等しくなります。両方のイメージが空でない場合、mass(...)=2 はそれらの平均値を計算します。

于 2015-03-17T08:22:43.407 に答える