在自定义 numpy 数组而不是 Sunpy Map 上绘制 SunPy HEK 多边形掩码

Overplot SunPy HEK polygon mask on custom numpy array instead of Sunpy Map

我正在研究太阳黑子检测,我正在尝试使用 sunpy.net.hek 客户端从知识库下载太阳事件来构建地面实况掩码。 我关注了这个tutorial。 我的问题是旋转后我无法获得多边形像素坐标。即:

ch_boundary = SkyCoord( [(float(v[0]), float(v[1])) * u.arcsec for v in p3], 
                         obstime=ch_date, 
                         frame=frames.Helioprojective)

rotated_ch_boundary = solar_rotate_coordinate(ch_boundary, aia_map.date)

其中 p3 保存事件的原始坐标(必须旋转它们,因为您的图片不能与 hek 上的事件具有相同的时间)。 rotated_ch_boundary 是一个 Astropy SkyCoord,但无法弄清楚如何从中获取相对于图像的像素坐标。 然后在教程中它只是使用 Sunpy Map 和 matplotlib 绘制坐标:

aia_map.plot(axes=ax)
ax.plot_coord(rotated_ch_boundary, color='c')

我不能那样做,因为我想在 numpy 数组上打印多边形(填充)并保存。 我还尝试构建自定义 Sunpy 地图并使用相同的函数进行绘图:

from sunpy.net.helioviewer import HelioviewerClient

hv = HelioviewerClient()
filepath = hv.download_jp2('2017/07/10 10:00:00', observatory='SDO', 
               instrument='HMI', detector='HMI', measurement='continuum')
hmi = sunpy.map.Map(filepath)

# QUERY AND ROTATION CODE HERE...

hmi.plot(axes=ax)
ax.plot_coord(rotated_ch_boundary, color='c')

但它甚至没有在绘图上显示多边形,我不知道是因为不同的分辨率还是其他原因。

你知道我如何在自定义图像上绘制多边形并保存它以便以后使用吗?

我的目的是创建一个突出显示白色多边形的黑色图像。多边形应该与相应图像中的太阳黑子处于完全相同的位置,比方说我从 helioviewer 下载的同一天的 SDO HMI 强度图。

解决方案:

aia_map.world_to_pixel(rotated_ch_boundary)

rotated_ch_boundary.to_pixel(aia_map.wcs)

感谢 fraserwatson this post