1、单线性插值

先讲一下单线性插值:已知数据 (x0, y0) 与 (x1, y1),要计算 [x0, x1] 区间内某一位置 x 在直线上的y值。因为直线上的函数值是线性变化的,我们只需通过计算x0、x两点斜率和x0、x1两点的斜率,令二者相等可以得到一个方程,如下所示。

通过计算就能算出x点对应的函数值y了

2、双线性插值

所谓双线性插值,就是在两个方向上进行了插值,总共进行了三次插值

在X方向做插值:

在Y方向做插值:

综合起来:

 映射公式:(A为原图B为目标图,按几何中心对应,scale为放大倍数)

AX = (BX + 0.5) * ( AW / BW) - 0.5
AY = (BY + 0.5) * ( AH / BH) - 0.5

AX = (BX + 0.5) /scale - 0.5(scale是放大缩小倍数)
AY = (BY + 0.5) /scale - 0.5

原图像和目标图像的原点(0,0)均选择左上角,然后根据插值公式计算目标图像每点像素,假设你需要将一幅5x5的图像缩小成3x3,那么源图像和目标图像各个像素之间的对应关系如下。如果没有这个中心对齐,根据基本公式去算,就会得到左边这样的结果;而用了对齐,就会得到右边的结果:

3、代码实现

"""
@author: 绯雨千叶双线性插值法(使用几何中心对应)
AX=(BX+0.5)*(AW/BW)-0.5
AY=(BY+0.5)*(AH/BH)-0.5
或
AX=(BX+0.5)/scale-0.5(scale是放大倍数)
AY=(BY+0.5)/scale-0.5
A是原图,B是目标图
"""
import numpy as np
import cv2def bilinear(img, scale):AH, AW, channel = img.shapeBH, BW = int(AH * scale), int(AW * scale)dst_img = np.zeros((BH, BW, channel), np.uint8)for k in range(channel):for dst_x in range(BW):for dsy_y in range(BH):# 找到目标图x、y在原图中对应的坐标AX = (dst_x + 0.5) / scale - 0.5AY = (dsy_y + 0.5) / scale - 0.5# 找到将用于计算插值的点的坐标x1 = int(np.floor(AX))  # 取下限整数y1 = int(np.floor(AY))x2 = min(x1 + 1, AW - 1)  # 返回最小值y2 = min(y1 + 1, AH - 1)# 计算插值R1 = (x2 - AX) * img[y1, x1, k] + (AX - x1) * img[y1, x2, k]R2 = (x2 - AX) * img[y2, x1, k] + (AX - x1) * img[y2, x2, k]dst_img[dsy_y, dst_x, k] = int((y2 - AY) * R1 + (AY - y1) * R2)return dst_imgif __name__ == '__main__':img = cv2.imread('../img/lrn.jpg')dst = bilinear(img, 1.5)  # 设置放大1.5倍cv2.imshow('bilinear', dst)cv2.imshow('img', img)cv2.waitKey()

效果展示:

双线性插值法(Bilinear Interpolation)相关推荐

  1. python双线性插值函数_双线性插值法原理 python实现

    码字不易,如果此文对你有所帮助,请帮忙点赞,感谢! 一. 双线性插值法原理: ① 何为线性插值? 插值就是在两个数之间插入一个数,线性插值原理图如下: 在位置 x 进行线性插值,插入的值为f(x) ↑ ...

  2. 学无疑物-上采样之双线性插值法详解

    什么是插值 Interpolation is a method of constructing new data points within the range of a discrete set o ...

  3. 深度学习之双线性插值(Bilinear interpolation)

    1. 什么是插值 Interpolation is a method of constructing new data points within the range of a discrete se ...

  4. matlab中bilinear函数,【Bilinear interpolation】双线性插值详解(转)[组图]

    [Bilinear interpolation]双线性插值详解(转)[组图] 08-08栏目:技术 TAG:双线性插值 双线性插值 [Bilinear interpolation]双线性插值详解(转) ...

  5. 《数字图像处理》实验之对图像进行双线性(bilinear)插值缩放

    最近数字图像处理的实验课,老师让我们实现对图像进行双线性(bilinear)插值缩放,以下是原理和代码. 一.双线性插值缩放 1.图像几何变换的一般流程: ①确定变换后新图像的大小 ②对新图像的每一个 ...

  6. 图像插值:最邻近(nearest)与双线性(bilinear)

    文章目录 为什么需要图像插值? 输入说明以及图像和坐标预处理 最邻近插值(nearest) 双线性插值(bilinear) 概念法 权重法 测试 为什么需要图像插值? 本质原因就是计算机只能处理和保存 ...

  7. 数字图像处理实验(4):PROJECT 02-04 [Multiple Uses],Zooming and Shrinking Images by Bilinear Interpolation

    实验要求: Zooming and Shrinking Images by Bilinear Interpolation Objective To manipulate another techniq ...

  8. 双线性插值法图像放缩示例

    算法原理简介 双线性插值是一阶插值,常用于图像的旋转.缩放处理. 它利用原图中对应的四个点的像素值来确定目标图像中的像素值. 为了便于理解,我们来看两张尺寸不一样的图片: 原图 变换图 假设原图图片的 ...

  9. Opencv下双线性插值法进行图像放缩

    关于图像放缩的算法有很多,本文主要介绍双线性插值法进行图像放缩,本文参考了: http://www.cnblogs.com/funny-world/p/3162003.html 我们设源图像src的大 ...

最新文章

  1. mysql4中出现的本地计算机 无法启动mysql服务 错误1067解决办法
  2. 超干货 | 在线教育增长实操者案例分享:如何玩转教育增长模型?
  3. 使用Axure RP原型设计实践05,了解公式
  4. Taro+react开发(19)--arr声明const报错
  5. 作者:朱怀球(1970-),男,北京大学教授。
  6. 软件体系结构风格整理
  7. smart原则_目标管理:OKR与SMART原则的异同
  8. 学会Apache网页与安全的优化,让你的技术更加胜人一筹!(网页压缩与缓存、隐藏版本信息与配置防盗链)
  9. Python中sorted()排序与字母大小写的问题
  10. 基于Python猫眼票房TOP100电影数据抓取
  11. viper4android+2.6,ViPER4Androi安卓音效驱动
  12. 安卓桌面整理app_【小编分享】APP整理大法!跟杂乱无章的手机桌面说拜拜~
  13. 饕餮盛宴——滑动窗口(尺取法)
  14. 2016年1月12日微软将结束IE8、IE9和IE10的技术支持
  15. 正态分布实验报告matlab,matlab实验报告(实验3).doc
  16. 面试官问:“给你一支笔,怎么测试?”这答案让人惊叹…
  17. codevs 2924 数独挑战(dfs)
  18. ALA创世发行!蝰蛇实验室开启全球数据战略布局
  19. 实现一个模拟工控软件
  20. 微信小程序的路由跳转、路由传参

热门文章

  1. 为什么喜欢打LOL(优质游戏特性分析)
  2. 运放输入的共模输入阻抗,差模输入电阻
  3. 抠汗毛、发丝简直弱爆了,这款抠图神器什么都能抠!
  4. 软件测试-功能测试-知识点
  5. Linux中autoduck批量对接,利用AutoDOCK进行分子对接(一)
  6. QT 绘制圆角边框存在圆角加粗问题,使用反锯齿无效
  7. 工作中遇到的问题-关于博世的IP7400协议
  8. python3d画图mpl_toolkits.mplot3d
  9. 巨人肩上的矮企鹅:QQ旋风为什么抄袭迅雷
  10. 更方便、更实用的IDC机房服务器监控软件UNNOC