双线性插值法(Bilinear Interpolation)
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)相关推荐
- python双线性插值函数_双线性插值法原理 python实现
码字不易,如果此文对你有所帮助,请帮忙点赞,感谢! 一. 双线性插值法原理: ① 何为线性插值? 插值就是在两个数之间插入一个数,线性插值原理图如下: 在位置 x 进行线性插值,插入的值为f(x) ↑ ...
- 学无疑物-上采样之双线性插值法详解
什么是插值 Interpolation is a method of constructing new data points within the range of a discrete set o ...
- 深度学习之双线性插值(Bilinear interpolation)
1. 什么是插值 Interpolation is a method of constructing new data points within the range of a discrete se ...
- matlab中bilinear函数,【Bilinear interpolation】双线性插值详解(转)[组图]
[Bilinear interpolation]双线性插值详解(转)[组图] 08-08栏目:技术 TAG:双线性插值 双线性插值 [Bilinear interpolation]双线性插值详解(转) ...
- 《数字图像处理》实验之对图像进行双线性(bilinear)插值缩放
最近数字图像处理的实验课,老师让我们实现对图像进行双线性(bilinear)插值缩放,以下是原理和代码. 一.双线性插值缩放 1.图像几何变换的一般流程: ①确定变换后新图像的大小 ②对新图像的每一个 ...
- 图像插值:最邻近(nearest)与双线性(bilinear)
文章目录 为什么需要图像插值? 输入说明以及图像和坐标预处理 最邻近插值(nearest) 双线性插值(bilinear) 概念法 权重法 测试 为什么需要图像插值? 本质原因就是计算机只能处理和保存 ...
- 数字图像处理实验(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 ...
- 双线性插值法图像放缩示例
算法原理简介 双线性插值是一阶插值,常用于图像的旋转.缩放处理. 它利用原图中对应的四个点的像素值来确定目标图像中的像素值. 为了便于理解,我们来看两张尺寸不一样的图片: 原图 变换图 假设原图图片的 ...
- Opencv下双线性插值法进行图像放缩
关于图像放缩的算法有很多,本文主要介绍双线性插值法进行图像放缩,本文参考了: http://www.cnblogs.com/funny-world/p/3162003.html 我们设源图像src的大 ...
最新文章
- mysql4中出现的本地计算机 无法启动mysql服务 错误1067解决办法
- 超干货 | 在线教育增长实操者案例分享:如何玩转教育增长模型?
- 使用Axure RP原型设计实践05,了解公式
- Taro+react开发(19)--arr声明const报错
- 作者:朱怀球(1970-),男,北京大学教授。
- 软件体系结构风格整理
- smart原则_目标管理:OKR与SMART原则的异同
- 学会Apache网页与安全的优化,让你的技术更加胜人一筹!(网页压缩与缓存、隐藏版本信息与配置防盗链)
- Python中sorted()排序与字母大小写的问题
- 基于Python猫眼票房TOP100电影数据抓取
- viper4android+2.6,ViPER4Androi安卓音效驱动
- 安卓桌面整理app_【小编分享】APP整理大法!跟杂乱无章的手机桌面说拜拜~
- 饕餮盛宴——滑动窗口(尺取法)
- 2016年1月12日微软将结束IE8、IE9和IE10的技术支持
- 正态分布实验报告matlab,matlab实验报告(实验3).doc
- 面试官问:“给你一支笔,怎么测试?”这答案让人惊叹…
- codevs 2924 数独挑战(dfs)
- ALA创世发行!蝰蛇实验室开启全球数据战略布局
- 实现一个模拟工控软件
- 微信小程序的路由跳转、路由传参