【问题标题】:Overplot SunPy HEK polygon mask on custom numpy array instead of Sunpy Map在自定义 numpy 数组而不是 Sunpy Map 上绘制 SunPy HEK 多边形掩码
【发布时间】:2018-12-22 02:59:11
【问题描述】:

我正在研究太阳黑子检测,我正在尝试使用 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 强度图。

【问题讨论】:

    标签: python numpy matplotlib matplotlib-basemap astropy


    【解决方案1】:

    解决方案:

    aia_map.world_to_pixel(rotated_ch_boundary)
    

    rotated_ch_boundary.to_pixel(aia_map.wcs)
    

    感谢 fraserwatson this post

    【讨论】:

      猜你喜欢
      • 2022-08-24
      • 2011-08-01
      • 2016-09-25
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-31
      相关资源
      最近更新 更多