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

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

3天内不再提示

双线性插值算法的讲解

FPGA设计论坛 来源:FPGA设计论坛 作者:FPGA设计论坛 2022-09-19 10:25 次阅读

一、双线性插值概述

双线性插值作为OpenCV中默认使用的图像缩放算法,其效果和速度都是不错的。并且效果也比较稳定,计算复杂度并不算太高。我看了很多网上的算法,自己也没看太懂,下面是从网上找的双线性插值 算法的讲解。

“图像的双线性插值放大算法中,目标图像中新创造的象素值,是由源图像位置在它附近的2*2区域4个邻近象素的值通过加权平均计算得出的。双线性内插值算法放大后的图像质量较高,不会出现像素值不连续的的情况。然而此算法具有低通滤波器的性质,使高频分量受损,所以可能会使图像轮廓在一定程度上变得模糊。”

二、双线性插值与最近邻插值对比

双线性插值算法和最近邻插值算法比较类似。在最近邻插值算法中,目标图像中的某个点(x,y)是去源图像中找最邻近的一个点(x0, y0)即可。目标图像中的点(x, y)对应于源图像中的点(x0',y0'),x0'、y0'很可能不是整数,而是小数,而最近邻插值算法是找其邻近整型值(int(x0'+0.5f),int(y0'+0.5f))(四舍五入处理)。

在双线性插值中,我们现在找x0', y0'所在位置旁边的四个点,再根据这四个点与(x0',y0')距离的关系得到权重值,最后计算出目标图像中(x,y)一点的像素值。

三、双线性插值算法实现

算法描述如下:

(1)计算源图像与目标图像宽与高的比例

w0 : 表示源图像的宽度

h0 : 表示源图像的高度

w1 : 表示目标图像的宽度

h1 : 表示目标图像的高度

float fw = float(w0-1)/(w1-1); //在FPGA实现中一般会进行四舍五入取整操作

float fh = float(h0-1)/(h1-1);

(2)针对目标图像的一个点(x, y),计算在源图像中的对应坐标,结果为浮点数。

float x0 = x * fw;

float y0 = y * fh;

int x1 = int(x0); //取整处理

int x2 = x1 + 1;

int y1 = int(y0);

int y2 = y1+1;

所求的源图像中的四个点坐标为(x1, y1) (x1, y2) (x2, y1) (x2,y2)

(3)求周围四个点所占的权重比值

如上图,

fx1 = x0 - x1;

fx2 = 1.0f - fx1;

fy1 = y0 - y1;

fy2 = 1.0f - fy1;

float s1 = fx1*fy1;

float s2 = fx2*fy1;

float s3 = fx2*fy2;

float s4 = fx1*fy2;

我们以value(坐标)来代表取得此点的坐标值,则:

value(x0,y0) = value(x2,y2)*s1+value(x1,y2)*s2+value(x1,y1)*s3+value(x2,y1)*s4;

如果 对上述运算不够明白 的话,可以这样来求。

我们先要求得(x0, y1) 和(x0,y2)的像素值。

则float value(x0,y1) = value(x1,y1)*fx2 + value(x2,y1)*fx1;

float value(x0,y2) = value(x1,y2)*fx2 + value(x2,y2)*fx1;

注释:离某点越近,离权重越大,故取其与1的差值。

float value(x0,y0) = value(x0,y1)*fy2 + value(x0,y2)*fy1;

验证后与上边公式一样。

(4)求得值后填充到目标图像上就可以了。

我的理解:算法概念理解相对容易,但是如何在FPGA上实现却需要考虑一些问题,在此提出大体构架,日后再具体实现

1、算法中的浮点数运算,能否简单的用四舍五入取整处理代替?

2、输入的数据可以先缓存到两块RAM内,RAM0和RAM1进行乒乓操作,

当RAM0缓存满一行数据时,算法模块可以读取RAM0数据进行操作,

同时,RAM1缓存第二行数据。

3、在操作过程中,单独的一行一行处理只能实现线性插值,也就是输出数据只跟一行输入数据有关,如何实现4个临近像素相关?

4、基于问题3,现有参考代码是先进行垂直插值再进行水平插值,垂直插值输出像素值和垂直插值权重,再将其作为输入,进行水平

线性插值运算,最终得到目标点像素值。

5、插值后的数据就可以进行后续操作最终输出到HDMI

审核编辑 :李倩

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

    关注

    1603

    文章

    21328

    浏览量

    593275
  • 算法
    +关注

    关注

    23

    文章

    4458

    浏览量

    90763
  • 双线性
    +关注

    关注

    0

    文章

    7

    浏览量

    6992

原文标题:双线性插值算法公式分析及FPGA实现初步构架

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGA图像处理之CLAHE算法线性差值

    对于最后一种情况,也就是位于中间白色区域的点,他需要进行双线性插值。可以看到整个点位于第四个block,所以他需要在第一个,第二个,第四个和第五个block上分别计算直方图均衡化的结果,和相应的权重。
    发表于 01-21 10:51 548次阅读
    FPGA图像处理之CLAHE<b class='flag-5'>算法</b>的<b class='flag-5'>线性</b>差值

    ADI362如何得到线性加速度的

    我看到ST公司的加速度传感器,可以同时输出普通含有重力加速度的以及滤波过后的线性加速度。请问使用ADI362可以得到同样的各个轴的线性加速度
    发表于 01-01 06:56

    请问ADE7953的IRMSA和VRMS寄存器输出线性的还是非线性的?

    请问ADE7953的IRMSA和VRMS寄存器输出线性的还是非线性的?或者是在某些区间是线性的而某些
    发表于 12-26 07:01

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

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

    AD9866内部的DAC包含滤波器,ADC包含三阶可编程低通滤波器,两个滤波器的相位特性是怎样的?

    AD9866内部的DAC包含滤波器,ADC包含三阶可编程低通滤波器。 请问这两个滤波器的相位特性是怎样的?是线性的吗? 多谢各位啦
    发表于 12-18 07:49

    工欲善其事必先利其器,好用的编辑器推荐

    之前分享了基于FPGA的线性插值算法,接下来准备编写程序和写测试用例。在写程序之前,先分享一款好用的便捷器。希望能够帮助大家喜欢。下面分别介绍工具的安装和推荐的理由。 1, Notepad++安装
    发表于 11-24 23:26

    基于FPGA的线性插值-中

    上次分享了基于FPGA的线性插值的背景和方法原理,今天分享 方法原理的验证。 通常FPGA的开发分为电路功能设计、设计输入、功能仿真、综合优化、综合后仿真、实现、布线后仿真、板级仿真以及芯片编程
    发表于 11-23 23:09

    基于FPGA的线性插值-上

    ,并且做除法会消耗大量的资源。 本文提出一种基于查找法实现线性插值算法,不需要利用除法实现线性插值。 2,方法原理 由当D是A,B的中点时,可以求出D的坐标为: x\' = (x1 + x2
    发表于 11-20 23:10

    如何用平行双线开口解释天线辐射的基本原理

    但是好多微波理论计算的起点却是从平行双线开始的,我们用平行双线的开口来解释天线辐射的基本原理;也利用平行双线模型来推导传输线的路模型。
    发表于 11-20 09:39 587次阅读
    如何用平行<b class='flag-5'>双线</b>开口解释天线辐射的基本原理

    嵌入式操作教程:4-6 无限冲激响应滤波器(IIR)算法(MATLAB 辅助,LCD显示)

    ,通过双线性变换、或脉冲响应不变法来进行数字滤波器的设计。它的设计比较复杂,复杂在于它的模拟滤波器传输函数H(s)的确定。这一点可以让软件来实现。具体实现步骤: (1)先确定需要一个什么样的滤波器
    发表于 11-16 15:08

    滤波器设计与信号处理的MATLAB实现

    基于第 3 步由模拟滤波器向数字滤波器的转化方式,IIR 滤波器设计方法分为“脉冲响应不变法”和“双线性变换法”,由于“脉冲响应不变法”存在混叠误差的缺陷,因此一般我们多选“双线性变换法”,而对于第
    发表于 09-26 07:22

    双线并绕电感温度过高的原因分析

    在电感产品中,双线并绕电感是比较常见的一种类型,它在很多电源类产品都比较常见。本篇我们就针对这个双线并绕电感做一个热门话题的探讨—双线并绕电感温度过高的原因。
    的头像 发表于 09-22 10:41 397次阅读

    多功能贴片机

    在X和Y定位系统中大多采用全闭环伺服电动机驱动,用线性光栅尺编码器来进行直接位置反馈,避免因丝杆扭曲变形的误差。有的在y轴采用双电动机和双丝杆在平台的两边驱动,并用双线性光栅尺进行反馈,可以有效地减小因贴装头静止造成的等待,减少了横梁的不同步变形而造成的误差。
    发表于 09-21 15:17 275次阅读
    多功能贴片机

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

    今天开源一个FPGA图像处理相关的项目:图像旋转。图像旋转算法本身非常简单,但是如果想让旋转之后的图像更加完整、平滑,还需要进行双线性插值处理,因此整个算法FPGA实现起来还是有一定难度的。
    的头像 发表于 09-04 16:52 828次阅读
    基于FPGA的图像旋转和<b class='flag-5'>双线性插值</b><b class='flag-5'>算法</b>设计

    FPGA纯verilog代码实现图像缩放

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