2016-12-21 211 views
1

我有一個尺寸爲(3,2)的二維數組,我必須使用最近鄰居,線性和雙三次插值方法重新採樣,以便尺寸變成(4,3)二維numpy陣列的二次採樣

我正在使用Pythonnumpyscipy爲此。

如何實現輸入數組的重採樣?

+0

什麼意思是重新取樣?你有沒有鏈接來解釋這意味着什麼? –

+0

實際上,我需要將低分辨率圖像轉換爲高分辨率,但使用numpy。 – Joel

+0

我不認爲這是可能的,除非你有一個更好的分辨率的原始圖像。一旦拍攝完圖像,該圖像中就沒有子像素信息... –

回答

1

有一個很好的教程,使用卷積here重新採樣。

對於整數因子向上擴展:

import numpy 
import scipy 
from scipy import ndimage, signal 

# Scale factor 
factor = 2 

# Input image 
a = numpy.arange(16).reshape((4,4)) 

# Empty image enlarged by scale factor 
b = numpy.zeros((a.shape[0]*factor, a.shape[0]*factor)) 

# Fill the new array with the original values 
b[::factor,::factor] = a 

# Define the convolution kernel 
kernel_1d = scipy.signal.boxcar(factor) 
kernel_2d = numpy.outer(kernel_1d, kernel_1d) 

# Apply the kernel by convolution, seperately in each axis 
c = scipy.signal.convolve(b, kernel_2d, mode="valid") 

注意的因素可以爲每個軸不同,而且你也可以申請卷積順序,在每個軸上。雙線性和雙立方體的內核也顯示在鏈接中,雙線性內插使用三角形信號(scipy.signal.triang)和雙立方體是片段函數。

您還應該介意內插圖像的哪一部分是有效的;沿着邊緣沒有足夠的內核支持。

就三維圖像而言,雙三次插值是三者中最好的選擇。