精华内容
下载资源
问答
  • 最近邻插值法nearest_neighbor是最简单的灰度值插值。也称作零阶插值,就是令变换后像素的灰度值等于距它最近的输入像素的灰度值。 造成的空间偏移误差为像素单位,计算简单,但不够精确。但当图像中的像素灰度级有...

    最近邻插值法nearest_neighbor是最简单的灰度值插值。也称作零阶插值,就是令变换后像素的灰度值等于距它最近的输入像素的灰度值。

    造成的空间偏移误差为像素单位,计算简单,但不够精确。但当图像中的像素灰度级有细微变化时,该方法会在图像中产生人工的痕迹。

     

    http://www.cnblogs.com/yingying0907/archive/2012/11/21/2780092.html

    內插是数学领域数值分析中的通过已知的离散数据求未知数据的过程或方法。

    根据若干离散的数据,得到一个连续的函数(也就是曲线)或者更加密集的离散方程与已知数据相吻合。这个过程叫做拟合。內插是曲线必须通过已知点的拟合。

    1.线性插值

    已知坐标 (x0, y0) 与 (x1, y1),要得到 [x0, x1] 区间内某一位置 x 在直线上的值。

    由于 x 值已知,所以可以从公式得到 y 的值

    已知 y 求 x 的过程与以上过程相同,只是 x 与 y 要进行交换。

    例如,

    原来的数值序列:0,10,20,30,40 
    线性插值一次为:0,5,10,15,20,25,30,35,40 
    即认为其变化(增减)是线形的,可以在坐标图上画出一条直线 。

    线性插值经常用于补充表格中的间隔部分。

    两值之间的线性插值基本运算在计算机图形学中的应用非常普遍,以至于在计算机图形学领域的行话中人们将它称为lerp所有当今计算机图形处理器(英语:Graphics Processing Unit,缩写:GPU)的硬件中都集成了线性插值运算,并且经常用来组成更为复杂的运算:例如,可以通过三步线性插值完成一次双线性插值运算。由于这种运算成本较低,所以对于没有足够数量条目的光滑函数来说,它是实现精确快速查找表的一种非常好的方法。

    在一些要求较高的场合,线性插值经常无法满足要求。在这种场合,可以使用多项式插值或者样条插值来代替。

    线性插值可以扩展到有两个变量的函数的双线性插值。双线性插值经常作为一种粗略的抗混叠滤波器使用,三线性插值用于三个变量的函数的插值。线性插值的其它扩展形势可以用于三角形与四面体等其它类型的网格运算。

    2.双线性插值

    在地球物理中,会经常用到双线性插值(Bilinear interpolation)。比如,模拟生成的地表均匀网格上的速度场或者同震位移场。要与GPS观测点上的观测同震位移场进行比较。就必须将均匀网格点的值插值到GPS太站上。这就需要用到双线性插值。

    In mathematics, bilinear interpolation is an extension of linear interpolation for interpolating functions of two variables(e.g, x andy) on a regular grid. The interpolated function should not use the term of x2 or y2, but xy, which is the bilinear form of x and y.

    其核心思想是在两个方向分别进行一次线性插值

    The key idea is to perform linear interpolation first in one direction, and then again in the other direction.Although each step is linear in the sampled values and in the position, the interpolation as a whole is not linear but rather quadratic in the sample location (details below).

    红色的数据点与待插值得到的绿色点

    假如我们想得到未知函数 f 在点 P = (x, y) 的值,假设我们已知函数 f 在 Q11 = (x1, y1)、Q12 = (x1, y2), Q21 = (x2, y1) 以及 Q22 = (x2, y2) 四个点的值。

    首先在 x 方向进行线性插值,得到

    然后在 y 方向进行线性插值,得到

    这样就得到所要的结果 f(x, y),

     

    如果选择一个坐标系统使得 f 的四个已知点坐标分别为 (0, 0)、(0, 1)、(1, 0) 和 (1, 1),那么插值公式就可以化简为

    或者用矩阵运算表示为

    与这种插值方法名称不同的是,这种插值方法并不是线性的,它的形式是

    它是两个线性函数的乘积。看到了吧,双线性插值并不是线性

    Contrary to what the name suggests, the bilinear interpolant is not linear

    另外,插值也可以表示为

    对于单位正方形,

    在这两种情况下,常数的数目都对应于给定的 f 的数据点数目。

    线性插值的结果与插值的顺序无关。首先进行 y 方向的插值,然后进行 x 方向的插值,所得到的结果是一样的。

    双线性插值的一个显然的三维空间延伸是三线性插值

    3.三线性插值

      三线性插值是在三维离散采样数据的张量积网格上进行线性插值的方法。这个张量积网格可能在每一维度上都有任意不重叠的网格点,但并不是三角化的有限元分析网格。这种方法通过网格上数据点在局部的矩形棱柱上线性地近似计算点 (x,y,z) 的值。 

    • 三线性插值在一次n=1三维D=3(双线性插值的维数:D=2,线性插值:D=1)的参数空间中进行运算,这样需要(1 + n)D = 8个与所需插值点相邻的数据点。
    • 三线性插值等同于三维张量的一阶B样条插值。
    • 三线性插值运算是三个线性插值运算的张量积。

      实例

      在一个步距为1的周期性立方网格上,取xd,yd,zd 为待计算点,距离小于 x,y,z, 的最大整数的差值,即,

      

      首先沿着z轴插值,得到:

      

      然后,沿着y轴插值,得到:

      w1 = i1(1 − yd) + i2yd

      w2 = j1(1 − yd) + j2yd

      最后,沿着x轴插值,得到:

      IV = w1(1 − xd) + w2xd
      这样就得到该点的预测值。

      三线性插值的结果与插值计算的顺序没有关系,也就是说,按照另外一种维数顺序进行插值,例如沿着 x、 y、z 顺序插值将会得到同样的结果。这也与张量积的交换律完全一致。

    转载于:https://www.cnblogs.com/yangai/p/6063927.html

    展开全文
  • 最近邻插值算法 python实现

    千次阅读 2020-03-18 01:36:03
    最近邻插值法放大图像: 最近邻插值法在放大图像时补充的像素是最近邻的像素的值。由于方法简单,所以处理速度很快,但是放大图像画质劣化明显,常常含有锯齿边缘。 最近邻插值法算法原理 ↑ 二. 最近邻插值法...

    一. 最近邻插值法放大图像:

            最近邻插值法在放大图像时补充的像素是最近邻的像素的值。由于方法简单,所以处理速度很快,但是放大图像画质劣化明显,常常含有锯齿边缘。

    最近邻插值法算法原理 ↑


    二. 最近邻插值法算法流程:

            插值法放大图像的第一步都是相同的,计算新图的坐标点像素值对应原图中哪个坐标点的像素值来填充,计算公式为:

            srcX = dstX * (srcWidth/dstWidth)

            srcY = dstY * (srcHeight/dstHeight)

            其中,src表示旧图,dst表示新图。新图的坐标(dstX,dstY)对应于旧图的坐标(srcX,srcY)。 srcWidth/dstWidth 和 srcHeight/dstHeight 分别表示宽和高的放缩比。

            那么问题来了,通过这个公式算出来的 srcX,scrY (旧图坐标)有可能是小数,但是坐标点是不存在小数的,都是整数,得想办法把它转换成整数才行。

            不同插值法的区别就体现在 srcX,scrY 是小数时,怎么变成整数去取原图像中的像素值。

            最近邻插值法:看名字就很直白,四舍五入选取最接近的整数。这样的做法会导致像素的变化不连续,在新图中会产生锯齿。


    三. 实验 python实现最近邻插值算法

    from PIL import Image
    import matplotlib.pyplot as plt
    import numpy as np 
    import math
    
    # 最近邻插值算法
    # dstH为新图的高;dstW为新图的宽
    def NN_interpolation(img,dstH,dstW):
        scrH,scrW,_=img.shape
        retimg=np.zeros((dstH,dstW,3),dtype=np.uint8)
        for i in range(dstH-1):
            for j in range(dstW-1):
                scrx=round(i*(scrH/dstH))
                scry=round(j*(scrW/dstW))
                retimg[i,j]=img[scrx,scry]
        return retimg
    
    im_path='../paojie.jpg'
    image=np.array(Image.open(im_path))
    
    image1=NN_interpolation(image,image.shape[0]*2,image.shape[1]*2)
    image1=Image.fromarray(image1.astype('uint8')).convert('RGB')
    image1.save('out.png')

    四. 实验结果:

    原图 ↑

    最近邻插值后图像 ↑

            可以看到新图中产生了锯齿状的边缘。


    五. 参考内容:

            https://www.cnblogs.com/wojianxin/p/12515061.html

            https://www.jianshu.com/p/4954643f7514

    展开全文
  • 利用最近邻插值法实现图像的缩小与放大.....................................................................................
  • 一、最近邻插值法放大图像 最近邻插值法在放大图像时补充的像素是最近邻的像素的值。由于方法简单,所以处理速度很快,但是放大图像画质劣化明显,常常含有锯齿边缘。 原理如下: 二、双线性插值 在数学上,双线性...

    Python实现双线性插值、最近邻插值、三次内插法
    一、最近邻插值法放大图像
    最近邻插值法在放大图像时补充的像素是最近邻的像素的值。由于方法简单,所以处理速度很快,但是放大图像画质劣化明显,常常含有锯齿边缘。
    原理如下:
    在这里插入图片描述
    二、双线性插值
    在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。
    原理图:
    在这里插入图片描述
    假设我们已知函数 f 在 Q11 = (x1, y1)、Q12 = (x1, y2), Q21 = (x2, y1) 以及 Q22 = (x2, y2) 四个点的值。那么此时可以得到未知函数 f 在点 P = (x, y) 的值。
    (1)首先在 x 方向进行线性插值:
    在这里插入图片描述
    (2)在 y 方向进行线性插值:
    在这里插入图片描述
    (3)综合起来即为双线性插值最后结果:
    在这里插入图片描述
    图像双线性插值只会用相邻的4个点,上述公式的分母都是1。源图像和目标图像几何中心的对齐:
    SrcX=(dstX+0.5) (srcWidth/dstWidth) -0.5
    SrcY=(dstY+0.5) * (srcHeight/dstHeight)-0.5,
    *

    源图像和目标图像的原点(0,0)均选择左上角,然后根据插值公式计算目标图像每点像素,假设你需要将一幅5x5的图像缩小成3x3,那么源图像和目标图像各个像素之间的对应关系如下。如果没有这个中心对齐,根据基本公式去算,就会得到左边这样的结果;而用了对齐,就会得到右边的结果:
    在这里插入图片描述
    三、双三次插值
    双三次插值又称立方卷积插值。三次卷积插值是一种更加复杂的插值方式。该算法利用待采样点周围16个点的灰度值作三次插值,不仅考虑到4 个直接相邻点的灰度影响,而且考虑到各邻点间灰度值变化率的影响。三次运算可以得到更接近高分辨率图像的放大效果,但也导致了运算量的急剧增加。

    构造函数如下:
    在这里插入图片描述

    函数形状如下:
    在这里插入图片描述
    三次函数的运算公式:

    在这里插入图片描述
    Python实现双线性插值、最近邻插值、三次内插法代码如下:

    from PIL import Image
    import matplotlib.pyplot as plt
    import numpy as np
    import math
    
    def NN_interpolation(img,dstH,dstW):
        scrH,scrW,_=img.shape
        retimg=np.zeros((dstH,dstW,3),dtype=np.uint8)
        for i in range(dstH):
            for j in range(dstW):
                scrx=round((i+1)*(scrH/dstH))
                scry=round((j+1)*(scrW/dstW))
                retimg[i,j]=img[scrx-1,scry-1]
        return retimg
    
    def BiLinear_interpolation(img,dstH,dstW):
        scrH,scrW,_=img.shape
        img=np.pad(img,((0,1),(0,1),(0,0)),'constant')
        retimg=np.zeros((dstH,dstW,3),dtype=np.uint8)
        for i in range(dstH):
            for j in range(dstW):
                scrx=(i+1)*(scrH/dstH)-1
                scry=(j+1)*(scrW/dstW)-1
                x=math.floor(scrx)
                y=math.floor(scry)
                u=scrx-x
                v=scry-y
                retimg[i,j]=(1-u)*(1-v)*img[x,y]+u*(1-v)*img[x+1,y]+(1-u)*v*img[x,y+1]+u*v*img[x+1,y+1]
        return retimg
    
    def BiBubic(x):
        x=abs(x)
        if x<=1:
            return 1-2*(x**2)+(x**3)
        elif x<2:
            return 4-8*x+5*(x**2)-(x**3)
        else:
            return 0
    
    def BiCubic_interpolation(img,dstH,dstW):
        scrH,scrW,_=img.shape
        #img=np.pad(img,((1,3),(1,3),(0,0)),'constant')
        retimg=np.zeros((dstH,dstW,3),dtype=np.uint8)
        for i in range(dstH):
            for j in range(dstW):
                scrx=i*(scrH/dstH)
                scry=j*(scrW/dstW)
                x=math.floor(scrx)
                y=math.floor(scry)
                u=scrx-x
                v=scry-y
                tmp=0
                for ii in range(-1,2):
                    for jj in range(-1,2):
                        if x+ii<0 or y+jj<0 or x+ii>=scrH or y+jj>=scrW:
                            continue
                        tmp+=img[x+ii,y+jj]*BiBubic(ii-u)*BiBubic(jj-v)
                retimg[i,j]=np.clip(tmp,0,255)
        return retimg
    
    
    
    im_path='G:/1.png'
    image=np.array(Image.open(im_path))
    
    image1=NN_interpolation(image,image.shape[0]*2,image.shape[1]*2)
    image1=Image.fromarray(image1.astype('uint8')).convert('RGB')
    image1.save('G:/pika2.png')
    
    image2=BiLinear_interpolation(image,image.shape[0]*2,image.shape[1]*2)
    image2=Image.fromarray(image2.astype('uint8')).convert('RGB')
    image2.save('G:/pika3.png')
    
    image3=BiCubic_interpolation(image,image.shape[0]*2,image.shape[1]*2)
    image3=Image.fromarray(image3.astype('uint8')).convert('RGB')
    image3.save('G:/pika4.png')
    

    结果如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 2 Matlab实现最近邻插值、双线性插值、双三次插值3最近邻插值的原理简介4双线性插值的原理简介5双三次插值原理简介 1插值是什么?为啥要插值? 一句话来说就是插值用于图片缩放,为了解决图片缩放中可能出现小数坐标...
  • 最近邻插值 与 双线性插值算法 优化迭代 的 0.5 像素之差
  • 文章目录一、最近邻插值原理二、最近邻插值numpy实现2-1 对例子的3*3用`near_insert_1color`实现三、openCV2实现四、实现比对 一、最近邻插值原理 原理:根据缩放后的位置,最近邻的像素作为缩放后位置的像素 公式...
  • 最近邻插值和双线性插值的详细计算方法

    千次阅读 多人点赞 2018-05-22 15:32:38
  • 插值算法:最近邻插值、双线性插值 插值算法有很多种,这里列出关联比较密切的三种: 最近邻(Nearest Interpolation):计算速度最快,但是效果最差。 双线性插值(Bilinear Interpolation):双线性插值是用原图像...
  • 最近邻插值、双线性插值

    千次阅读 2019-05-24 17:07:35
    转自... ... 1.最近邻插值 越是简单的模型越适合用来举例子,我们就举个简单的图像:3X3 的256级灰度图,也就是高为3个象素,宽也是3个象素的图像,每个象素的...
  • 这就需要插值算法来进行处理,常见的插值算法有最近邻插值、双线性插值和三次样条插值。 1.2 最近邻插值 最近邻插值,是指将目标图像中的点,对应到源图像中后,找到最相邻的整数点,作为插值后的输出。 如上图...
  • 其中有两种简单又常用的插值算法用来实现图像缩放,分别是最近邻插值算法和双线性插值算法。 最近邻插值算法: 最近邻插值算法的思想十分简单 设原始图像src的高为h,宽为w,图像上像素值为(x,y)。 设目标图像dst...
  • 最近邻插值、双线性插值、双三次插值

    万次阅读 多人点赞 2018-07-23 14:09:16
    1.最近邻插值 越是简单的模型越适合用来举例子,我们就举个简单的图像:3X3 的256级灰度图,也就是高为3个象素,宽也是3个象素的图像,每个象素的取值可以是 0-255,代表该像素的亮度,255代表最亮,也就是白色,0...
  • 文章目录最近邻插值(Nearest neighbor interpolation)双线性插值(Bilinear interpolation)双三次插值(Bicubic interpolation) 最近邻插值(Nearest neighbor interpolation) 举例说明: 3X3的深度为8的256级...
  • 1.最近邻插值 定义:目标各像素点的灰度值代替源图像中与其最邻近像素的灰度值。 最近临插值算法优点是算法简单,易于实现,但是缺点是由于相邻像素点的像素值相同,容易出现色块现象。 假设源图像(Source): ...
  • 作为图像放缩 (Scale) 的手段,常见的传统插值方法有:最近邻插值 (Nearest Neighbour Interpolation)、线性插值(Linear Interpolation)、双线性插值 (Bilinear Interpolation)、双三次插值 (Bicubic interpolation)...
  • 1. 最近邻插值 越是简单的模型越适合用来举例子,我们就举个简单的图像:3X3 的256级灰度图,也就是高为3个象素,宽也是3个象素的图像,每个象素的取值可以是 0-255,代表该像素的亮度,255代表最亮,也就是白色,0...
  • 图像的插值算法之最近邻插值

    万次阅读 2017-11-21 16:16:13
    这是一种简单的插值算法:不需要计算,在待求象素的四邻象素中,将距离待求象素最近象素灰度赋给待求象素 ...最邻近元法计算量较小,但可能会造成插值生成的图像灰度上的不连续,在灰度变化的地方可
  • 最近邻插值算法的c++实现(QT框架)

    千次阅读 2017-12-04 16:44:23
    最近邻插值算法是用图像中已知的像素点填充输出图像,采用像素复制和像素抽样,使原图放大或者缩小若干倍。 假设原图像的宽度和高度分别为 和 ,缩放后的图像的宽度为 和 ,那么宽度和高度的缩放比例分别为: 图片...
  • 一、实验目的  1、熟悉并掌握MATLAB工具的使用...2、对图像执行放大、缩小及旋转操作,分别采用最近邻插值、双线性插值及双三次插值方法实现,要求根据算法自己编写代码实现,并分析三种方法的优缺点。 (二)、相关知
  • 图1 1、最近邻插值 算法思路就是将浮点型坐标用int()强制转换为整型,在图2中,浮点型像素点P的坐标被强制转换成整型后,就转为A点,也即用A点单个点的像素代表目标图像矩阵中某个像素值,算法的优点在于速度快,但...
  • 今天在看SIFT源码时,里面涉及到对图片的缩放问题,如在建立高斯金字塔之前将原图像放大一倍(立方插值),在建立高斯金字塔过程中,每层的最底层Base图片是将上一层第[3]阶图像进行降采样(最近邻插值)获得...
  • 最近邻插值和双线性插值的基本原理 图像的缩放很好理解,就是图像的放大和缩小。传统的绘画工具中,有一种叫做“放大尺”的绘画工具,画家常用它来放大图画。当然,在计算机上,我们不再需要用放大尺去放大或缩小图像...
  • 这种放大图像的方法叫做最近邻插值算法,这是一种最基本、最简单的图像缩放算法,效果也是最不好的,放大后的图像有很严重的马赛克,缩小后的图像有很严重的失真 。 效果不好的根源就是其简单的最近邻插值方法...
  • 图像大小变换 void cvResize( const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR ); src输入图像.dst输出...CV_INTER_NN - 最近邻插值, CV_INTER_LINEAR - 双线性插值 (缺省使用) CV_INTER_AREA -
  • 双线性插值通过寻找距离这个对应坐标最近的四个像素点,来计算该点的值(灰度值或者RGB值)。  若图像为灰度图像,那么(i,j)点的灰度值的数学计算模型是: f(x,y)=b1+b2x+b3y+b4xy 其中b1,b2,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,361
精华内容 544
关键字:

最近邻插值法计算公式