zoukankan      html  css  js  c++  java
  • 最近邻插值

    最近邻插值原理:

    使用最近邻插值:
      源图片(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)
  • 相关阅读:
    mojoportal学习——文章翻译之SmartCombo
    windows froms 程序打包 (转载)
    [笔记]LCD1602 Display Experiment
    [笔记] JLink V8固件烧录指导
    [笔记]NiosII之Count Binary
    [笔记]DE2115 LCD1602字符的显示
    [笔记]What is HDBaseT
    [笔记]Inrush Current Case
    [笔记]远传中继的实现
    [笔记]RunningLED Experiment
  • 原文地址:https://www.cnblogs.com/echoboy/p/10135407.html
Copyright © 2011-2022 走看看