2017-10-20 4 views
1

3チャンネル画像をnumpyで読み込み、正規化しようとしています。画像の各チャンネルについて、私はゼロより大きいピクセル値の平均を計算したいと思います。ナンシーndarray画像ピクセルの平均値が0より大きい場合:画像の正規化

私が使用を開始:

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. 

は、私は、その後にNaNとしてすべてゼロをマスクすることであろう

enter image description here

答えて

1

最も簡単な方法で働いている画像の例であります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)) 
関連する問題