打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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取整后的结果;
  • 将上式中dxdy项定义为8位整数,1改为255参与运算,最后将计算结果向右平移16位。

03


IP核配置

该Vivado工程用到的IP主要是 Multiplier,用于乘法运算。

  • Signed_16bit * Signed_16bit
  • Unsigned_9bit * Unsigned_9bit
  • Unsigned_18bit * Unsigned_16bit

04


测试结果

下方左侧图像为256*256大小的原始测试图像,右侧为顺时针旋转30°后的结果。其中只处理了内切圆区域内的图像,其余部分像素赋值为零。

Verilog代码的Vivado仿真结果如下所示。

05


源码获取方式
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
深度滤波器(2)
cf战队介绍大全
车牌识别步骤及部分代码
Lv1:图像插值算法
数字图像插值算法:最临近插值和双线性插值
拉格朗日(Lagrange)插值法(C语言)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服