Я пытаюсь отфильтровать изображение так, чтобы значение каждого пикселя было равно значению медианы пикселей в квадрате 50x50 вокруг него, исключая любые замаскированные пиксели. Это моя последняя попытка:
- Прочтите изображение из файла FITS (выглядит так ...)
- Применить маску из другого файла FITS
- Передайте окно 50x50 пикселей (я думаю, что это лучший способ сделать это ... открыт для предложений) через замаскированное изображение (замаскированное изображение ниже)
- Создайте отфильтрованную копию замаскированного изображения со значением каждого пикселя, равным значению медианы пикселей в квадрате 50x50 вокруг него, исключая любые замаскированные пиксели.
В приведенном здесь коде я использовал некоторые методы из документации skimage.util.view_as_windows для создания отфильтрованного изображения:
Мне кажется, что он игнорирует замаскированные пиксели. У меня двоякий вопрос: это лучший способ сделать это? Если да, то почему похоже, что маска игнорируется?
import numpy as np
from astropy.io import fits
from skimage.util.shape import view_as_windows
# Use the fits files as input image and mask
hdulist = fits.open('xbulge-w1.fits')
image = hdulist[0].data
hdulist3 = fits.open('xbulge-mask.fits')
mask = 1 - hdulist3[0].data
imagemasked = np.ma.masked_array(image, mask = mask)
side = 50
window_shape = (side, side)
Afiltered = view_as_windows(imagemasked, window_shape)
# collapse the last two dimensions in one
flatten_view = Afiltered.reshape(Afiltered.shape[0], Afiltered.shape[1], -1)
# resampling the image by taking median
median_view = np.ma.median(flatten_view, axis=2)
Примечание. Использование «side = 50» приводит к довольно длительному времени выполнения, поэтому для целей тестирования я старался уменьшить его, скажем, до 10–25.