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
    +关注

    关注

    1656

    文章

    22297

    浏览量

    630455
  • 算法
    +关注

    关注

    23

    文章

    4761

    浏览量

    97165
  • 双线性
    +关注

    关注

    0

    文章

    7

    浏览量

    7081

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    DAC5681Z 16 位 1.0 GSPS 型数模转换器(DAC)产品手册总结

    该DAC5681Z为16位1.0 GSPS数字转模拟转换器(DAC),支持宽带LVDS 数据输入、集成的2x到4x滤波器、板载时钟倍增器以及内部 电压参考。DAC5681Z提供更优越的线性、噪声
    的头像 发表于 11-21 14:03 441次阅读
    DAC5681Z 16 位 1.0 GSPS <b class='flag-5'>插</b><b class='flag-5'>值</b>型数模转换器(DAC)产品手册总结

    SM4算法实现分享(一)算法原理

    SM4分组加密算法采用的是非线性迭代结构,以字为单位进行加密、解密运算,每次迭代称为一轮变换,每轮变换包括S盒变换、非线性变换、线性变换、合成变换。加解密
    发表于 10-30 08:10

    SM4算法原理及分享1

    SM4算法是一种分组密码算法。其分组长度为128bit,密钥长度也为128bit。加密算法与密钥扩展算法均采用32轮非线性迭代结构,以字(
    发表于 10-30 06:54

    神经网络加速器的双线性插值上采样

    双线性插值法:目标象素根据这个源图中虚拟的点四周的四个真实的点来按照一定的规律计算出来。像最邻近法那样由目标图的坐标反推得到的源图的的坐标是一个浮点数的时候,采用了四舍五入的方法
    发表于 10-29 06:36

    e203除法器算法改进(二)

    的除法运算大多使用SRT-4算法进行设计。下面对其硬件算法进行讲解。 SRT-4算法原理公式推导:根据除法的数学定义而言: x=qD+rem (其中表示x表示被除数,D表示除数,q
    发表于 10-22 06:11

    ST NPI 专区 | 双通道汽车线性电压调节器:L99VR02XP-TR 性能卓越,助力汽车电子创新

    双通道汽车线性电压调节器,输出电压可灵活配置(支持2x250mA电流能力)产品简介L99VR02XP是一款专为汽车应用设计的低压降双线性稳压器,采用PowerSSO-36封装。该产品支持最高
    的头像 发表于 07-09 10:00 1088次阅读
    ST NPI 专区 | 双通道汽车<b class='flag-5'>线性</b>电压调节器:L99VR02XP-TR 性能卓越,助力汽车电子创新

    LOTO电流探头线性度测量

    指标亦称为 "非线性误差"。此越小,表明传感器的线性特性越优良。而"拟合曲线",是通过特定算法构建的参考曲线,旨在为传感器特性分析提供基准。常用的拟合方法包括端基法、最小二乘法等,不
    的头像 发表于 05-23 10:28 363次阅读
    LOTO电流探头<b class='flag-5'>线性</b>度测量

    LP87322E-Q1 适用于DDR3L的TDA3x处理器的汽车双2-A降压转换器和双线性稳压器数据手册

    LP87322E-Q1 是一款专为汽车应用设计的双路高效降压 DC/DC 转换器及双线性稳压器。该器件集成了两个降压转换器(Buck0 和 Buck1)和两个线性稳压器(LDO0 和 LDO1
    的头像 发表于 04-25 16:08 652次阅读
    LP87322E-Q1 适用于DDR3L的TDA3x处理器的汽车双2-A降压转换器和<b class='flag-5'>双线性</b>稳压器数据手册

    LP87332D 工业双3-A降压转换器和AM570x的双线性稳压器数据手册

    LP87332D 旨在满足工业应用中最新处理器和平台的电源管理要求。该器件具有 2 个降压型 DC/DC 转换器、2 个线性稳压器和 2 个通用数字输出信号。该设备由 I 控制^2^C 兼容串行接口和使能信号。
    的头像 发表于 04-25 14:39 534次阅读
    LP87332D 工业双3-A降压转换器和AM570x的<b class='flag-5'>双线性</b>稳压器数据手册

    LP8733-Q1系列 汽车双3-A降压转换器和双线性稳压器数据手册

    LP8733xx-Q1 旨在满足汽车应用中的电源管理要求。该器件具有两个降压 DC/DC 转换器(可配置为单个双相稳压器或两个单相稳压器)、两个线性稳压器和两个通用数字输出信号。该设备由 I 控制^2^C 兼容串行接口和使能信号。
    的头像 发表于 04-25 11:13 679次阅读
    LP8733-Q1系列 汽车双3-A降压转换器和<b class='flag-5'>双线性</b>稳压器数据手册

    基于事件相机的统一帧与自适应去模糊框架(REFID)

    )的解决方案。团队提出了一种基于事件相机的统一帧与自适应去模糊框架(REFID)。该框架基于双向递归网络,结合事件流和图像信息,自适应地融合来自不同时间点的信息,从而能够在模糊的输入帧情况下同步实现
    的头像 发表于 03-14 11:48 1292次阅读
    基于事件相机的统一帧<b class='flag-5'>插</b><b class='flag-5'>值</b>与自适应去模糊框架(REFID)

    ZMC600E运动控制器直线和圆弧算法详解

    导读想深入了解ZMC600E运动控制器的算法吗?空间直线插补适用于精确定位,圆弧补提供平滑曲线过渡。合理应用这些算法,能提升多轴协同能力,保障工作精度与可靠性,让工业自动化更高效
    的头像 发表于 01-20 11:39 1651次阅读
    ZMC600E运动控制器直线和圆弧<b class='flag-5'>插</b>补<b class='flag-5'>算法</b>详解

    请问DAC39J84内部方式是0吗?

    请问DAC39J84内部方式是0吗? 请问2x 4x 8x 16x 过程分别是怎样
    发表于 01-03 06:41

    Teledyne Lecroy示波器算法

    示波器是通过内部硬件ADC对模拟信号采样来获取离散的数据点,然而这些离散的数据点有时难以完整呈现出原始模拟信号的全貌。软件算法的意义就在于,它能够依据特定的数学算法,在已采集的数据
    的头像 发表于 12-24 16:11 1865次阅读

    DAC3482在字输入模式下,FIFO的输出时钟速率为什么是DACCLK/2/因子?

    下图是DAC3482中描述FIFO模块的附图,想问下这里在字输入模式下,FIFO的输出时钟速率为什么是DACCLK/2/因子?
    发表于 12-20 16:31