插值算法(最邻近差值、双线性插值、双三次插值)

article/2025/9/23 15:49:48

一、最邻近差值(nearest)

含义: 选取离目标点最近的点的值作为新的插入点的值。请添加图片描述
两幅图坐标值变换关系:
(代码未验证)

for i=1:size(dist,1)x = round(i* (size(src,1)/size(dist,1)));  %dst横坐标变换到src坐标系,最临近点for j=1:size(dist,2)y = round(j* (size(src,2)/size(dist,2)));  %dst纵坐标变换到src坐标系,最临近点dist(i,j)=src(x,y); % 最临近点赋值end
end

在这里插入图片描述

二、线性插值 (linear)

含义: 根据两点建立线性关系,以距离作为权重进行插值。
请添加图片描述

三、双线性插值(bilinear)

含义: 分别从两个方向上各进行一次线性插值。
请添加图片描述
对于p点的灰度值,可以通过p点周围Q11 = (x1, y1)、Q12 = (x1, y2), Q21 = (x2, y1) 以及 Q22 = (x2, y2) 四个点来获得。

在横坐标方向上进行两次线性插值:

根据Q11、Q21: f ( R 1 ) ≈ x 2 − x x 2 − x 1 f ( Q 11 ) + x − x 1 x 2 − x 1 f ( Q 21 ) where  R 1 = ( x , y 1 ) f\left(R_{1}\right) \approx \frac{x_{2}-x}{x_{2}-x_{1}} f\left(Q_{11}\right)+\frac{x-x_{1}}{x_{2}-x_{1}} f\left(Q_{21}\right) \quad \text { where } R_{1}=\left(x, y_{1}\right) f(R1)x2x1x2xf(Q11)+x2x1xx1f(Q21) where R1=(x,y1)
根据Q21、Q22: f ( R 2 ) ≈ x 2 − x x 2 − x 1 f ( Q 12 ) + x − x 1 x 2 − x 1 f ( Q 22 ) where  R 2 = ( x , y 2 ) f\left(R_{2}\right) \approx \frac{x_{2}-x}{x_{2}-x_{1}} f\left(Q_{12}\right)+\frac{x-x_{1}}{x_{2}-x_{1}} f\left(Q_{22}\right) \quad \text { where } R_{2}=\left(x, y_{2}\right) f(R2)x2x1x2xf(Q12)+x2x1xx1f(Q22) where R2=(x,y2)

在纵坐标方向上进行一次线性插值:

根据R1和R2: f ( P ) ≈ y 2 − y y 2 − y 1 f ( R 1 ) + y − y 1 y 2 − y 1 f ( R 2 ) f(P) \approx \frac{y_{2}-y}{y_{2}-y_{1}} f\left(R_{1}\right)+\frac{y-y_{1}}{y_{2}-y_{1}} f\left(R_{2}\right) f(P)y2y1y2yf(R1)+y2y1yy1f(R2)

整理得:
f ( P ) ≈ ( y 2 − y ) ( x 2 − x ) ( y 2 − y 1 ) ( x 2 − x 1 ) f ( Q 11 ) + ( y 2 − y ) ( x − x 1 ) ( y 2 − y 1 ) ( x 2 − x 1 ) f ( Q 21 ) + ( y − y 1 ) ( x 2 − x ) ( y 2 − y 1 ) ( x 2 − x 1 ) f ( Q 12 ) + ( y − y 1 ) ( x − x 1 ) ( y 2 − y 1 ) ( x 2 − x 1 ) f ( Q 22 ) \begin{aligned} f(P) & \approx \frac{\left(y_{2}-y\right)\left(x_{2}-x\right)}{\left(y_{2}-y_{1}\right)\left(x_{2}-x_{1}\right)} f\left(Q_{11}\right)+\frac{\left(y_{2}-y\right)\left(x-x_{1}\right)}{\left(y_{2}-y_{1}\right)\left(x_{2}-x_{1}\right)} f\left(Q_{21}\right) \\ &+\frac{\left(y-y_{1}\right)\left(x_{2}-x\right)}{\left(y_{2}-y_{1}\right)\left(x_{2}-x_{1}\right)} f\left(Q_{12}\right)+\frac{\left(y-y_{1}\right)\left(x-x_{1}\right)}{\left(y_{2}-y_{1}\right)\left(x_{2}-x_{1}\right)} f\left(Q_{22}\right) \end{aligned} f(P)(y2y1)(x2x1)(y2y)(x2x)f(Q11)+(y2y1)(x2x1)(y2y)(xx1)f(Q21)+(y2y1)(x2x1)(yy1)(x2x)f(Q12)+(y2y1)(x2x1)(yy1)(xx1)f(Q22)

由于图像双线性插值只使用相邻4个点,因此上式分母都为1。整理公式得到:

f(i+u,j+v) = (1-u)(1-v)f(i,j) + (1-u)vf(i,j+1) + u(1-v)f(i+1,j) + uvf(i+1,j+1)

图示:
在这里插入图片描述
代码示例(未验证):

for i=1:size(dist,1)x = double(i* (size(src,1)/size(dist,1)));  u = x-floor(x); %向下取整,求差值for j=1:size(dist,2)y = double(j* (size(src,2)/size(dist,2)));  v = y-floor(y); %向下取整,求差值dist(i,j)=(1-u)*(1-v)*src(i,j) + (1-u)*v*src(i,j+1) + u*(1-v)*src(i+1,j) + u*v*src(i+1,j+1);end
end

四、双三次插值(cubic)

含义: 对于某点进行插值时,考虑该点周围16个像素的影响。首先构造一个cubic函数,根据该点不同位置的cubic函数值作为权值,对该点进行插值赋值。
在这里插入图片描述
对待插值的像素点 ( x , y ) (x,y) (x,y)(x和y可以为浮点数),取其附近的4x4邻域点 ( x i , y j ) , i , j = 0 , 1 , 2 , 3 (x_i,y_j), i,j = 0,1,2,3 (xi,yj),i,j=0,1,2,3。按如下公式进行插值计算:
f ( x , y ) = ∑ i = 0 3 ∑ j = 0 3 f ( x i , y j ) W ( x − x i ) W ( y − y j ) f(x, y)=\sum_{i=0}^{3} \sum_{j=0}^{3} f\left(x_{i}, y_{j}\right) W\left(x-x_{i}\right) W\left(y-y_{j}\right) f(x,y)=i=03j=03f(xi,yj)W(xxi)W(yyj)

代码示例(未验证):

% 构造cubic函数,取a=-1
function A=sw(w1)
w=abs(w1);
if w<1&&w>=0A=1-2*w^2+w^3;
elseif w>=1&&w<2A=4-8*w+5*w^2-w^3;
elseA=0;
end
for i=1:size(dist,1)x = double(i* (size(src,1)/size(dist,1)));  u = x-floor(x); %向下取整,求差值A=[sw(1+u) sw(u) sw(1-u) sw(2-u)];  for j=1:size(dist,2)y = double(j* (size(src,2)/size(dist,2)));  v = y-floor(y); %向下取整,求差值C=[sw(1+v);sw(v);sw(1-v);sw(2-v)];B=[src(i-1,j-1) 	src(i-1,j)	 src(i-1,j+1)	src(i-1,j+2)src(i,j-1)   	src(i,j) 		 src(i,j+1)   src(i,j+2)src(i+1,j-1)   src(i+1,j) 	src(i+1,j+1) 	src(i+1,j+2)src(i+2,j-1) 	src(i+2,j) 	src(i+2,j+1)	src(i+2,j+2)];dis(i,j)=(A*B*C);end
end

备注:所有代码是为了方便加深理解算法过程写的matlab伪代码片段,未在编译器上运行测试

参考文章:
【图像插值算法总结】https://www.cnblogs.com/laozhanghahaha/p/12580822.html
【图像缩放之双三次插值法】https://blog.csdn.net/qq_29058565/article/details/52769497
【双三次插值算法详解 含python实现】https://www.cnblogs.com/wojianxin/p/12516762.html


http://chatgpt.dhexx.cn/article/OTljmkvW.shtml

相关文章

matlab双线性插值双三次插值对CUFED5进行处理

本文是摘抄与总结&#xff0c;仅供自己学习和日后查阅使用。 可以自己写一个双线性插值函数&#xff0c; ------------------------------------------------------------------- function outputimg my_imresize(A,n) % A 是图像矩阵,n是放缩的倍数 % 返回值outputimg是一…

双三次插值算法的C++实现与SSE指令优化

在上篇文章中&#xff0c;我们讲解了常见的最邻近插值算法、双线性插值算法和双三次插值算法的原理与实现&#xff0c;三种插值算法中双三次插值算法的插值效果最好&#xff0c;但其也是三种算法中计算复杂度最高、耗时最长的算法。本文在给出双三次插值C代码的基础上&#xff…

双三次插值 - 插值图像任意位置亚像素C++

双三次插值 - 插值图像任意位置亚像素C 一、概念 双三次插值又称立方卷积插值。三次卷积插值是一种更加复杂的插值方式。该算法利用待采样点周围16个点的灰度值作三次插值&#xff0c;不仅考虑到4 个直接相邻点的灰度影响&#xff0c;而且考虑到各邻点间灰度值变化率的影响。…

matlab 给图像双三次,图像灰度的双三次插值的MATLAB实现

相比C/C实现&#xff0c;图像灰度的双三次插值的MATLAB实现要方便的多&#xff0c;下面是MATLAB语言实现 clc,clear; ffimread(C:\Program Files\MATLAB\R2013a\bin\work\lena.bmp); [mm,nn]size(ff);%将图像隔行隔列抽取元素&#xff0c;得到缩小的图像f mmm/2;nnn/2; fzeros(…

java 双三次线性插值_三种常见的图像处理双三次插值算法

三种常见的图像处理双三次插值算法 双立方插值计算涉及16像素,间(i’, j’)像中的包括 小数部分的像素坐标。dx表示X方向的小数坐标。dy表示Y方向的小数坐标。 详细 能够看下图: 依据上述图示与双立方插值的数学表达式能够看出。双立方插值本质上图像16个像素点 权重卷积之和…

双三次插值 python实现_Python:用GPU实现双三次插值

它不是GPU(而是尝试利用线程和CPU的向量单元)&#xff0c;但是pyvips比scipy快很多&#xff0c;您可以测试一下。在 我做了个基准&#xff1a;import sys import time import scipy.ndimage import pyvips scale 10 n_loops 10 start time.time() test_image scipy.ndimage…

双三次插值及Matlab实现

双三次插值及Matlab实现 一、简单实例 采用简单实例进行对双三次插值的介绍&#xff0c;由于双三次插值对于目标图像的某一像素进行估计时&#xff0c;所采用的像素信息为其周围16个像素点信息&#xff0c;因此不同于最近邻插值和双线性插值&#xff0c;此时假设有 5 5 5\tim…

【opencv】最近邻插值、双线性插值、双三次插值(三次样条插值)

目录 1. 最近邻插值2. 双线性插值1&#xff09;简单理解2&#xff09;一般性 3. 双三次插值&#xff08;三次样条插值&#xff09;总结 b站 视频讲解 &#xff1a; https://www.bilibili.com/video/BV1wh411E7j9/ 1. 最近邻插值 举个简单例子&#xff1a;一个 3 3 3 \times 3…

挑战图像处理100问(27)——双三次插值

当我们需要对图像进行放大或缩小时&#xff0c;为了避免图像变形或失真&#xff0c;我们需要进行插值。插值是一种基于已知数据点&#xff0c;在这些数据点之间进行估计的方法。在图像处理中&#xff0c;常见的插值方法包括最邻近插值、双线性插值、双三次插值等。 双三次插值…

【图像超分辨(SR)】通俗直观彻底理解双线性插值、双三次插值及其作用

写在前面的一点话 网上讲解基本双线性插值、双三次线性插值的文章很多&#xff0c;但大部分都是只在讲为什么是这样&#xff0c;并不算非常通俗&#xff08;起码对我来说需要额外查很多资料来补充理解&#xff09;。很少有文章能够给初学者一些比较直观的理解&#xff0c;因此…

插值法(最邻近,双线性,双三次)的原理及实现

插值法(最邻近&#xff0c;双线性&#xff0c;双三次&#xff09;的原理及实现 常用的插值方法有最邻近插值法、双现象插值法和双三次插值法等&#xff0c;主要用于图像的放大或缩小。 缩小图像&#xff08;或称为下采样&#xff08;subsampled&#xff09; 或降采样&#xf…

表示关系x =y =z的c语言表达式为________.,为表示关系x≥y≥z,应使用C语言表达式____。...

为表焦距决定了画面的透视关系。 示关使用GREGRE ≥y≥桡神经沟位于 应C语言表关于脊柱正确的描写是() 建筑物或者其他设施以及建筑物上的搁置物、达式悬挂物发生( )造成他人损害的&#xff0c;所有人或者管理人应当承担民事责任,但能够证明自己没有过错的除外。 为表成对的脑颅…

C语言运算表达式整理

C语言的运算规则是按照运算符的优先级进行的&#xff0c;所以我们首先看一下C的运算优先级别 总结 最简单的优先级就是 算数运算符>关系运算符>逻辑运算符>赋值运算符 然后我们还要了解一个短路规则&#xff08;特性&#xff09; 短路规则&#xff1a;在整个逻辑表…

与数学式子对应的C语言表达式是(),与数学式子3乘以x的n次方/(2x-1)对应的C语言表达式是...

满意答案 lengwei241 2013.03.25 采纳率:43% 等级:13 已帮助:11778人 18 与数学式子3乘以x的n次方/(2x-1)对应的C语言表达式是 3*x^n/(2*x-1) 3*x**n/(2*x-1) 3*pow(x,n)*(1/(2*x-1)) 3*pow(n,x)/(2*x-1) 答案是3*pow(x,n)*(1/(2*x-1)) 为什么 解答:其中pow(x,n)为C语言…

C语言表达式和表达式的值

今天突然发现如果能很好的理解表达式和表达式的值的概念&#xff0c;可以使编程代码变的更整洁。很多时候我们总是忘记从最基本的概念开始考虑问题。我觉得我们有必要把C/C标准看下&#xff0c;在里面肯定有很多我们一直困惑的问题的答案。 C语言是基于结构化程序设计思想的程序…

以下c语言表达式与代数式计算结果,设有定义:float a=2,b=4,h=3;,以下C语言表达式中与代数式计算结果不相符的是...

设有定义:float a=2,b=4,h=3;,以下C语言表达式中与代数式计算结果不相符的是 设有式计算结Women in Britain, having some qualifications, were enfranchised until ______. 定义达式代数The usual rhyme scheme for the English or Shakespearean sonnet is( ). In “For …

与数学式对应的c语言表达式为,数学表达式“|x|4”对应的C语言表达式是“x-4||x4”。...

数学表达式“|x|4”对应的C语言表达式是“x-4||x4”。 数学式《莺莺传》故事的时代为( ) 表达人力资本的投资是提高技术水平的必要途径。() 对达式教育投资是人力资本的投资唯一重点。() 微商是以移动终端为载体&#xff0c;应的C语言表通过社交媒介手段&#xff0c;进行传播的…

C语言 运算符、表达式

运算符、表达式 1、 C语言运算符 算术运算符和算术表达式 &#xff08;加&#xff09;、—&#xff08;减&#xff09;、*&#xff08;乘&#xff09;、/&#xff08;除&#xff09;、%&#xff08;取余&#xff0c;也叫模运算符&#xff0c;该运算符两侧都要求为整数&#xff…

c语言表达式语法问题,c语言表达式语法规则是什么_后端开发

c语言统计单词个数的方法_后端开发 在一篇文章中单词都是用空格隔开的&#xff0c;所以单词个数空格数1&#xff0c;c语言统计单词个数实际上转换成了统计文章中的空格数&#xff0c;可以用while和if来进行统计。 c语言表达式语法规则是什么 C语言表达式语法规则如下&#xff1…