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

如何将图像中的点源/恒星转换为NaN值?基于SExtractor坐标实现

基于SExtractor结果将恒星区域设为NaN的方法

核心思路

  • 利用SExtractor输出的FWHM_IMAGE(半高全宽)确定每颗恒星的覆盖像素范围,通常取2-3倍FWHM作为有效区域(可根据实际观测数据调整)
  • 对每张抖动图像,遍历每颗恒星,计算其覆盖的像素坐标范围,将范围内所有像素设为NaN
  • 强制处理坐标边界,避免超出图像的行列索引范围引发错误

具体实现代码

假设dcals是存储9张抖动图像的数组(每张为2D数组),dse是对应每张图像的SExtractor结果列表:

import numpy as np

# 遍历所有图像及对应恒星数据
for img_idx in range(len(dcals)):
    # 复制原图像,避免修改原始数据
    processed_img = dcals[img_idx].copy()
    # 转换为浮点型,确保能存储NaN(若原图像是整数类型)
    processed_img = processed_img.astype(np.float64)
    
    star_list = dse[img_idx]
    img_h, img_w = processed_img.shape
    
    # 遍历当前图像中的每颗恒星
    for star in star_list:
        # 获取恒星坐标与FWHM(注意:若SExtractor输出为1-based坐标,需减1转0-based)
        x = star['X_IMAGE'] - 1  # 若为0-based则去掉-1
        y = star['Y_IMAGE'] - 1
        fwhm = star['FWHM_IMAGE']
        
        # 计算恒星覆盖区域的半宽,这里取2倍FWHM,可根据需求调整
        half_size = int(np.round(fwhm * 2))
        
        # 计算像素范围上下界,确保不超出图像边界
        x_start = max(0, int(np.floor(x - half_size)))
        x_end = min(img_w - 1, int(np.ceil(x + half_size)))
        y_start = max(0, int(np.floor(y - half_size)))
        y_end = min(img_h - 1, int(np.ceil(y + half_size)))
        
        # 将区域内所有像素设为NaN
        processed_img[y_start:y_end+1, x_start:x_end+1] = np.nan
    
    # 替换原数组为处理后的图像,或存入新列表
    dcals[img_idx] = processed_img

# 验证处理结果:绘制第一张图查看恒星区域
import matplotlib.pyplot as plt
plt.imshow(dcals[0], cmap='gray', vmin=0, vmax=255)
plt.scatter([s['X_IMAGE']-1 for s in dse[0]], [s['Y_IMAGE']-1 for s in dse[0]], 
            s=[(e['FWHM_IMAGE']/0.608)*2 for e in dse[0]], c='blue', marker='.')
plt.show()

关键细节说明

  • 坐标索引转换:SExtractor默认输出1-based像素坐标,而Python数组是0-based,必须做减1处理,否则坐标会偏移一个像素
  • 区域系数调整:如果发现恒星边缘未被完全覆盖,可将2调整为2.5或3;若想减少背景误覆盖,可降低系数至1.5
  • 数据类型转换:整数类型数组无法存储NaN,必须先转换为float64或float32类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:57:26