ndarray
我有 5 个 288x288 s形式的灰度图像。每个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.
在两个掩码数组都包含 a 的地方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
不诉诸上述不愉快的情况下按预期工作?