次の配列が GeoTIFF 画像を読み取った結果であると仮定すると、たとえば、配列A
である nodata 値がマスクされB
ている rasterio を使用します。
正方形の近傍に有蓋車の平均平滑化を適用したいと思います。最初の問題は、どの scipy 関数が有蓋車の平均を表しているかわからないことです。
ndimage.uniform_filter かもしれないと思いました。ただし、scipy.signal とは対照的に、ndimage はマスクされた配列には適用できません。
from scipy.signal import medfilt
from scipy.ndimage import uniform_filter
import numpy as np
A = np.array([[-9999, -9999, -9999, -9999, -9999, -9999, -9999, -9999],
[-9999, -9999, -9999, -9999, -9999, -9999, -9999, -9999],
[-9999, -9999, -9999, -9999, -9999, -9999, -9999, -9999],
[-9999, -9999, -9999, 0, 300, 400, 200, -9999],
[-9999, -9999, -9999, -9999, 200, 0, 400, -9999],
[-9999, -9999, -9999, 300, 0, 0, -9999, -9999],
[-9999, -9999, -9999, 300, 0, -9999, -9999, -9999],
[-9999, -9999, -9999, -9999, -9999, -9999, -9999, -9999]])
B = np.ma.masked_array(A, mask=(A == -9999))
print(B)
filtered = medfilt(B, 3).astype('int')
result = np.ma.masked_array(filtered, mask=(filtered == -9999))
print(result)
boxcar = ndimage.uniform_filter(B)
print(boxcar)
では、 scipy.signal.medfilt などのnodata値を考慮したボックスカー平均を適用するにはどうすればよいでしょうか?