精华内容
下载资源
问答
  • 最近邻插值

    2018-12-18 10:01:00
    最近邻插值原理: 使用最近邻插值: 源图片(simg)=目标图片(dimg)*缩放系数(k), 缩放系数k = 源图片尺寸/目标图片由上,对图片分x、y轴 :sx = dx*k sy = dy *k 思路:初始化目标size的图片,然后根据位置计算...

     

    最近邻插值原理:

    使用最近邻插值:
      源图片(simg)=目标图片(dimg)*缩放系数(k),
      缩放系数k = 源图片尺寸/目标图片
    由上,对图片分x、y轴 :sx = dx*k sy = dy *k
    思路:初始化目标size的图片,然后根据位置计算目标图片对应于原图片的位置索引,索引结果四舍五入
    也就是说目标图片的每个像素都是根据目标图片的像素索引*缩放系数后求得目标图片对应其在源图片上的索引位置,索引结果四舍五入
    最近邻插值也就是目标图片的每个像素依赖于源图片的像素值通过缩放系数计算得到的索引,并索引源图片的像素值来填充

     

     1 import matplotlib.pyplot as plt
     2 import numpy as np
     3 
     4 img = plt.imread('source.bmp')
     5 
     6 def nearest_interploat(img,dsize):
     7     """
     8     对单通道的图片进行缩放处理
     9     使用最近邻插值:源图片(simg)=目标图片(dimg)*缩放系数(k),缩放系数k = 源图片尺寸/目标图片
    10     由上,对图片分x、y轴 :sx = dx*k  sy = dy *k
    11     思路:初始化目标size的图片,然后根据位置计算目标图片对应于原图片的位置索引,索引结果四舍五入
    12     也就是说目标图片的每个像素都是根据目标图片的像素索引*缩放系数后求得目标图片对应其在源图片上的索引位置,索引结果四舍五入
    13     最近邻插值也就是目标图片的每个像素依赖于源图片的像素值通过缩放系数计算得到的索引,并索引源图片的像素值来填充
    14     :param img: 源图片
    15     :param dsize: 目标尺寸
    16     :return: 目标图片
    17     """
    18 
    19     dimg = np.zeros((dsize),dtype=int)  #初始化目标图片
    20     ssize_x,ssize_y = img.shape
    21     plt.imshow(dimg)
    22     plt.show()
    23     #下面将dsize分开处理为x的缩放系数与y的缩放系数是因为图像的高宽可能不一致
    24     xk = (ssize_x/dsize[0])
    25     yk = (ssize_y/dsize[1])
    26 
    27     # np.argwhere(dimg!=None)返回目标图片的像素索引 shape=(dsize_x*disze_y,2)因为每个像素点都有x,y两个索引
    28     pixel_index=np.argwhere(dimg!=None) #返回的索引每个像素点[行,列]像素点从行到列
    29 
    30 
    31     d_ssize_x = pixel_index[:,0]*xk
    32 
    33     d_ssize_y = pixel_index[:,1] *xk
    34 
    35 
    36     d_ssize_x = np.around(d_ssize_x)  #四舍五入
    37     d_ssize_y = np.around(d_ssize_y)
    38 
    39 
    40     d_ssize_x=d_ssize_x.astype('int')
    41     d_ssize_y=d_ssize_y.astype('int')
    42 
    43     d_ssize_x[np.nonzero(d_ssize_x==ssize_x)[0]] = ssize_x-1   #索引不得超过size-1
    44     d_ssize_y[np.nonzero(d_ssize_y==ssize_y)[0]] = ssize_y-1
    45 
    46     print(d_ssize_x[np.nonzero(d_ssize_x>ssize_x)[0]])
    47     dimg = img[d_ssize_x,d_ssize_y]
    48     dimg = np.resize(dimg,dsize)
    49     print(img.shape)
    50     plt.imshow(img)
    51     plt.show()
    52 
    53     plt.imshow(dimg)
    54     plt.show()
    55 
    56 
    57 
    58 
    59 
    60 if __name__ == '__main__':
    61     c =50
    62     nearest_interploat(img[:,:,2],(176*c,197*c))
    63     a = np.random.rand(2,3)

     

    转载于:https://www.cnblogs.com/echoboy/p/10135407.html

    展开全文
  • Python 实现的最近邻插值与 线性插值 linear_interpolate nearest_interpolate

    Python 实现的最近邻插值与 线性插值

    • linear_interpolate
    • nearest_interpolate

    #!/usr/bin/python
    
    def linear_interpolate(pre_pt, post_pt, cur_x):
       """ 线性插值 """
       ratio = (cur_x - pre_pt[0]) / (post_pt[0] - pre_pt[0])
       cur_y = ratio * (post_pt[1] - pre_pt[1]) + pre_pt[1]
       return cur_y
    
    
    def nearest_interpolate(pre_pt, post_pt, cur_x):
       """ 最近邻插值 """
       ratio = (cur_x - pre_pt[0]) / (post_pt[0] - pre_pt[0])
       if ratio >= 0.5:
           cur_y = post_pt[1]
       else:
           cur_y = pre_pt[1]
       return cur_y
    
    
    if __name__ == '__main__':
       pre_pt = [1.0, 1.0]
       post_pt = [5.0, 5.0]
       cur_x = 3.0
       cur_y = linear_interpolate(pre_pt, post_pt, cur_x)
       print(r'linear interpolate {}'.format(cur_y))
    
       cur_y = nearest_interpolate(pre_pt, post_pt, cur_x)
       print(r'nearest interpolate {}'.format(cur_y))
    

    输出的结果:

    linear interpolate 3.0
    nearest interpolate 5.0
    
    展开全文
  • 最近邻插值算法 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

    展开全文
  • 利用最近邻插值法实现图像的缩小与放大.....................................................................................
  • 目录一、插值与图像缩放二、最近邻插值1、原理2、代码实现三、双线性插值1、原理2、代码实现 一、插值与图像缩放   首先举个例子说明插值过程,先看看matlab的插值函数 interp() 吧: x = -2 : 1 : 2; y = -2 : 1 ...
  • I am trying to write my own function for scaling up an input image by using the Nearest-neighbor interpolation algorithm. The bad part is I am able to see how it works but cannot find the algorithm it...

    I am trying to write my own function for scaling up an input image by using the Nearest-neighbor interpolation algorithm. The bad part is I am able to see how it works but cannot find the algorithm itself. I will be grateful for any help.

    Here's what I tried for scaling up the input image by a factor of 2:

    function output = nearest(input)

    [x,y]=size(input);

    output = repmat(uint8(0),x*2,y*2);

    [newwidth,newheight]=size(output);

    for i=1:y

    for j=1:x

    xloc = round ((j * (newwidth+1)) / (x+1));

    yloc = round ((i * (newheight+1)) / (y+1));

    output(xloc,yloc) = input(j,i);

    end

    end

    Here is the output after Mark's suggestion

    KnNpF.png

    解决方案

    A while back I went through the code of the imresize function in the MATLAB Image Processing Toolbox to create a simplified version for just nearest neighbor interpolation of images. Here's how it would be applied to your problem:

    %# Initializations:

    scale = [2 2]; %# The resolution scale factors: [rows columns]

    oldSize = size(inputImage); %# Get the size of your image

    newSize = max(floor(scale.*oldSize(1:2)),1); %# Compute the new image size

    %# Compute an upsampled set of indices:

    rowIndex = min(round(((1:newSize(1))-0.5)./scale(1)+0.5),oldSize(1));

    colIndex = min(round(((1:newSize(2))-0.5)./scale(2)+0.5),oldSize(2));

    %# Index old image to get new image:

    outputImage = inputImage(rowIndex,colIndex,:);

    Another option would be to use the built-in interp2 function, although you mentioned not wanting to use built-in functions in one of your comments.

    EDIT: EXPLANATION

    In case anyone is interested, I thought I'd explain how the solution above works...

    newSize = max(floor(scale.*oldSize(1:2)),1);

    First, to get the new row and column sizes the old row and column sizes are multiplied by the scale factor. This result is rounded down to the nearest integer with floor. If the scale factor is less than 1 you could end up with a weird case of one of the size values being 0, which is why the call to max is there to replace anything less than 1 with 1.

    rowIndex = min(round(((1:newSize(1))-0.5)./scale(1)+0.5),oldSize(1));

    colIndex = min(round(((1:newSize(2))-0.5)./scale(2)+0.5),oldSize(2));

    Next, a new set of indices is computed for both the rows and columns. First, a set of indices for the upsampled image is computed: 1:newSize(...). Each image pixel is considered as having a given width, such that pixel 1 spans from 0 to 1, pixel 2 spans from 1 to 2, etc.. The "coordinate" of the pixel is thus treated as the center, which is why 0.5 is subtracted from the indices. These coordinates are then divided by the scale factor to give a set of pixel-center coordinates for the original image, which then have 0.5 added to them and are rounded off to get a set of integer indices for the original image. The call to min ensures that none of these indices are larger than the original image size oldSize(...).

    outputImage = inputImage(rowIndex,colIndex,:);

    Finally, the new upsampled image is created by simply indexing into the original image.

    展开全文
  • 最近邻插值与双线性插值一、最近邻插值(The nearest interpolation)二、 双线性插值(Bilinear Interpolation) 一、最近邻插值(The nearest interpolation) 原理: 最近邻插值是最简单的一种插值方法,不需要...
  • 利用C++实现了最近邻插值以及双线性插值的图像插值算法,将两种算法并成一个API,可以加深对于这两个插值算法的理解
  • 2 Matlab实现最近邻插值、双线性插值、双三次插值3最近邻插值的原理简介4双线性插值的原理简介5双三次插值原理简介 1插值是什么?为啥要插值? 一句话来说就是插值用于图片缩放,为了解决图片缩放中可能出现小数坐标...
  • MATLAB最近邻插值和双线性插值

    热门讨论 2009-05-05 16:42:47
    编写程序通过最近邻插值和双线性插值等算法将用户所选取的图像区域进行放大和缩小整数倍的操作,并保存,比较几种插值的效果。
  • 最近邻插值、双线性插值、双三次插值

    万次阅读 多人点赞 2018-07-23 14:09:16
    1.最近邻插值 越是简单的模型越适合用来举例子,我们就举个简单的图像:3X3 的256级灰度图,也就是高为3个象素,宽也是3个象素的图像,每个象素的取值可以是 0-255,代表该像素的亮度,255代表最亮,也就是白色,0...
  • 最近邻插值、双线性插值

    千次阅读 2017-07-17 17:29:18
    最近邻插值: 公式如下: /*最近邻插值*/ /* 输入:src:输入源图 dst_rows:目标图的行数 dst_cols:目标图的列数 输出:目标图 */ Mat Neargest_Neighbor(Mat src,int dst_rows,int dst_cols) { Mat dst(dst...
  • 最近邻插值 与 双线性插值算法 优化迭代 的 0.5 像素之差
  • Bayer数据格式转换为RGB数据格式Modelsim仿真,采用最近邻插值算法,转换效果一般,但实现方式最简单。
  • 最近邻插值法&线性插值&双线性插值&三线性插值【转载】 文章来源于博客园作者:霓裳依旧 文章链接:最近邻插值法&线性插值&双线性插值&三线性插值
  • 作为图像放缩 (Scale) 的手段,常见的传统插值方法有:最近邻插值 (Nearest Neighbour Interpolation)、线性插值(Linear Interpolation)、双线性插值 (Bilinear Interpolation)、双三次插值 (Bicubic interpolation)...
  • 巩固图像处理编程的步骤格式理解数据插值及图像几何变换的原理掌握图像几何变换的实现方法 二 实验内容 1 理解反向变换的实现思路 2 图像缩放及插值 Matlab取整命令floor, ceil, round 分别实验最近邻插值和双线性...
  • 文章目录最近邻插值(Nearest neighbor interpolation)双线性插值(Bilinear interpolation)双三次插值(Bicubic interpolation) 最近邻插值(Nearest neighbor interpolation) 举例说明: 3X3的深度为8的256级...
  • 这就需要插值算法来进行处理,常见的插值算法有最近邻插值、双线性插值和三次样条插值。 1.2 最近邻插值 最近邻插值,是指将目标图像中的点,对应到源图像中后,找到最相邻的整数点,作为插值后的输出。 如上图...
  • 用matlab编写的程序将彩色图形进行插值,为什么psnr的结果显示最近邻插值比双三次插值效果好,
  • 其中有两种简单又常用的插值算法用来实现图像缩放,分别是最近邻插值算法和双线性插值算法。 最近邻插值算法: 最近邻插值算法的思想十分简单 设原始图像src的高为h,宽为w,图像上像素值为(x,y)。 设目标图像dst...
  • 【OpenCV】最近邻插值

    千次阅读 2018-03-09 15:42:22
    最近邻插值法 定义:将变换后的图像各像素点的灰度值设置为源图像中与其最邻近像素的灰度值的方法。 则: // 相应的缩放比例 float fw = float W / w; float fh = float H / h; // 则目标图像中(X, Y)的...
  • 1.最近邻插值 定义:目标各像素点的灰度值代替源图像中与其最邻近像素的灰度值。 最近临插值算法优点是算法简单,易于实现,但是缺点是由于相邻像素点的像素值相同,容易出现色块现象。 假设源图像(Source): ...
  • 图像缩放之最近邻插值

    千次阅读 2016-10-06 09:40:59
    图像缩放之最近邻插值
  • 图像插值-最近邻插值(nearest)

    千次阅读 2020-08-20 15:23:40
    最近邻插值(nearest) 算法 该算法不凭空设定元素点的值,而是选择源图像中最近邻像素点来填充目标图像。 那么,目标元素点所选择的源图像元素点位置应为: srcX=round(dstX/K) srcY=round(dstY/K) 其中,round...
  • Python实现双线性插值、最近邻插值、三次内插法 一、最近邻插值法放大图像 最近邻插值法在放大图像时补充的像素是最近邻的像素的值。由于方法简单,所以处理速度很快,但是放大图像画质劣化明显,常常含有锯齿边缘。...
  • 图像缩放算法-最近邻插值

    千次阅读 2018-09-25 19:19:27
    简单来说,用最近邻插值算法实现图像的扩大和缩小任意的尺寸,目标图的任意一点的x,y坐标的像素值取源图最接近x,y坐标的X,Y坐标的像素值,以达到扩大和缩小的目的。 图像也分RGB图和灰度图,下面讨论的是RGB图bmp...
  • 自己编的可放大任意整数倍的最近邻插值 双线性插值 matlab代码

空空如也

空空如也

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

最近邻插值