【FPGA/图像处理】几何变换-裁剪
世界Skill
图像处理理系列文章基本都是我本科毕设论文同步发布,这个项目以LGPL许可被发布在F-I-L。几何变换的基本操作单元是像素的坐标,它保留色彩信息,对坐标进行变换。几何变换有两种大方向的分类,分别是前向映射和逆向映射[3],对于FPGA而言,前向映射实现需要的资源较少,但是往往难度较高,但只能满足一部分简单的变换。裁剪操作可以用前向映射实现,它保留图像的一个区域的色彩信息,将其他部分的色彩置为背景,本节将说明如何实现一个裁剪模块。
这个IP核的资源在这里:
Crop
3 算法实现
明确了设计和架构,便可以进行算法的实现。本章将会说明如何实现图像处理的算法,以及如何运用它们。
3.16 几何变换-裁剪
几何变换的基本操作单元是像素的坐标,它保留色彩信息,对坐标进行变换。几何变换有两种大方向的分类,分别是前向映射和逆向映射[3],对于FPGA而言,前向映射实现需要的资源较少,但是往往难度较高,但只能满足一部分简单的变换。裁剪操作可以用前向映射实现,它保留图像的一个区域的色彩信息,将其他部分的色彩置为背景,本节将说明如何实现一个裁剪模块。
3.16.1 原理
前向映射将原图像的像素坐标作为自变量,以某个变换函数得出目标图像的像素坐标,裁剪变换的变换函数如式3-16-1,Q为输出,I为输入,x和y为原图像坐标,t、b、l、r为四个边界,从某种角度来看,它实际上一种非线性滤波器,保留输入坐标的同时变换输出色彩。
所以,实现一个裁剪模块实际上是要通过给定的边界信息来确定可以输出的一个区域,然后根据是否在这个区域内来确定输出。
3.16.2 设计
根据原理可知,Crop核(以下简称CP核)需要进行区域判断,而判断是根据四次比较(上下左右)来完成的,故需要四个端口来输入四方的边界值,随后在模块内部进行并行比较,最后全部取与即可得到是否在区域内的信息。同时由于坐标被作为了基本的操作元素,所以输出中也应当包含坐标值。故其需要的配置参数与端口如表3-16-1和表3-16-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 | 图像宽度的位宽。 |
名字 | 端口 | 类型 | 范围 | 默认值 | 说明 | clk | 输入 | 无符号 | 无 | 无 | Clock. |
---|---|---|---|---|---|
rst_n | 输入 | 无符号 | 无 | 无 | 复位,低有效。 |
top | input | 无符号 | 取决于图像的高度,0 - im_height-1 | 无 | 裁剪区域的上边界。 |
bottom | input | 无符号 | 取决于图像的高度,0 - im_height-1 | 无 | 裁剪区域的下边界。 |
left | input | 无符号 | 取决于图像的高度,0 - im_widtht-1 | 无 | 裁剪区域的左边界。 |
right | input | 无符号 | 取决于图像的高度,0 - im_widtht-1 | 无 | 裁剪区域的右边界。 |
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.16.3 实现
根据3.16.2的设计便可以实现一个CP核,流水线模式和请求响应模式实现如下。
3.16.3.1 流水线模式
输入使能后1个周期第一个结果被输出,开始流水化工作,波形如图3-16-1。
图3-16-1 流水线模式时序
3.16.3.2 请求响应模式读取
基本同3.16.3.1,但只有在in_enable上升沿时输入才会被改变,波形如图3-16-2。
图3-16-1 流水线模式时序
3.16.3.3 IP核GUI
完成功能后对CP核进行了封装,封装如图3-16-3。
图3-16-3 CP核的GUI
3.16.4 仿真
CP核的变换与色彩空间无关,所以适合所有色彩的变换,但综合考虑测试的必要性和测试平台的编写复杂度,只对RGB图像和灰度图像进行测试,我选择了一张图像的RGB和灰度模式进行测试,原始图像如图3-16-4。
图3-16-4 仿真原始图像
仿真参数如表3-16-3所示。
Top | Bottom | Left | Right |
---|---|---|---|
20 | 492 | 20 | 492 |
100 | 402 | 200 | 302 |
仿真并进行PSNR测试,仿真结果如图3-16-5所示。
图3-16-5 仿真结果,左侧为流水线模式下的HDL功能仿真结果,中间为请求响应模式下的HDL功能仿真结果,右侧为软件仿真结果
3.16.5 资源和时序
最终实现与图像大小和数据位宽有关,这里只分析大小为512x512个数据位宽为8时的状况,根据Vivado生成的报表,主要资源耗费如表3-16-4。
Slice LUTs* | Slice Registers |
---|---|
29 | 5 |
同时根据时序报告,最大的Data Path Delay(数据路径延迟)为2.113ns,即:
FMax = 473.26MHz
即说明,CP核在流水线模式下,理论上在处理1080p全高清图像时可以达到228帧。
由于数据路径延迟和应用的最终约束设置强相关,所以仅供参考。
3.16.6 分析与结论
PSNR如表3-16-5。
1-100x402x200x302 | 1-20x492x20x492 | 2-100x402x200x302 | 2-20x492x20x492 | Total |
---|---|---|---|---|
1000000.00 | 1000000.00 | 1000000.00 | 1000000.00 | 1000000.00 |
PSNR均值为最大值,CP核与软件等效,同时可以达到很高的FMax,设计成功。
参考文献
[3] Donald G.Bailey.基于FPGA的嵌入式图像处理系统设计[M].原魁,何文浩,肖晗译.北京:电子工业出版社,2013.
感谢
仿真图像来源:
おにねこ-メカニック・ロンド