• 最近邻插值


    最近邻插值原理:

    使用最近邻插值:
      源图片(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)
  • 相关阅读:
    Java基础知识强化97:final、finally、finally区别
    Java基础知识强化之集合框架笔记02:集合的继承体系图解
    Java基础知识强化之集合框架笔记01:集合的由来与数组的区别
    Java基础知识强化96:Calendar类之获取任意年份的2月有多少天的案例
    Java基础知识强化95:Calendar类之Calendar类的add()和set()方法
    Gym
    Gym
    Good Bye 2015 B. New Year and Old Property —— dfs 数学
    HDU1873 看病要排队 —— 优先队列(STL)
    HDU5877 Weak Pair dfs + 线段树/树状数组 + 离散化
  • 原文地址:https://www.cnblogs.com/echoboy/p/10135407.html
Copyright © 2020-2023  润新知