【FPGA/图像处理】几何变换-平移
世界Skill
图像处理理系列文章基本都是我本科毕设论文同步发布,这个项目以LGPL许可被发布在F-I-L。平移是仿射变换的一种特例[25],仿射变换本质上是一个以输入坐标为自变量的线性函数,将在后面的章节详细介绍。平移变换每一个方向的变换只与该方向的输入坐标和偏移量有关,它将图像按照输入的偏移量向着水平和垂直两个方向进行移动,偏移量可正可负,所以会涉及越界的问题。大部分的仿射变换用前向映射实现都会比较复杂,但平移变换是一个例外,可以用特殊方法处理,本节将会介绍如何实现一个平移的模块。
这个IP核的资源在这里:
Pan
3 算法实现
明确了设计和架构,便可以进行算法的实现。本章将会说明如何实现图像处理的算法,以及如何运用它们。
3.18 几何变换-平移
平移是仿射变换的一种特例[25],仿射变换本质上是一个以输入坐标为自变量的线性函数,将在后面的章节详细介绍。平移变换每一个方向的变换只与该方向的输入坐标和偏移量有关,它将图像按照输入的偏移量向着水平和垂直两个方向进行移动,偏移量可正可负,所以会涉及越界的问题。大部分的仿射变换用前向映射实现都会比较复杂,但平移变换是一个例外,可以用特殊方法处理,本节将会介绍如何实现一个平移的模块。
3.18.1 原理
平移变换的基本原理如式3-18-1,Q为输出,I为输入,x和y为输入像素坐标,$x_t$和$y_t$为输出像素坐标,xoffset和yoffset分别为两个方向的偏移量,w和h为图像的宽和高,可见其实现依赖于两次加法操作,由于偏移量可正可负,所以是有符号的加法操作,所以必须考虑到加法操作的结果大于图像最大边界或小于0的状况。
由于平移变换的特殊性,故可以在加法得到的输出坐标越界时进行适当的加法或者减法操作,让输出坐标重新落到图像范围内,同时由于此时的像素是越界的,所以像素色彩置为背景,改进后的算法如式3-18-2、3-18-3、3-18-4和3-18-5,$sum_x$和$sum_y$分别为第一次加法的输出坐标。
所以平移变换需要分两个阶段完成,第一个阶段用两次并行加法分别计算两个原生输出坐标,第二次则用四次并行加法得出假定越界后的输出,同时根据第一个周期得到的原生输出坐标判断输出点是否在边界之内,随后根据边界信息来确定选择原生输出坐标还是假定越界后的坐标进行最终的输出,这是一个二级流水线。
3.18.2 设计
根据原理可知,Pan核(以下简称Pan核)需要两级流水线,若干次并行有符号加法操作和比较操作,同时需要两个端口来确定输出偏移量。故其需要的配置参数与端口如表3-18-1和表3-18-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 | 输入 | 无符号 | 无 | 无 | 复位,低有效。 |
offset_x | input | 有符号 | 如果是正数,则必须是原码,否则为补码。 | 无 | 横向偏移量。 |
offset_y | input | 有符号 | 如果是正数,则必须是原码,否则为补码。 | 无 | 纵向偏移量。 |
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.18.3 实现
根据3.18.2的设计便可以实现一个Pan核,流水线模式和请求响应模式实现如下。
3.18.3.1 流水线模式
输入使能后2个周期第一个结果被输出,开始流水化工作,波形如图3-18-1。
图3-18-1 流水线模式时序
3.18.3.2 请求响应模式读取
基本同3.18.3.1,但只有在in_enable上升沿时输入才会被改变,波形如图3-18-2。
图3-18-1 流水线模式时序
3.18.3.3 IP核GUI
完成功能后对Pan核进行了封装,封装如图3-18-3。
图3-18-3 Pan核的GUI
3.18.4 仿真
只对RGB图像和灰度图像进行测试,我选择了一张图像的RGB和灰度模式进行两套参数的测试,原始图像如图3-18-4。
图3-18-4 仿真原始图像
仿真参数如表3-16-3所示。
xoffset | yoffset |
---|---|
-100 | 100 |
200 | -50 |
仿真并进行PSNR测试,仿真结果如图3-18-5所示。
图3-18-5 仿真结果,左侧为流水线模式下的HDL功能仿真结果,中间为请求响应模式下的HDL功能仿真结果,右侧为软件仿真结果
3.18.5 资源和时序
最终实现与图像大小和数据位宽有关,这里只分析大小为512x512个数据位宽为8时的状况,根据Vivado生成的报表,主要资源耗费如表3-18-4。
Slice LUTs* | Slice Registers |
---|---|
55 | 71 |
同时根据时序报告,最大的Data Path Delay(数据路径延迟)为3.153ns,即:
FMax = 317.15MHz
即说明,Pan核在流水线模式下,理论上在处理1080p全高清图像时可以达到152帧。
由于数据路径延迟和应用的最终约束设置强相关,所以仅供参考。
3.18.6 分析与结论
PSNR如表3-18-5。
1--100x100 | 1-200x-50 | 2--100x100 | 2-200x-50 | Total |
---|---|---|---|---|
1000000.00 | 1000000.00 | 1000000.00 | 1000000.00 | 1000000.00 |
PSNR均值为最大值,Pan核与软件等效,同时可以达到不错的FMax,设计成功。
参考文献
[25] 王金辉,陈冰,王建庄等.实时图像仿射变换系统的研究与实现[J].机械与电子,2012,(2):59-62.DOI:10.3969/j.issn.1001-2257.2012.02.016.
感谢
仿真图像来源:
方向錯亂-Queen