基于RAM的几何变换——平移
一、平移的基本概念
平移的概念很好理解,但是在具体操作中可能会涉及到两个问题:
- 平移量有正数也有负数,涉及到Verilog语法中的有符号数处理
- 平移会导致部分像素超出我们的显示范围,对这部分的像素应当做丢弃处理
二、MATLAB实现
实现代码和实验结果如下所示:
%--------公式法平移-------------
clc;
clear all;
RGB = imread('house.png');
[ROW,COL,N] = size(RGB);
% 定义一个0~255区间的三通道的图像矩阵
pann = uint8(zeros(ROW,COL,N));
% 平移
for i = 1:ROW
for j = 1:COL
for k = 1:N
if(((i+20)>COL) || ((j-50)<1))
x = 1;
y = 1;
else
x = i+20;
y = j-50;
end
z=k;
pann(x,y,z) = RGB(i,j,k);
end
end
end
subplot(1,2,1),imshow(RGB); title('原图');
subplot(1,2,2),imshow(pann); title('平移');
三、FPGA实现
FPGA部分的实现代码仅仅修改了之前 isp_rota 中的部分,将按键控制的四个模式返回的坐标值进行了相应的平移算法移植。值得注意的是,对人眼识得的坐标原点和VGA的坐标原理有所区别,再有就是坐标平移之间的关系
实验结果如下:
实验结果符合预期。
参考资料:[1]咸鱼FPGA
标签:平移,FPGA,RAM,几何变换,COL,ROW From: https://www.cnblogs.com/qier0220/p/18141835