288x288 ndarray
s の形式で 5 つのグレースケール画像があります。それぞれの値は、0.0 から 255.0 までの数値ですndarray
。numpy.float32
ごとに、次のようにオブジェクトを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.
ため、結果にはすべての写真からのゴミが重なっています。2 つのマスクされた画像の中央値を取ると、次のようになります。
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
上記の不快感に頼らずに期待どおりに動作させるにはどうすればよいですか?