基于FPGA的图像旋转和双线性插值算法设计

今天开源一个fpga图像处理相关的项目:图像旋转。图像旋转算法本身非常简单,但是如果想让旋转之后的图像更加完整、平滑,还需要进行双线性插值处理,因此整个算法fpga实现起来还是有一定难度的。
01算法流程
图像旋转算法可以有两种思路:一种是前向映射,就是由原始图像出发,将像素点传递给旋转后的图像;另一种是反向映射,就是从旋转后的图像出发,找到原始图像对应像素点,然后通过双线性插值算法使旋转后图像更清晰完整。由于前者会丢失很多图像信息,因此在本项目中采用后者。算法流程图如下。
02原理简介
输入图像分辨率默认为256*256,算法处理的是以128为半径内切圆区域。
输出图像一维坐标为i[0,65535],假设图像逆时针旋转θ得到输出图像,对应的输入图像旋转坐标(x,y)则可以表示成:
x=(i%256-128)*cos(θ)+(128-i/256)*sin(θ)
y=-(i%256-128)*sin(θ)+(128-i/256)*cos(θ)
首先,对(x,y)向下取整得到(xx,yy),小数部分表示为(dx,dy),将(xx,yy)转换到输出图像坐标系下为:
xx=xx+128;
yy=128-yy;
进行双线性插值处理:
i(xx,yy)=(1-dx)(1-dy)i(xx,yy)+ (1-dx)dyi(xx,yy-1)+dx(1-dy)i(xx+1,yy)+dxdyi(xx+1,y-1)
浮点数定点化处理:
sin(θ)和cos(θ)值为乘以8192取整后的结果;将上式中dx,dy项定义为8位整数,1改为255参与运算,最后将计算结果向右平移16位。03ip核配置
该vivado工程用到的ip主要是 **multiplier,**用于乘法运算。
signed_16bit * signed_16bit
unsigned_9bit * unsigned_9bit
unsigned_18bit * unsigned_16bit
04测试结果
下方左侧图像为256*256大小的原始测试图像,右侧为顺时针旋转30°后的结果。其中只处理了内切圆区域内的图像,其余部分像素赋值为零。
verilog代码的vivado仿真结果如下所示。

微软修复潜藏17年的Windows DNS漏洞
宝马将向纯电动MINI车型供应新型电池
TechInsights关于苹果智能手表金属壳电池的探讨——一种适用于便携式和可穿戴电子产品的新颖设计
利用AD5933的高精度生物阻抗测量方案
清华大学正式发布了《人工智能芯片技术白皮书(2018)》
基于FPGA的图像旋转和双线性插值算法设计
生物识别技术已进入人们生活的各个方面
索尼XperiaXZPremium评测 绝对称得上2017年的安卓机皇
DA6101Q/6111Q测试电路的原理分析
AI与AR可以共进退吗
rfid技术给布草租赁带来了什么
嵌入式系统应对安全级别的设计
海水淡化中的常用流量仪表选型分析
基于现场总线can-bus的plc网络方案
石墨烯可为光谱学和生物医学应用提供超快激光脉冲
国联与闻天下共同成立规模达100亿元的5G通讯和半导体产业基金
法雷奥收购西门子新能源汽车公司股份 72%受访者认为科技让世界更美好
铜缆检测参数:插入损耗
医疗卫生行业对AI的需求源于以下五个方面
一种纯相超细InAs–Al纳米线的制造方法