Как обрезать изображение FITS в Python по заданной форме?
Я хочу обрезать область изображения FITS между двумя кругами. Например, я хочу вырезать область на изображении FITS между кругами с радиусами R1 и R2. Как мне это сделать?
1 ответ
Вероятно, вы найдете то, что ищете, в пакете регионов:https://astropy-regions.readthedocs.io/en/latest/
Он может создавать области с пиксельными координатами или координатами неба, комбинировать их и создавать пиксельные маски:
In [1]: from regions import CirclePixelRegion, PixCoord
In [2]: c1 = CirclePixelRegion(center=PixCoord(6, 6), radius=3)
In [3]: c2 = CirclePixelRegion(center=PixCoord(9, 9), radius=3)
In [4]: (c1 & c2).to_mask().data
Out[4]:
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
In [5]: (c1 | c2).to_mask().data
Out[5]:
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 0, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 0, 1, 1, 1, 1, 1, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 1, 1, 1, 1, 0, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 0, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])