Я пытаюсь повернуть изображение вручную, используя следующий код.Вращение изображения вручную в matlab
clc;
m1 = imread('owl','pgm'); % a simple gray scale image of order 260 X 200
newImg = zeros(500,500);
newImg = int16(newImg);
rotationMatrix45 = [cos((pi/4)) -sin((pi/4)); sin((pi/4)) cos((pi/4))];
for x = 1:size(m1,1)
for y = 1:size(m1,2)
point =[x;y] ;
product = rotationMatrix45 * point;
product = int16(product);
newx =product(1,1);
newy=product(2,1);
newImg(newx,newy) = m1(x,y);
end
end
imshow(newImg);
Просто я итерация через каждый пиксель изображения m1
, умножая m1 (х, у) с матрицей вращения, я получаю x',y'
и хранения значения m1(x,y)
и `newImg (х« у») "НО он дает следующую ошибку
??? Attempted to access newImg(0,1); index must be a positive integer or logical.
Error in ==> at 18
newImg(newx,newy) = m1(x,y);
Я не знаю, что я делаю неправильно.
Это положит все пиксели, выходящие за рамки изображения на краю нового изображения. Я думаю, что это будет выглядеть довольно забавно, и я не могу себе представить, что это желаемый результат. – Junuxx
О, ты прав. В этом случае я думаю, что он должен пойти с обнаружением egdes: http://homepages.inf.ed.ac.uk/rbf/HIPR2/rotate.htm – lucasg