私はMatlabでvlfeatをやっていて、この質問hereに従っています。
以下は私の簡単なテスト画像です。
左の画像:
右の画像:
ここで2つの単純な画像を使用して簡単なテストを行いました(右の画像は左の画像を回転させただけです)、結果は次のとおりです。
それは機能しますが、次のように、2 つの画像の SIFT ポイントを一致させて表示するというもう 1 つの要件があります。
vl_ubcmatch が一致したインデックスの 2 つの配列を返すことは理解しています。2 つの画像のどのポイントがどのポイントに移動するかをマッピングすることは問題ではありません。しかし、私は現在 matlab の手順で立ち往生しています。私はこれを見つけました。しかし、それはサブプロットがそのままである場合にのみ機能します。サブプロットに画像を追加すると、サイズが変更され、正規化が失敗します。
ここに私のコードがあります:(imとim2は画像です。f、dとf2、d2はそれぞれ2つの画像からのvl_sift関数からのフレームと記述子です)
[matches score] = vl_ubcmatch(d,d2,threshold);%threshold originally is 1.5
if (mode >= 2)%verbose 2
subplot(211);
imshow(uint8(im));
hold on;
plot(f(1,matches(1,:)),f(2,matches(1,:)),'b*');
subplot(212);
imshow(uint8(im2));
hold on;
plot(f2(1,matches(2,:)),f2(2,matches(2,:)),'g*');
end
if (mode >= 3)%verbose 3
[xa1 ya1] = ds2nfu( f(1,matches(1,:)), f(2,matches(1,:)));
[xa2 ya2] = ds2nfu( f2(1,matches(2,:)), f2(2,matches(2,:)));
for k=1:numel(matches(1,:))
xxa1 = xa1(1, k);
yya1 = ya1(1, k);
xxa2 = xa2(1, k);
yya2 = ya2(1, k);
annotation('line',[xxa1 xxa2],[yya1 yya2],'color','r');
end
end
上記のコードは次のようになります。
サブプロットは、このようなものには適していないと思います。Matlabでこれを行うためのより良い方法はありますか? できれば、OpenGL スタイルで 2D ゲームを描くのと同じように、自分のイメージを描画し、自由に線を引き、自由にズームできる空のパネルのようなものが欲しいです。