-1
我写了下面的代码,没有任何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
结果:
我知道图像已经由于在转发映射黑色的差距,但我并不担心,由于我试图执行一个代码,而无需建-in函数只会将图像旋转回来,以便计算错误。
您发布的代码是不是做反向旋转。你在第一个循环中应用了与第二个循环相同的变换,因此他们正在做同样的事情! –
但是,要回答您的问题:如果使用正向映射进行转换,则信息会丢失!如果一个像素在第一个图像中从未被访问,那么它将不会存在于第二个图像中,所以您不能再使用这个第二个图像来创建第一个图像! –
如果你不知道的话。 MATLAB是区分大小写的。 (说这是因为你在你的代码中使用了'W'和'H',它们已经被初始化了) –