最近鄰插值


 

最近鄰插值原理:

使用最近鄰插值:
  源圖片(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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM