基于RAM的几何变换——旋转
一、旋转的基本概念
旋转和镜像不同的地方在于旋转可能会改变图像尺寸的大小,一辐长宽不一样的图片在旋转之后的图幅可能需要一定的裁剪,像width和height一致的图片则不需要考虑这些。实验原理则是很简单的全等三角形和坐标变换。
二、MATLAB实现
实现代码和实验结果如下所示:
%--------公式法旋转-------------
clc;
clear all;
RGB = imread('house.png');
[ROW,COL,N] = size(RGB);
% 定义一个0~255区间的三通道的图像矩阵,分别存储,逆时针旋转90°、180°以及270°
rota1 = uint8(zeros(ROW,COL,N));
rota2 = uint8(zeros(ROW,COL,N));
rota3 = uint8(zeros(ROW,COL,N));
% 旋转270°
for i = 1:ROW
for j = 1:COL
for k = 1:N
x = j;
y = COL + 1 - i;
z = k;
rota3(x,y,z) = RGB(i,j,k);
end
end
end
% 旋转180°
for i = 1:ROW
for j = 1:COL
for k = 1:N
x = COL + 1 - i;
y = COL + 1 - j;
z = k;
rota2(x,y,z) = RGB(i,j,k);
end
end
end
% 旋转90°
for i = 1:ROW
for j = 1:COL
for k = 1:N
x = COL + 1 - j;
y = i;
z = k;
rota1(x,y,z) = RGB(i,j,k);
end
end
end
subplot(2,2,1),imshow(RGB); title('原图');
subplot(2,2,2),imshow(rota1); title('旋转90');
subplot(2,2,3),imshow(rota2); title('旋转180');
subplot(2,2,4),imshow(rota3); title('旋转270');
三、FPGA实现
FPGA部分的实现代码仅仅修改了之前 isp_mirror 中的部分,将按键控制的四个模式返回的坐标值进行了相应的旋转算法移植。
实验结果如下:
实验结果符合预期。