基于RAM的几何变换——旋转

基于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');

8.1

三、FPGA实现

  FPGA部分的实现代码仅仅修改了之前 isp_mirror 中的部分,将按键控制的四个模式返回的坐标值进行了相应的旋转算法移植。

  实验结果如下:

8.6

  实验结果符合预期。

参考资料:[1]咸鱼FPGA
posted @ 2024-04-17 20:04  齐迩  阅读(6)  评论(0编辑  收藏  举报