2017-04-09 34 views
0

我想通過僅保留每個像素集的最大像素值來減少圖像的一個大小。我在python中實現了這個功能:優化性能,以最大像素值調整大小

def pixel_max_resize(img, h, w):  
    imr = np.zeros((h,w), dtype=np.uint8) 
    r = int(h/w)  
    for j in range(0,w): 
     imr[:,j] = np.amax(img[:,j*r:j*r+r], axis = 1) 
    return imr 

這個函數比同樣大小的cv2.resize慢5-10倍。任何人都有一個想法如何優化這個功能的速度?有沒有可以加快這個過程的列表理解公式?

回答

0

因爲如果目標高度不等於源高度,你的代碼會拋出一個錯誤,所以我並不是100%確定你要達到的目標。無論如何,這是一個基於每個子採樣區域的最大值調整圖像大小的函數。它比你的代碼快3-5倍。

def pixel_max_resize(img, h, w): 
    source_h, source_w = img.shape 
    return img.reshape(h,source_h // h,-1,source_w // w).swapaxes(1,2).reshape(h,w,-1).max(axis=2) 

(警告:源寬度和高度必須分別目標寬度和高度的整數倍)

說明:

源2D圖像被劃分成一個三維陣列,使得第一和第二軸具有目標寬度和高度的大小,並且第三軸包含將針對一個目標像素進行二次抽樣的所有像素的值。該軸上的max()返回每個子採樣的最大值。

相關問題