双线性插值概念

双线性插值在图像领域经常用来修改图像尺寸的过程,简单来说,插值指利用已知的点来“猜”未知的点,由旧的图像矩阵中的点计算新图像矩阵中的点并插入。本文旨在复盘双线性插值的所有实现细节。

单线性插值

线性插值顾名思义,就是根据一个线性关系来在两点之间插入一个点,利用直线任意点斜率不变来求得插入点的值。如下图,Q11和Q21两点的坐标和值,求R1点的值,根据斜率不变可得:

                    

双线性插值

单线性插值是已知两个点,求一个点的值,坐标只是一维空间,而双线性插值则多数为二维空间,即坐标为(x,y)的形式。如下图,如果想知道点P的值,此时则需要找到插值点相邻的四个点。

求解思路:

1,先找到点P相邻的四个点Q11,Q21,Q12, Q22。

2,将x,y坐标拆分成两个一维的单线性插值,求出R1,R2的值,如上面的单线性插值示意推理公式。

3,点P在y方向上进行单线性插值。

最后合在一起,即:

图像的双线性插值

根据上面合并的公式,运用到图像的双线性插值时候,我们找到插值的四个点Q11,Q21,Q12, Q22一般是相邻的,即坐标关系是(x1,y1),(x1+1,y1),(x1,y1+1),(x1+1,y1+1)。所以f(x,y)的公式中x2=x1+1, y2=y1+1又可以化简为:

   

对一张RGB的3通道图像,(1)中的x,y就是图像单通道上weights,heights上的坐标点,f(x,y)则是该通道的像素值,得到了目标点dstX,dstY在原图上对应近邻的四个点坐标srcX, srcY后,三个通道重复代入公式计算f(x,y)就是对应RGB通道的插值结果。

srcX=dstX* (srcWidth/dstWidth),
srcY = dstY * (srcHeight/dstHeight)

根据上面公式,目标点dstX,dstY的像素值:f(dstX,dstY)=f(srcX,srcY),而srcX,srcY一般是一个浮点数,srcX,srcY 分别向上和向下取整就得到了原图中四个点的坐标。利用(1)双线性插值推理公式就得到了dstX, dstY的像素值。

当代码实现时,(1)可以有更简单的实现。

已知srcX,srcY是一个浮点数,令i,u指代srcX的整数和小数部分,j,v指代srcY的整数和小数部分,则(1)公式还可以化简为:

  

图像的双线性插值流程示意如下,注意当求目标像素坐标和原图像的像素坐标时候,一般不用

srcX=dstX* (srcWidth/dstWidth),
srcY = dstY * (srcHeight/dstHeight)

而使用

srcX=(dstX+0.5)* (srcWidth/dstWidth)-0.5
srcY = (dstY+0.5) * (srcHeight/dstHeight)-0.5

这是因为上面定义源图像和目标图像的原点(0,0)均选择左上角,然后根据插值公式计算目标图像每点像素,假设你需要将一幅5x5的图像缩小成3x3,那么源图像和目标图像各个像素之间的对应关系如下。如果没有这个中心对齐,根据基本公式去算,就会得到左边这样的结果,这时原图的最后一个像素不参与插值计算;而用了对齐,就会得到右边的结果,原图的每一个像素都进行了插值计算。左边的结果好像是目标图像进行了左上的平移,而右边则更贴近原图的中间位置线性插值效果。

scale_x = src_Width / dst_Width
scale_y = src_Height / dst_Height
for n in range(3): # 对channel循环for dst_y in range(dst_h): # 对height循环for dst_x in range(dst_w): # 对width循环# 目标在源上的坐标src_x = (dst_x + 0.5) * scale_x - 0.5src_y = (dst_y + 0.5) * scale_y - 0.5# 计算在源图上四个近邻点的位置src_x_0 = int(np.floor(src_x))src_y_0 = int(np.floor(src_y))src_x_1 = min(src_x_0 + 1, src_w - 1)src_y_1 = min(src_y_0 + 1, src_h - 1)# 双线性插值,方法(1)value0 = (src_x_1 - src_x) * src[src_y_0, src_x_0, n] + (src_x - src_x_0) * src[src_y_0, src_x_1, n]value1 = (src_x_1 - src_x) * src[src_y_1, src_x_0, n] + (src_x - src_x_0) * src[src_y_1, src_x_1, n]dst[dst_y, dst_x, n] = int((src_y_1 - src_y) * value0 + (src_y - src_y_0) * value1)# 双线性插值,方法(2)u=src_y-int(src_y)v=src_x-int(src_x)dst[dst_y,dst_x,n]=(1-u)*(1-v)*src[src_y_0, src_x_0,n]+u*(1-v)*src[src_y_1, src_x_0,n]+(1-u)*v*src[src_y_0, src_x_1,n]+u*v*src[src_y_1, src_x_1,n]return dst

参考

https://blog.csdn.net/qq_37577735/article/details/80041586

https://zhuanlan.zhihu.com/p/49832888

https://zhuanlan.zhihu.com/p/110754637

复盘图像双线性插值推导细节相关推荐

  1. pyechart图像示例与细节修改资料

    简介 pyecharts介绍:https://pyecharts.org/#/zh-cn/intro github页面:https://github.com/pyecharts/pyecharts p ...

  2. Super Res Zoom,借助 Pixel 3 增强图像清晰度和细节

    文 / 软件工程师 Bartlomiej Wronski 与计算成像团队首席科学家 Peyman Milanfar 长期以来,使用算法(而非镜头)来实现数码变焦一直是移动设备相机饱受诟病的一面.与数码 ...

  3. 3D透视投影矩阵推导,内含推导细节

  4. 上采样(放大图像)和下采样(缩小图像)(最邻近插值和双线性插值的理解和实现)

    上采样和下采样 什么是上采样和下采样? • 缩小图像(或称为下采样(subsampled)或降采样(downsampled))的主要目的有 两个:1.使得图像符合显示区域的大小:2.生成对应图像的缩略 ...

  5. 基于双边滤波(BF)和加权最小二乘滤波(WLS)的RGB-NIR图像融合细节增强

    基于双边滤波(BF)和加权最小二乘滤波(WLS)的RGB-NIR图像融合细节增强 简介 实现 结果 下载 原文:RGB-NIR Image Enhancement by Fusing Bilatera ...

  6. 用OpenCV4实现图像的超分别率

    用OpenCV4实现图像的超分别率 本实验原文链接: https://arxiv.org/pdf/1807.06779.pdf 原文摘要 单图像超分辨率(SISR)的主要挑战是如何恢复微小纹理等高频细 ...

  7. 自适应图像降噪滤波器的设计与实现

    原文:http://blog.csdn.net/baimafujinji/article/details/73302911 有一个说法:好奇心和懒惰是推动人类发明创造的两大动力!所以今天我又再次展现了 ...

  8. BP反向传播矩阵推导图示详解​

    ©PaperWeekly 原创 · 作者|孙裕道 学校|北京邮电大学博士生 研究方向|GAN图像生成.情绪对抗样本生成 背景介绍 BP(反向传播)是有 Geffrey Hinton 在 1988 年发 ...

  9. delphi 生成 超大量xml_用OpenCV4实现图像的超分别率

    用OpenCV4实现图像的超分别率 本实验原文链接:· f="https://arxiv.org/pdf/1807.06779.pdf">https://arxiv.org/ ...

  10. 深度-图像风格变换【二】

    深度卷积神经网络图像风格变换 Deep Photo Style Transfer Taylor Guo, 2017年4月23日 星期日 - 4月27日星期四 摘要 本文介绍了深度学习方法的图像风格转换 ...

最新文章

  1. 《网页设计创意书》读后感
  2. EMNLP2020:Hugging Face获最佳demo
  3. 浏览器输入url后发生了什么?
  4. 在 SAP 电商云 Spartacus UI 里使用自定义配置控制 UI 调试的开关
  5. Kotlin学习笔记 第二章 类与对象 第十四 十五节 委托 委托属性
  6. 调用另一个cpp的变量_Il2Cpp Internals: 托管调用栈
  7. 2021-2025年中国再生聚酯行业市场供需与战略研究报告
  8. 学习web前端前景怎么样?
  9. 安装oracle11卡住了咋办,WINDOWS SERVER下安装ORACLE11R2采坑记录
  10. S3cCTF-gyy-Writeup
  11. python键值对储存数据_python 存储键值对
  12. 质量值体系 Phred33 和 Phred 64 的由来 及其在质量控制中的实际影响
  13. CAD机械制图入门知识
  14. 如何设置电脑的保护色?
  15. Win10系统盘瘦身
  16. 数据库课程设计:利用python+MySQL+pyqt5设计一个带UI界面的书店管理系统
  17. 计网(第五版)3-41
  18. Pytorch:图像语义分割-FCN, U-Net, SegNet, 预训练网络
  19. 系统或应用计算机指令的术语叫什么意思,[计算机软件及应用]BPM术语解释.doc
  20. Rasa Stack:创建支持上下文的人工智能助理和聊天机器人教程

热门文章

  1. Spring动态代理实现
  2. PowerPC技术与市场杂谈
  3. ajax+php 实现即时聊天
  4. vb在服务器上新建文件夹,VB 创建文件夹
  5. 计算机中函数的括号怎么输,Excel函数中括号的使用
  6. 工科数学分析序言及索引(不断更新中)
  7. 数据结构与算法分析(五)队列
  8. ScienceWord控件问题以及IE8对于base64编码图片长度限制的解决方案
  9. yum安装ruby_Centos安装ruby
  10. Python实现QQ游戏连连看外挂秒杀