画像を回転するためのMatlab組み込み関数を使用せずに次のコードを記述しました。私は回転を逆転させる別のループを書き込もうとしました。画像は元に戻って回転しますが、まだ回転していた画像のサイズが表示されます。画像の黒い部分を取り除くにはどうすればいいですか?逆回転画像
INPUT_IMAGE = 'forest.png';
img_in=double(imread(INPUT_IMAGE))./255;
h=size(img_in,1);
w=size(img_in,2);
R=[cos(th) -sin(th) 0 ; sin(th) cos(th) 0 ; 0 0 1];
T=[1 0 (-w/2) ; 0 1 (-h/2) ; 0 0 1];
F=inv(T)*R*T;
img_out=zeros(h,w,3);
%Rotate image
for i=1:w
for j=1:h
a = [i ; j ; 1];
b = inv(F) * a;
x = b(1)/b(3);
y = b(2)/b(3);
x = floor(x);
y = floor(y);
if (x>0 & x<=W & j>0 & j<=H)
img_out(y,x,:)=img_in(j,i,:);
end
end
end
img_out2=zeros(h,w,3);
%invert rotation
for i=1:w
for j=1:h
a = [i ; j ; 1];
b = F * a;
x = b(1)/b(3);
y = b(2)/b(3);
x = floor(x);
y = floor(y);
if (x>0 & x<=W & j>0 & j<=H)
img_out2(y,x,:)=img_out(j,i,:);
end
end
end
結果:
私は画像が前方マッピングのために黒のギャップを持っていますが、私はそれについて心配していないよ知って構築されずに、私はコードを実装しようとしているとして、私はエラーを計算することができるので、画像を回転させるだけの関数である。
コードが逆回転をしていません。同じ変換を2番目のループと同じように最初のループに適用しているので、同じことをしています! –
しかし、あなたの質問に答えるには:フォワードマッピングで変換すると、情報が失われます!最初のイメージでピクセルにアクセスしたことがない場合は、2番目のイメージにピクセルが存在しないため、この2番目のイメージを使用して最初のイメージを再作成することはできません。 –
わからない場合。 MATLABは大文字と小文字を区別します。 (あなたがコードで 'W'と' H'を使っているのでこれを言っているのですが) –