Здоровая маска имеет границу
Я пытаюсь замаскировать свою карту healpy для пикселей, у которых нет данных, однако, когда я применяю маску healpy с badval=-1.6375e+30
Кажется, вокруг моей маски есть граница.
import healpy as hp
import numpy as np
# load the mask
mask = hp.read_map('mask_nvss_S20-S1000_Ns64.fits')
# degrade the mask to NSIDE = 16
mask16 = np.round(hp.ud_grade(mask, 16))
# apply it to the map
masked_map = hp.ma(map1)
masked_map.mask = np.logical_not(mask16)
# masked map
nvss_map = np.round(masked_map)
Может кто-нибудь помочь мне убрать этот эффект границы?
1 ответ
У меня до сих пор нет полной картины проблемы, но я предполагаю, что ваша проблема связана с понижением маски.
При переходе от логической маски с высоким разрешением к более низкому разрешению вы можете следовать трем различным стратегиям. Выбор зависит от вашей проблемы.
Я проиллюстрирую эффект с помощью маски, которую вы предоставили, показывая увеличение:
Понижение маски с типом bool
Вы можете просто понизить булеву маску, предоставив вам левую панель на рисунке ниже. Обратите внимание, что небольшие патчи будут без маски в этой процедуре.
map_lowres_bool = hp.ud_grade(mask_highres.astype(bool), nside=16)
Понижение маски с плавающим типом
Если вместо этого вы понижаете свою маску типа float
вместо этого вы получите непрерывную карту с весами (средняя панель ниже). Я предполагаю, что это производит эффект, который вы видите.
map_lowres_float = hp.ud_grade(mask_highres.astype(float), nside=16)
Правильное понижение маски с типом bool
Вы также можете понизить булеву маску так, чтобы все маскированные области оставались замаскированными. Из-за более низкого разрешения ваши замаскированные патчи будут больше, чем в оригинальной маске.
mask_lowres_proper = hp.ud_grade(mask.astype(float), nside=16).astype(float)
mask_lowres_proper = np.where(mask_lowres_proper == 1., True, False).astype(bool)
Это производит правую панель ниже.
Надеюсь, вы нашли это полезным, дайте мне знать, если у вас есть вопросы!