像素值大于零的Numpy ndarray图像像素均值:标准化图像

时间:2017-10-20 09:29:39

标签: python image numpy scipy normalization

我正在努力阅读并规范化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. 

以下是我正在使用的图片示例

enter image description here

1 个答案:

答案 0 :(得分: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))