2017-10-20 107 views
1

我試圖讀取並正常化numpy中的3通道圖像。對於圖像中的每個通道,我想計算大於零的像素值的平均值。Numpy ndarray圖像像素對於大於零的像素值的平均值:正常化圖像

我開始:

from scipy import misc 
img = misc.imread('test.png') 
print(type(img)) #<type 'numpy.ndarray'> 
print(img.shape) #(512, 512, 3) 

但我不知道第1)如何索引超出保留尺寸正面的價值觀和不平坦的陣列。和2.)如何採取通道明智的選擇正值的意思。

我完全正常化的過程是這樣的:

img_mean = mean(img[img >0])#channel wise mean of positive pixels 
img_std = std(img[img>0]) #channel wise std. deviation of positive pixels 
img_norm = (img - img_mean)/img_std 
img_norm[img_norm < -1] = 0 #setting pixel values less than 1 to 0. 

這裏是我與

enter image description here

回答

1

最簡單的方式工作將屏蔽掉所有的零爲NaN,並且然後圖像的例子使用np.nanmeannp.nanstd基本上忽略了計算中的zeros,像這樣 -

imgn = np.where(img>0,img,np.nan) 
img_norm = (img - np.nanmean(imgn,axis=(0,1)))/np.nanstd(imgn,axis=(0,1))