【FPGA图像处理实战】- 图像平移

本文转载自:FPGA入门到精通

图像平移是图像处理领域几何变换的一项基础技术,本文将详细介绍图像平移算法。

通过阅读本文,可以了解:

1、图像平移是什么?

2、图像平移的Python实现?

3、图像平移的FPGA实现?

一、图像平移

图像平移是将一幅图像在二维空间上进行平行移动。

其基本原理是计算每个像素点的移动向量,并将这些像素按照指定的方向和距离进行移动。

平移向量包括水平和垂直分量,可以表示为(dx,dy),其中dx表示水平方向上的移动距离,dy表示垂直方向上的移动距离。

经过平移后,新图像中的每个像素点在原图像中都有对应的像素点。

图像平移的逻辑很简单,使用软件开发语言很容易实现,但FPGA实现需要考虑缓存。

二、python实现

1、OpenCV操作函数介绍

OpenCV提供了函数warpAffine,可以实现各种几何变换,该函数使用指定的矩阵变换原图像,声明如下:

warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]])

参数说明:
(1)src表示源图像。
(2)M表示转换矩阵。
(3)desize是tuple类型参数,表示目标图像的宽高,即新的图像宽高(新的图像可能包含部分或者全部变换后的图像,其他区域一般由黑色像素填充)。
(4)dst表示目标图像,在python中无任何意义,一般不传参或设成None。
(5)flags表示插值方法。
cv2.INTER_NEAREST,最近邻插值;
cv2.INTER_LINEAR,线性插值(默认值);
cv2.INTER_AREA,区域插值;
cv2.INTER_CUBIC,三次样条插值;
cv2.INTER_LANCZOS4,Lanczos插值;
(6)borderMode表示边界像素模式。
(7)borderValue表示边界填充值(即显示框内图像之外的区域),默认值为0。

注意:M转换矩阵的计算方式,示例如下
(1)将原始图像srcj向右移动100个像素、向下移动200个像素,其对应关系为:dst (x,y)=src (x+100,y+200)
(2)将表达式补充全:dst (x,y)=src (1*x+y*0+100, 0*x+1*y+200)
(3)根据表达式,则得出矩阵为:

2、python代码

import cv2
import numpy as np

img = cv2.imread('1280_720.bmp')

rows, cols, channels = img.shape
M = np.float32([[1, 0, 100], [0, 1, 50]])
res = cv2.warpAffine(img, M, (cols, rows))
cv2.imshow('img', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

三、FPGA实现

1、FPGA实现思路

FPGA实现图像平移,需要采用外部缓存(DDR或多行缓存),也就是输入的视频信号,需要根据图像平移模块的数据请求来发送数据。

图像平移,必然要丢掉原图像中的部分数据,这部分数据丢掉可以在从缓存读取的时候处理,也可以在模块内部处理。

2、FPGA实现效果

最新文章

最新文章