像素值大于零的 Numpy ndarray 图像像素均值:归一化图像

Numpy ndarray image pixel mean for pixel values greater than zero: Normalizing image

我正在尝试在 numpy 中读取和规范化 3 通道图像。对于图像中的每个通道,我想计算大于零的像素值的平均值。

我开始于:

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,然后​​使用 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))