双线性插值算法的FPGA实现
本设计预实现720P到1080P的图像放大,输入是YUV444数据,分量像素位宽为10bit,采用的算法为双线性插值法,开发平台是xiinx K7开发板。
双线性插值法即双次线性插值,首先在横向线性插值,然后在纵向线性插值,如图1所示。
图1 双线性插值原理 图2 双线性插值FPGA结构
在FPGA中实现主要依靠双线性插值计算公式,即:
P_new=(1-dx)(1-dy)P1+dx(1-dy)P2+(1-dx)dyP3+dxdyP4
为减少乘法的使用,转换为
P_new=P1+[(P4-P3)+(P1-P2)]dxdy-(P1-P2)dx+(P3-P1)dy
其中,P1,P2,P3,P4指的是待插值点周围4个像素点。根据公式可以将插值计算分为3部分:1.相邻像素点(2x2像素模板)的求取。
2.插值系数的求取以及插值系数的计算。同时为达到流水线处理,在获取2x2像素模板后加一级缓存,所以最终的FPGA实现结构如图2所示。其中,
本次设计是对YUV3个分量分别作插值处理,所以使用了3个双线性插值模块。
image_2x2模块用于求取像素点2x2模板,使用2级双口bram级联实现(如果分辨率低可选择移位寄存器)。每个bram缓存一行图像数据,并
在bram输出端插入寄存器作同步用,按照2x2模板位置取出数据,并拼接成40bit。注意:当像素点在边缘时,则采取像素复制的方式得到2x2模板,
即有效像素点取不到的位置使用相邻点替代。
image_buff模块用于2x2像素模板的缓存,输入为40bit(4个像素点),使用两个bram乒乓操作实现。该模块的读地址拉出,供inter_calcu模块
读取像素点数据。
inter_calcu模块用于插值系数的求取和插值系数的计算,是双线性插值算法的核心模块。该模块主要通过缩放坐标转换公式反推原始坐标,然后
根据原始坐标取出前一级image_buff模块数据。转换公式为:
srcx=(dstx+0.5)*(src_width/dst_width)-0.5,即dstx=(srcx+0.5)*(dst_width/src_width)-0.5,Y方向同理。
当前像素点一直流转,即可反推出原始坐标,同时由于FPGA不善于处理浮点数,将其定点化,左移。在本此设计中,src_width/dst_width = 1280/1920 = 2/3,
最后有公式:
128srcx = 85.33dstx-21.33,即 2^13*srcx = {7'd85,6'b010101}dstx-{7'd21,6'b010101};
根据该公式可推算出sryx,srcy的值,其整数为2x2模板的bram坐标({srxy,srcx}),其小数部分即为双线性插值计算公式中的dx,dy。反推坐标部分代码如下所示:
//Intermediate coefficient,插值坐标计算
//反推坐标
assign P1=bram_rddata_i[39:30];
assign P2=bram_rddata_i[29:20];
assign P3=bram_rddata_i[19:10];
assign P4=bram_rddata_i[9:0]; assign corx_wire=(dstx==11'd0)?{7'b0010101,6'b010101}:{7'b1010101,6'b010101}*dstx-{7'b0010101,6'b010101};
assign srcx=corx_wire[23:13];
assign dx=corx_wire[12:0]; assign cory_wire=(dsty==11'd0)?{7'b0010101,6'b010101}:{7'b1010101,6'b010101}*dsty-{7'b0010101,6'b010101};
assign srcy=cory_wire[23:13];
assign dy=cory_wire[12:0];
至此,双线性插值公式中的dx,dy,P1,P2,P3,P4便全部求出,即可计算双线性插值。为达到更好的时序,最后选用4级流水线的方式实现该公式:
P_new=P1+[(P4-P3)+(P1-P2)]dxdy-(P1-P2)dx+(P3-P1)dy,即[(P4-P3)+(P1-P2)]为一级,[(P4-P3)+(P1-P2)]dx为一级,[(P4-P3)+(P1-P2)]dxdy为第三级,
总的加法为第四级,最后实现的效果如图3和图4所示。
图3 720P SDI视频源
图4 缩放后效果图
双线性插值算法的FPGA实现的更多相关文章
- SSE指令集学习:Compiler Intrinsic
大多数的函数是在库中,Intrinsic Function却内嵌在编译器中(built in to the compiler). 1. Intrinsic Function Intrinsic Fun ...
- Atitit 图像处理Depixelizing Pixel Art像素风格画的矢量化
Atitit 图像处理Depixelizing Pixel Art像素风格画的矢量化 在去年的时候,偶然看到hqx算法. 一个高质量的插值放大算法. 与双线性插值等插值算法相比,这个算法放大后对人眼 ...
- paper 121 :matlab中imresize函数
转自:http://www.cnblogs.com/rong86/p/3558344.html matlab中函数imresize简介: 函数功能:该函数用于对图像做缩放处理. 调用格式: B = i ...
- matlab中imresize
matlab中函数imresize简介: 函数功能:该函数用于对图像做缩放处理. 调用格式: B = imresize(A, m) 返回的图像B的长宽是图像A的长宽的m倍,即缩放图像. m大于1, 则 ...
- 【图像处理】ISP 图像传感器camera原理
1.Color Filter Array — CFA 随着数码相机.手机的普及,CCD/CMOS 图像传感器近年来得到广泛的关注和应用. 图像传感器一般都采用一定的模式来采集图像数据,常用的有 BGR ...
- Matlab 之meshgrid, interp, griddata 用法和实例
http://blog.sina.com.cn/s/blog_67f37e760101bu4e.html 实例结果http://wenku.baidu.com/link?url=SiGsFZIxuS1 ...
- QR代码简单
QR代码(Quick Response Code, 高速响应码)属于二维矩阵码在一个.由DENSO(日本电装)公司开发,由JIS和ISO将其标准化. QR码分为两种模式:模式1.模式2.当中.模式1相 ...
- OpenCV ——双线性插值(Bilinear interpolation)
1,原理 在图像的仿射变换中,很多地方需要用到插值运算,常见的插值运算包括最邻近插值,双线性插值,双三次插值,兰索思插值等方法,OpenCV提供了很多方法,其中,双线性插值由于折中的插值效果和运算速度 ...
- QT 二维图形 原理、发展及应用
转载自 网易博客:sun的博客 http://zhouyang340.blog.163.com/blog/static/3024095920126710504178/ 2D绘图 Qt4中的2D绘图部分 ...
随机推荐
- RCNN系列、Fast-RCNN、Faster-RCNN、R-FCN检测模型对比
RCNN系列.Fast-RCNN.Faster-RCNN.R-FCN检测模型对比 一.RCNN 问题一:速度 经典的目标检测算法使用滑动窗法依次判断所有可能的区域.本文则预先提取一系列较可能是物体的候 ...
- MySQL必知必会笔记——查询的基础知识
查询基础知识 第七章 数据过滤 组合where子句 MySQL允许给出多个WHERE子句.这些子 句可以两种方式使用:以AND子句的方式或OR子句的方式使用. AND操作符 可使用AND操作符给WHE ...
- CentOS 30分钟部署 .net core 在线客服系统
前段时间我发表了一系列文章,开始介绍基于 .net core 的在线客服系统开发过程.期间有一些朋友希望能够给出 Linux 环境的安装部署指导,本文基于 CentOS 8.3 来安装部署.在本文中我 ...
- ipconfig提示不是内部或外部命令
昨天因为公司断网,重新连上之后ip地址变了,于是就想看看现在的ip是什么 输入ipconfig,回车 提示不是外部和内部命令,是因为系统在本路径下未找到ipconfig.exe系统,所以无法识别ipc ...
- Redis五种基础与三种高级数据结构解析
记得点赞+关注呦. 前言 在 Redis 最重要最基础就属 它丰富的数据结构了,Redis 之所以能脱颖而出很大原因是他数据结构丰富,可以支持多种场景.并且 Redis 的数据结构实现以及应用场景在面 ...
- Waymo object detect 2D解决方案论文拓展
FixMatch 半监督中的基础论文,自监督和模型一致性的代表作. Consistency regularization: 无监督学习的方式,数据\(A\)和经过数据增强的\(A\)计做\(A'\) ...
- NOIP模拟测试4「礼物·通讯·奇袭」
礼物. 首先见到期望一定要想dp,看到n的范围无脑想状压, 然后我就只想到这了. dp方程式还是比较好想的,但是我依然想不出来 略经思考 颓题解 依然不会,随便写了个式子 i状态中不含j $f[i ...
- [Linux]经典面试题 - 系统管理 - 备份策略
[Linux]经典面试题 - 系统管理 - 备份策略 目录 [Linux]经典面试题 - 系统管理 - 备份策略 一.备份目录 1.1 系统目录 1.2 服务目录 二.备份策略 2.1 完整备份 2. ...
- 10.ODBC创建/读取Excel QT4
看到一篇MFC的参考链接:https://blog.csdn.net/u012319493/article/details/50561046 改用QT的函数即可 创建Excel //创建Excel v ...
- 8、oracle密码过期设置
8.1.登录到oracle实例: [oracle@slave-node2 ~]$ echo $ORACLE_SID orcl [oracle@slave-node2 ~]$ sqlplus sys/1 ...