【发布时间】:2013-09-12 13:37:22
【问题描述】:
我有 5 张灰度图像,格式为 288x288 ndarrays。每个ndarray 中的值只是numpy.float32 范围从0.0 到255.0 的数字。对于每个ndarray,我创建了一个numpy.ma.MaskedArray 对象,如下所示:
def bool_row(row):
return [value == 183. for value in row]
mask = [bool_row(row) for row in nd_array_1]
masked_array_1 = ma.masked_array(nd_array_1, mask=mask)
值183. 代表图像中的“垃圾”。所有 5 幅图像中都有一些“垃圾”。我想取蒙面图像的中值,其中每个点的中值应忽略任何蒙面值。结果将是没有垃圾的正确图像。
当我尝试时:
ma.median([masked_array_1, masked_array_2, masked_array_3, masked_array_4, masked_array_5], axis=0)
我得到的似乎是中位数,但它没有忽略掩码值,而是将它们视为183.,因此结果只是所有图片中叠加的垃圾。当我只取两个蒙版图像的中位数时:
ma.median([masked_array_1, masked_array_2], axis=0)
看起来它开始做正确的事情,但随后放置了 183. 的值,即使两个掩码数组都包含 MaskedConstant。
我可以执行以下操作,但我觉得可能有一种方法可以使 ma.median 的行为符合预期:
unmasked_array_12 = ma.median([masked_array_1, masked_array_2], axis=0)
mask = [bool_row(row) for row in unmasked_array_12]
masked_array_12 = ma.masked_array(unmasked_array_12, mask=mask)
unmasked_array_123 = ma.median([masked_array_12, masked_array_3], axis=0)
mask = [bool_row(row) for row in unmasked_array_123]
masked_array_123 = ma.masked_array(unmasked_array_123, mask=mask)
...
如何让ma.median 按预期工作而不诉诸上述不愉快?
【问题讨论】:
-
为什么不用
mask = nd_array_1 == 183.来制作你的面具? -
@BiRico,是的,这是制作面具的更好方法,谢谢!