ビデオモーション拡大アルゴリズムを含むプロジェクトに取り組んでいます。現在、riesz ピラミッドを使用して位相ベースのモーション倍率を理解しようとしています。私の主な情報源は次のドキュメントです。
この論文の結果の一部を再現するために、次の手順を実行しました。
提供された riesz ピラミッド用の matlab コードを使用して、イメージを複数のスケールに分解します。
ペーパーで導入された近似 riesz 変換を使用して、ピラミッドの 1 つのサブバンドを [-0.5, 0, 0.5] および [-0.5, 0, 0.5]' で畳み込むことにより、イメージ Riesz1 および Riesz2 を生成します。
atan(R2/R1) を計算することにより、サブバンドのすべてのピクセルで主要なローカル方向を決定します。この計算は、論文の式 3 から導き出されます。
変換を優勢なローカル方向に向け、結果の直交ペアを計算します
直交ペアを使用して複素数 (I + iQ) を生成し、その位相 I を使用して特定のピクセルのローカル位相を決定します。
これは私が作成した Matlab コードです。
%Generate a circle image
img = zeros(512, 512);
img(:) = 128;
rad = 180;
for i = size(img, 1)/2 - rad : size(img,1)/2 + rad
for j = size(img, 2)/2 - rad : size(img,2)/2 + rad
deltaX = abs(size(img, 1)/2 - i);
deltaY = abs(size(img, 2)/2 - j);
if (sqrt(deltaX^2+deltaY^2) <= rad)
img(i, j) = 255;
end
end
end
%build riesz pyramid
[pyr, pind] = buildNewPyr(img);
%extract band2 from pyramid (no orientation information yet)
I = pyrBand(pyr,pind,3);
%convolve band2 with approximate riesz filter for first quadrature pair
%element
R1 = conv2(I, [0.5, 0, -0.5], 'same');
%convolve band2 with approximate riesz filter (rotated by 90°) for second
%quadrature pair element
R2 = conv2(I, [0.5, 0, -0.5]', 'same');
% show the resulting image containing orientation information!
% imshow(band2_r2, []);
%To extract the phase, we have to steer the pyramid to its dominant local
%orientation. Orientation is calculated as atan(R2/R1)
theta = atan(R2./R1);
theta(isnan(theta) | isinf(theta)) = 0;
%imshow(theta, []);
% create quadrature pair
Q = zeros(size(theta, 1), size(theta, 2));
for i = 1:size(theta, 1)
for j = 1:size(theta, 1)
if theta(i, j) ~= 0
%create rotation matrix
rot_mat = ...
[cos(theta(i, j)), sin(theta(i, j));...
-sin(theta(i, j)) cos(theta(i, j))];
%steer to dominant local orientation(theta) and set Q
resultPair = rot_mat*[R1(i, j), R2(i,j)]';
Q(i,j) = resultPair(1);
end
end
end
% create amplitude and phase image
A = abs(complex(I, Q));
Phi = angle(complex(I, Q));
生成された画像は次のようになります。
今私の質問:
atan(R2/R1) を使用してシータを計算すると、結果に多くのアーティファクトが表示されます (画像の「支配的な向き」を参照)。ここで見逃している/間違っていることは明らかですか?
これまでのところ、私の結果が正しいと仮定します。モーションを拡大するには、ローカル フェーズを決定できるだけでなく、それを変更する必要もあります。明らかな何かを見逃しているようですが、どうすればそれを解決できますか? 何らかの形でピラミッド サブバンド ピクセルの位相を変更してから、ピラミッドを折りたたむ必要がありますか? はいの場合、どのように?
私は(明らかに)このトピックにまったく慣れておらず、画像処理の基本的な理解しかありません。私の問題の解決策であろうと、他の有用な情報源への紹介であろうと、どんな回答にも非常に感謝しています.
心から