You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用HealPy将FITS格式的掩膜/地图分割为两部分?

如何基于黄道经纬度分割Healpix FITS掩膜

Healpix格式的FITS掩膜确实不会直接存储经纬度数据,但每个像素的位置是由nside参数和像素索引唯一确定的,咱们可以用HealPy自带的坐标转换工具,把像素索引转成黄道坐标系的经纬度,再按区域筛选分割。具体步骤如下:

1. 读取原掩膜并获取基础参数

先读取你的掩膜文件,拿到Healpix网格的分辨率参数nside和所有像素的索引:

import healpy as hp
import numpy as np

# 读取原掩膜
wmap_map_I = hp.read_map('mask.fits')
nside = hp.get_nside(wmap_map_I)
# 生成所有像素的索引
all_pix = np.arange(hp.nside2npix(nside))

2. 将像素索引转换为黄道坐标系的经纬度

原绘图用了coord=["E"](黄道坐标系),所以咱们需要把默认的赤道坐标转成黄道坐标:

# 获取赤道坐标系下的极角(theta)和方位角(phi)
theta_equ, phi_equ = hp.pix2ang(nside, all_pix)
# 创建坐标转换器:赤道(C)转黄道(E)
rot = hp.Rotator(coord=['C', 'E'])
# 转换为黄道坐标系的极角和方位角
theta_ecl, phi_ecl = rot(theta_equ, phi_equ)
# 转换为更直观的黄道纬度(范围-90~90°)和经度(范围0~360°)
lat_ecl = 90 - np.degrees(theta_ecl)
lon_ecl = np.degrees(phi_ecl)

3. 根据区域范围筛选像素

对照你的掩膜图,定义A、B区域的黄道经纬度条件(以下是示例条件,你可以根据图中实际区域调整数值):

# 示例:A区域为黄道经度0°~180°、纬度-30°~30°
condition_A = (lon_ecl >= 0) & (lon_ecl <= 180) & (lat_ecl >= -30) & (lat_ecl <= 30)
# 示例:B区域为黄道经度180°~360°、纬度-30°~30°
condition_B = (lon_ecl >= 180) & (lon_ecl <= 360) & (lat_ecl >= -30) & (lat_ecl <= 30)

4. 生成并保存新掩膜

复制原掩膜,把不符合区域条件的像素设为无效值(原掩膜用-1表示无效,这里保持一致):

# 生成A区域掩膜
mask_A = wmap_map_I.copy()
mask_A[~condition_A] = -1
# 生成B区域掩膜
mask_B = wmap_map_I.copy()
mask_B[~condition_B] = -1

# 保存为新的FITS文件
hp.write_map('mask_A.fits', mask_A, overwrite=True)
hp.write_map('mask_B.fits', mask_B, overwrite=True)

验证分割结果

你可以用原代码的projview函数分别绘制新掩膜,确认是否只保留了目标区域:

from healpy.newvisufunc import projview

projview(mask_A,
         graticule=True, graticule_labels=True, xlabel="longitude", ylabel="latitude",
         projection_type="mollweide", coord=["E"],
         title="Mask A (Ecliptic)", norm="hist", min=-1, max=1)

内容的提问来源于stack exchange,提问作者NeStack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:40:16