0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

CHANBAEK 来源:FPGA Zone 作者:FPGA Zone 2023-09-04 16:52 次阅读

今天开源一个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仿真结果如下所示。

图片

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1628

    文章

    21721

    浏览量

    602859
  • 图像处理
    +关注

    关注

    27

    文章

    1288

    浏览量

    56709
  • 算法
    +关注

    关注

    23

    文章

    4606

    浏览量

    92800
  • Vivado
    +关注

    关注

    19

    文章

    812

    浏览量

    66448
  • 图像旋转
    +关注

    关注

    0

    文章

    3

    浏览量

    2197
收藏 人收藏

    评论

    相关推荐

    什么是线性插值?一维线性插值双线性插值在BMS开发中的应用

    线性插值法(linear interpolation),是指使用连接两个已知量的直线来确定在这两个已知量之间的一个未知量的的方法。
    的头像 发表于 12-24 10:44 1w次阅读
    什么是<b class='flag-5'>线性插值</b>?一维<b class='flag-5'>线性插值</b>和<b class='flag-5'>双线性插值</b>在BMS开发中的应用

    双线性插值法的C语言程序!帮帮忙!拜托各位了!

    在DSP6000开发平台上用C语言实现双线性插值法,实现对图像的缩放效果的改进。
    发表于 04-20 18:52

    这个论坛里面有没有人做 fpga图像缩小的 (不是放大)??求交流交流 真的是很头大 到处找不到做 图像缩小的?

    这个论坛里面有没有人做fpga图像缩小的 (不是放大)??求交流交流真的是很头大到处找不到做 图像缩小的?可以的话留下个联系方式 交流交流我这里有一个 通过双线性插值实现放大的
    发表于 12-23 21:10

    一种基于FPGA的实时视频图像处理算法研究与实现

    针对视频的输出显示要求,重点介绍了基于双线性插值算法的实现。ModelSim的仿真结果表明,该算法符合多屏幕显示系统的要求。关键词 视频监控;视频图像处理;
    发表于 06-28 07:06

    一种改进的线性图像算法

    针对传统的双线性插值法在对图像进行后会不可避免的产生边缘模糊的问题,提出了一种改进的线性插值法,该
    发表于 08-20 12:01 29次下载

    基于Matlab的双线性插值算法图像旋转中的应用

    MATLAB双线性插值图像处理的算法,读者可以自行参考。
    发表于 05-04 16:04 1次下载

    基于最优移位双线性插值图像缩放旋转硬件加速研究

    基于最优移位双线性插值图像缩放旋转硬件加速研究_丁家隆
    发表于 01-08 15:15 10次下载

    基于双线性插值图像缩放在GPU上的实现

    基于双线性插值图像缩放在GPU上的实现
    发表于 01-08 14:47 0次下载

    基于双线性插值原理实现图像缩放算法

    转化为目标图像的相应点的新坐标。是指在已知的离散数据上补连续函数,使补连续函数的曲线通过全部给定的离散数据点,是处理离散函数逼近问题
    发表于 11-07 14:41 11次下载
    基于<b class='flag-5'>双线性插值</b>原理实现<b class='flag-5'>图像</b>缩放<b class='flag-5'>算法</b>

    基于FPGA双线性CFA算法的设计

    实现了基于FPGA双线性CFA算法。该算法的处理对象是每个像素为8bit的XGA@15Hz
    发表于 11-23 14:24 4402次阅读
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>双线性</b>CFA<b class='flag-5'>插</b><b class='flag-5'>值</b><b class='flag-5'>算法</b>的设计

    如何通过FPGA变成我们看到的色彩斑斓的图片

    这里所谓的De-Bayer就是将Bayer格式转换成正常的RGB格式。我们采用双线性插值法,这是一个平衡计算量和图像质量的算法双线性插值法是利用它自己邻近的4个像素的颜色分量来补充自
    的头像 发表于 11-14 10:42 4649次阅读

    FPGA上如何实现双线性插值的计算

    双线性插值顾名思义是线性插值Pro,为了说明白什么是双线性插值,首先得先从线性插值说起。那么什么又是线性呢?
    发表于 08-09 17:33 4632次阅读

    使用FPGA实现视频图像缩放显示的设计论文说明

    对几种常用的图像缩放算法进行了比较,在权衡了算法复杂度、缩放效果和FPGA 逻辑资源等3大因素后,选择了双线性插值算法来实现
    发表于 01-25 14:51 6次下载
    使用<b class='flag-5'>FPGA</b>实现视频<b class='flag-5'>图像</b>缩放显示的设计论文说明

    双线性插值算法的讲解

    双线性插值中,我们现在找x0', y0'所在位置旁边的四个点,再根据这四个点与(x0',y0')距离的关系得到权重,最后计算出目标图像中(x,y)一点的像素
    的头像 发表于 09-19 10:25 3225次阅读

    FPGA纯verilog代码实现图像缩放

    本设计将常用的双线性插值和邻域算法融合为一个代码中,通过输入参数选择某一种算法
    发表于 06-06 15:06 2282次阅读
    <b class='flag-5'>FPGA</b>纯verilog代码实现<b class='flag-5'>图像</b>缩放