【FPGA/图像处理】几何变换-镜像

少女dtysky

世界Skill

时刻2015.05.27

图像处理理系列文章基本都是我本科毕设论文同步发布,这个项目以LGPL许可被发布在F-I-L。镜像的目的是将图像进行翻转,与色彩反转类似,不过它变换的是坐标。镜像可以用前向映射实现,同时由于输出坐标必然落在原先的图像区域内,所以不用进行区域判断,属于比较简单的几何变换,本节将说明如何实现一个镜像的IP核。
这个IP核的资源在这里:
Mirror


3 算法实现

明确了设计和架构,便可以进行算法的实现。本章将会说明如何实现图像处理的算法,以及如何运用它们。

3.17 几何变换-镜像

镜像的目的是将图像进行翻转,与色彩反转类似,不过它变换的是坐标。镜像可以用前向映射实现,同时由于输出坐标必然落在原先的图像区域内,所以不用进行区域判断,属于比较简单的几何变换,本节将说明如何实现一个镜像的IP核。

3.17.1 原理

镜像有两种模式——水平镜像和垂直镜像,它的原理如式3-17-1所示,Q为输出,I为输入,x和y为输入像素坐标,xtx_tyty_t为输出像素坐标,width和height为图像宽度和高度。可见镜像的本质是将输入坐标和图像的宽度和高度做减法以得到输出坐标,同时由于减法的结果必然小于被减数,故这实际上是单纯的无符号数的减法。

{Q[xt,yt]=I[x,y]xt=width1xx[0,width)yt=height1yy[0,height) .        (3171)\begin{cases}Q[x_t,y_t] = I[x,y] \\x_t = width - 1 - x && x \in[0, width)\\ y_t = height - 1 - y && y \in[0, height)\ \end{cases}.\ \ \ \ \ \ \ \ (3-17-1)

实际应用中会出现三种情况——水平镜像、垂直镜像和全镜像,所以需要一个模式选择来确定模块的工作方式,同时由于图像宽高的位宽均被限定到12位之内,所以只需要一个周期的流水便可以满足FMax。

3.17.2 设计

根据原理可知,Mirror核(以下简称MR核)需要若干次并行减法操作,同时需要根据模式来确定减法操作的次数,所以需要一个mode端口来确定工作的模式。故其需要的配置参数与端口如表3-17-1和表3-17-2。

名字 类型 范围 默认值 说明
work_mode 无符号 0为流水线模式,1为请求响应模式 0 模块的工作模式。
data_width 无符号 1 - 12 8 数据位宽。
im_width 无符号 1 - 4096 320 图像宽度。
im_height 无符号 1 - 4096 240 图像高度。
im_width_bits 无符号 取决于图像宽度 9 图像宽度的位宽。
表3-17-1 配置参数


名字 端口 类型 范围 默认值 说明
clk 输入 无符号 Clock.
rst_n 输入 无符号 复位,低有效。
mode input 无符号 0为水平镜像,1为垂直镜像,2和3为全镜像 工作模式。
in_count_x input 无符号 im_width_bits - 1 : 0 图像横向坐标输入。
in_count_y input 无符号 im_width_bits - 1 : 0 图像纵向坐标输入。
in_enable 输入 无符号 输入数据使能,在流水线模式下,它是另一个复位信号,在请求响应模式下,只有在它有效的时候in_data才会被真正地改变。
in_data 输入 无符号 color_width * in_window_width * in_window_width - 1 : 0 输入数据,必须和in_enable同步输入。
out_ready output 无符号 输出数据有效,在两种模式下,这个信号都会在out_data可以被读取的时候有效。
out_data output 无符号 color_width - 1 : 0 输出数据,将会和out_ready同步输出。
out_count_x input 无符号 im_width_bits - 1 : 0 图像横向坐标输出。
out_count_y input 无符号 im_width_bits - 1 : 0 图像纵向坐标输出。
表3-17-2 端口

3.17.3 实现

根据3.17.2的设计便可以实现一个MR核,流水线模式和请求响应模式实现如下。

3.17.3.1 流水线模式

输入使能后1个周期第一个结果被输出,开始流水化工作,波形如图3-17-1。

图3-17-1 流水线模式时序
图3-17-1 流水线模式时序

3.17.3.2 请求响应模式读取

基本同3.17.3.1,但只有在in_enable上升沿时输入才会被改变,波形如图3-17-2。

图3-17-1 流水线模式时序
图3-17-1 流水线模式时序

3.17.3.3 IP核GUI

完成功能后对MR核进行了封装,封装如图3-17-3。

图3-17-3 MR核的GUI
图3-17-3 MR核的GUI

3.17.4 仿真

只对RGB图像和灰度图像进行测试,我选择了一张图像的RGB和灰度模式进行三种模式的测试,原始图像如图3-17-4。

图3-17-4 仿真原始图像
图3-17-4 仿真原始图像

仿真并进行PSNR测试,仿真结果如图3-17-5所示。

图3-17-5 仿真结果
图3-17-5 仿真结果,从左上角分别为流水线模式下的HDL功能仿真结果,请求响应模式下的HDL功能仿真结果,软件仿真结果

3.17.5 资源和时序

最终实现与图像大小和数据位宽有关,这里只分析大小为512x512个数据位宽为8时的状况,根据Vivado生成的报表,主要资源耗费如表3-17-3。

Slice LUTs* Slice Registers
11 27
表3-17-3 主要资源耗费

同时根据时序报告,最大的Data Path Delay(数据路径延迟)为1.941ns,即:

FMax = 515.19MHz

即说明,MR核在流水线模式下,理论上在处理1080p全高清图像时可以达到248帧。
由于数据路径延迟和应用的最终约束设置强相关,所以仅供参考。

3.17.6 分析与结论

PSNR如表3-17-4。

1-All 1-Horizontal 1-Vertical 2-All 2-Horizontal 2-Vertical Total
1000000.00 1000000.00 1000000.00 1000000.00 1000000.00 1000000.00 1000000.00
表3-17-4 PSNR

PSNR均值为最大值,MR核与软件等效,同时可以达到很高的FMax,设计成功。


参考文献


感谢

仿真图像来源:
LM7-nk

如果不是自己的创作,少女是会标识出来的,所以要告诉别人是少女写的哦。