掩模图像中像素值的标准偏差

时间:2014-01-24 14:03:12

标签: arrays pixel mask dicom roi

我有一个戴着面具的DICOM图像。它看起来像一个黑色的背景,中间有一个白色的圆圈(区域没有被覆盖,并且掩盖了它)。

代码为:

import numpy as np
import dicom
import pylab

ds = dicom.read_file("C:\Users\uccadmin\Desktop\James_Phantom_CT_Dec_16th\James Phantom   CT Dec 16th\Images\SEQ4Recon_3_34\IM-0268-0001.dcm")

lx, ly = ds.pixel_array.shape
X, Y = np.ogrid[0:lx, 0:ly]
mask = (X - lx/2)**2 + (Y - ly/2)**2 > lx*ly/8  # defining mask
ds.pixel_array[mask] = 0
print np.std(ds.pixel_array) # trying to get standard deviation

pylab.imshow(ds.pixel_array, cmap=pylab.cm.bone) # shows image with mask

我想获得仅在白色圆圈内的像素值的标准偏差,即排除圆圈外的黑色空间(掩模)。

我不认为上面代码得到的值是正确的,因为它是~500,白圈几乎是同质的。

如何确保我只能以Pythonic的方式获得白圈内像素值的标准偏差?

1 个答案:

答案 0 :(得分:0)

我认为你得到一个大数字的原因是因为你的标准偏差包括所有的零值。

您是否足以忽略所有零值? (这没关系,假设圆圈中没有或很少像素的值为0.)如果是这样的话

np.std([x for x in ds.pixel_array if x > 0])

应该做的伎俩。如果这还不够好,那么你可以将掩码中的条件反转为

mask = (X - lx/2)**2 + (Y - ly/2)**2 < lx*ly/8  # defining mask, < instead of >

并做

mp.std(ds.pixel_array[mask])