Photutils孔径测光触发NoneType错误求助
孔径测光部分图像报错的排查与解决办法
嘿,我帮你捋捋这个孔径测光遇到的问题——你说大部分图像运行正常,只有部分触发错误,结合你贴的代码来看,大概率是以下几种场景导致的,给你逐个分析解决:
1. 目标位置超出图像像素范围
当b_position对应的天球坐标转换为像素后,整个光圈(或者光圈的核心区域)落在图像边界之外时,to_mask(method='exact')[0]就容易出问题——因为没有有效的像素区域可以生成mask。
解决办法:
先判断转换后的像素位置是否在图像有效范围内,再执行后续操作:
# 先将天球位置转换为像素坐标 b_pix_pos = b_position.to_pixel(w_n) # 获取图像的尺寸(假设masked_img_aper是二维图像数组) img_height, img_width = masked_img_aper.shape # 检查像素坐标是否在图像范围内 if 0 <= b_pix_pos.x < img_width and 0 <= b_pix_pos.y < img_height: # 正常执行光圈创建与测光流程 b_aperture = SkyCircularAperture(b_position, r= r*u.arcsec) b_annulus_aperture = SkyCircularAnnulus(b_position, r_in= r_in* u.arcsec, r_out= r_out* u.arcsec) b_ap_pix = b_aperture.to_pixel(w_n) b_ap_pix_mask= b_ap_pix.to_mask(method='exact')[0] c_img_data = b_ap_pix_mask.apply(masked_img_aper) else: # 跳过该目标或记录日志标记为无效 print(f"目标位置{b_position}超出图像范围,跳过测光")
2. WCS转换异常
部分图像的WCS(世界坐标系)信息可能存在偏差、缺失或者错误,导致天球坐标转像素坐标时生成NaN或异常值,进而让mask生成失败。
解决办法:
先校验WCS转换的有效性,捕获异常场景:
try: # 尝试转换坐标并检查是否为有效数值 b_pix_pos = b_position.to_pixel(w_n) if np.isnan(b_pix_pos.x) or np.isnan(b_pix_pos.y): raise ValueError("WCS转换得到无效的NaN坐标") # 正常执行测光流程 b_aperture = SkyCircularAperture(b_position, r= r*u.arcsec) b_annulus_aperture = SkyCircularAnnulus(b_position, r_in= r_in* u.arcsec, r_out= r_out* u.arcsec) b_ap_pix = b_aperture.to_pixel(w_n) b_ap_pix_mask= b_ap_pix.to_mask(method='exact')[0] c_img_data = b_ap_pix_mask.apply(masked_img_aper) except Exception as e: print(f"处理图像时WCS转换出错:{str(e)},跳过该图像")
3. Mask生成方法的兼容性问题
你使用的method='exact'对边缘像素的处理逻辑比较严格,如果光圈刚好切到图像边缘,且图像本身存在较多无效mask像素,就可能触发错误。可以尝试更换mask生成方法来兼容边缘场景:
解决办法:
换成method='center'(仅保留光圈内像素中心在光圈里的像素)或者method='subpixel'(亚像素采样,精度更高且兼容性更好):
# 使用center方法 b_ap_pix_mask= b_ap_pix.to_mask(method='center')[0] # 或者使用subpixel方法(subpixel参数可调整,比如设为5) b_ap_pix_mask= b_ap_pix.to_mask(method='subpixel', subpixel=5)[0]
内容的提问来源于stack exchange,提问作者Abhishek
相关产品推荐
相关产品推荐

