勾配、及び私はどのようにこれらの勾配に応じて画像を変換するために疑問に思って:私はxおよびy方向のオプティカルフローに対する勾配を有する
矢印ポイントの方向に勾配は、勾配に沿って与えられたタイムステップのための画像を構築するための最良の方法だろう何
を計算しますか?
勾配、及び私はどのようにこれらの勾配に応じて画像を変換するために疑問に思って:私はxおよびy方向のオプティカルフローに対する勾配を有する
矢印ポイントの方向に勾配は、勾配に沿って与えられたタイムステップのための画像を構築するための最良の方法だろう何
を計算しますか?
- ピクセルごとに、4つの最も近いオプティカルフロー値の近接度と大きさを使用して、その勾配を補間します。
- 補間された勾配値にタイムステップを適用して、目的地の位置を生成します。
- 結果の位置がグリッド上に直接表示されないため、おそらく、原点ピクセルの強度に基づいて送り先を中心とするガウスを計算します。そのガウシアンを使用して、出力画像の近くのセルに強度値を追加します。あるいは、(元のピクセルの)強度を取り、その強度の重み付き分割を目的地の場所に関する4つの最も近いセル中心に行うことができます。 (私はこれがガウスよりもあなたのイメージをぼやけさせるかもしれないと感じます)
好ましくは補間法に基づいて、元のワーピング戦略を使用してください。 matlabでは、 "interp2"の使用がうまくいきます。 Matlabの例:
s = 40; %size of data
t = 1; %time offset
[x,y] = meshgrid(1:s,1:s);
binIm = (x-(s/2)).^2 +((y-(s/2)).^2)*10 <((s/3))^2;
subplot(2,2,1); imagesc(binIm); colormap gray;axis image;
title('eliptical mask');
%some rotational flow (curl)
Ur = 10*(y-(s/2))/(s/2);
Vr = -10*(x-(s/2))/(s/2);
%some zooming flow (divergent)
Uz = 10*(x-(s/2))/(s/2);
Vz = 10*(y-(s/2))/(s/2);
binImR = interp2(double(binIm),x-t*Ur,y-t*Vr);
subplot(2,2,3); imagesc(binImR); axis image;colormap gray;
hold on; quiver(Ur,Vr);
title('rotational flow');
binImZ = interp2(double(binIm),x-t*Uz,y-t*Vz);
subplot(2,2,4); imagesc(binImZ); axis image;colormap gray;
hold on; quiver(Uz,Vz);
title('zooming flow');
"t"を大きくするほど、近似は悪くなります。