我正在努力阅读并规范化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.
以下是我正在使用的图片示例
答案 0 :(得分:1)
最简单的方法是将所有零屏蔽为NaN,然后使用np.nanmean
和np.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))