2017-10-20 9 views
1

J'essaie de lire et de normaliser une image à 3 canaux en numpy. Pour chaque canal de l'image, je veux calculer la moyenne des valeurs de pixels qui sont supérieures à zéro.Nombre moyen de pixel d'image ndarray pour les valeurs de pixel supérieures à zéro: Normalisation de l'image

J'ai commencé avec:

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

Mais je ne suis pas sûr d'abord 1.) comment indexer des valeurs positives et sans dimension en préservant l'aplatissement du tableau. Et 2.) Comment prendre canal moyen sage des valeurs positives sélectionnées.

Mon processus complet de normalisation est comme:

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. 

Voici un exemple de l'image, je travaille avec

enter image description here

Répondre

1

meilleure façon serait de masquer tous les zéros comme NaN puis utiliser np.nanmean et np.nanstd pour ignorer essentiellement le zeros des calculs, comme si -

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