双线性插值学习

插值

什么是插值

为什么要进行插值

插值大概都有啥方法

插值是覆盖掉原来的数值还是加入新的数值?

图像放大是图像处理中的一个特别基础的操作。在几乎每一个图片相关的项目中,从传统图像处理到深度学习,都有应用。从图片发出到朋友收到图片,查看图片,都会数次地改变图像地尺寸,从而用到这个算法

插值指的是利用已知的点来猜未知的点,图像领域插值常用在修改图像尺寸的过程,由旧的图像矩阵中的点计算新图像矩阵中的点并插入,不同的计算过程就是不同的插值算法

下图是自己实现双线性插值的效果:

常用的插值算法:

最近邻法:计算速度最快,但是效果最差

双线性插值 bilinear interpolation:双线性插值是用原图像中4(2*2)个点计算新图像中1个点,效果略差于双三次插值,速度比双三次插值快,在很多框架中属于默认算法

双三次插值 bicubic interpolation 双三次插值是用原图像中的16(4*4)个点计算新图像中1个点,效果好但是计算代价大

最近邻法:

最近邻法实际上是不需要计算新图像矩阵中的点的数值的,直接找到原图像中对应的点,将数值赋值给新图像矩阵中的点,根据对应关系找到原图像中的对应的坐标,这个坐标可能不是整数,这时候找最近的点进行插值

别管这个截图中的新图中的某个点了,肯定是整数,但是在原图中,要根据变换的方式去映射,映射到的位置可能是小数

变换方式决定映射关系,映射关系决定原图采样位置 所以既然这样的话哦我就不去举例子计算对应关系了

双线性插值就不是找最近的那个点,而是找最近的四个点

针对于单线性插值,已知p1和 p2 计算x1 x2区间内某一位置x在直线上的y值,直接求一条直线公式

这个直线公式也是双线性插值所需要的唯一的基础公式

双线性插值就是进行三次单线性插值,先在x方向上求出2次单线性插值,获得R1 R2,再在y方向计算一次单线性插值得出P 简单简单

遇到的问题

无论选哪个角做原点,总有一侧边界"占便宜"(更容易保留原始值),另一侧"吃亏"(被插值模糊或拉伸)。这是坐标系定义带来的系统性不对称。

注意计算的是像素值,不是坐标

对于上面那个图,有这样的关系

就相当于这样理解,这距离为1中的像素值差距是多少,每个部分像素值是多少,进行这样的累加,比如下面这个题目

横着看距离为1差距为20,那么0.4就是8 所以R1是38 同理r2是78 那么y方向来说距离为1差距是40 那么0.6就是24 所以最后的像素值是62 就是这样的算的 很简单 确定邻点 然后计算 但是这样就会导致上面所说的遇到的问题

然后解决方案就是:几何中心点重合对应公式,这个不管了

现在opencv就很牛背了,自带坐标映射 边界处理和高效插值计算 不管了简单知道啥意思就行

相关推荐
无敌贵点大王43 分钟前
RTThread学习记录11——RT-Thread 设备模型吃透:UART/ADC/PWM/PIN 到底有什么区别?
c语言·stm32·学习·链表
是翎2 小时前
深度长文|2026产品经理AI实践手册
人工智能·深度学习·学习·自然语言处理·数据挖掘
Linux-lucky3 小时前
32-38-Linux学习之旅之MySQL综合
linux·运维·学习·mysql·ubuntu
知识分享小能手3 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
AI职业加油站6 小时前
数据要素价值释放年:大数据治理工程师,站上职业新风口
人工智能·学习·职场和发展·数据分析·职场发展
啄缘之间7 小时前
1.【SVA】什么是SVA?
经验分享·学习·测试用例·verilog·sva
sunoo-2297 小时前
【嵌入式裸机开发Day04】i.MX6ULL 蜂鸣器驱动详解:从引脚地址查找到代码实现全流程
arm开发·单片机·嵌入式硬件·学习·串口·裸机
Purple Coder8 小时前
stm32
学习
边境悍匪8 小时前
蜗牛学苑 Java 智能体学习 Day45|Knife4j+SpringBoot3、书城项目整合 MyBatis 思维导图复盘
java·开发语言·vue.js·学习·spring
爱吃苹果的日记本8 小时前
离散数学第五课
学习·离散数学