Я написал следующий код без встроенных функций 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
Результат:
Я знаю, что изображение имеет черные пробелы из-за прямого отображения, но я не обеспокоен, что я пытаюсь выполнить код без встроенного - В функциях, которые будут только вращать изображение обратно, чтобы я мог вычислить ошибку.
код вы вывесили не делает обратное вращение. Вы применяете одно и то же преобразование в первом цикле, как и во втором, таким образом, они делают то же самое! –
Однако, чтобы ответить на ваш вопрос: если вы преобразовываете с прямым отображением, тогда информация теряется! Если на первом изображении пиксель никогда не просматривался, то во втором изображении его просто не будет, поэтому вы не сможете использовать это второе изображение для создания первого! –
Если вы не знаете. MATLAB чувствителен к регистру. (Говоря об этом, потому что вы используете 'W' и' H' в своем коде, которые нигде не инициализированы) –