Python NoConvergence:WCS全球到pix

Python NoConvergence:WCS全球到pix,python,astropy,fits,Python,Astropy,Fits,我正在尝试将.fits图像中对象的一些RA和Dec转换为像素值,但每次运行WCS.all_world to pix时,我都会遇到以下错误: NoConvergence: 'WCS.all_world2pix' failed to converge to the requested accuracy. After 2 iterations, the solution is diverging at least for one input point. 我如何避免这种情况?我试图改变容忍度,但似乎

我正在尝试将.fits图像中对象的一些RA和Dec转换为像素值,但每次运行WCS.all_world to pix时,我都会遇到以下错误:

NoConvergence: 'WCS.all_world2pix' failed to converge to the requested accuracy.
After 2 iterations, the solution is diverging at least for one input point.
我如何避免这种情况?我试图改变容忍度,但似乎没有任何帮助

这是我正在使用的代码:

coordinates_ID = zip(ID, RA, Dec)  
pixRA = []
pixDec = []

    #read in the fits file
insciim = fits.open('/home/myname/image.fits')

#working from a copy to avoid overwriting the images
sciim = np.copy(insciim)

#getting the header from the fits file
header = sciim[0].header
header["CTYPE1"] = "RA---TAN-SIP"
header["CTYPE2"] = "DEC--TAN-SIP"

w = wcs.WCS(insciim[0].header)

for i in coordinates_ID:
    pixra, pixdec = w.all_world2pix(i[1], i[2], 1)
    pixRA.append(pixra)
    pixDec.append(pixdec)


test = (pixRA, pixDec)

size = (200, 200)

cut = Cutout2D(sciim[0].data, test, size).data

plt.imshow(cut, origin='lower', cmap='viridis')
plt.colorbar()

img_file = "/home/myname/test.fits"
img_hdu = fits.PrimaryHDU(cut, header=sciimheader)
img_hdu.writeto(img_file, overwrite=True)

我必须声明,坐标_id是图像中对象坐标和相应名称的3个压缩表(如三个列表)。有人能发现是什么导致我犯错误吗

你能多说一点你在处理什么样的数据吗?由于它是一个FITS文件,也许您可以在问题中包含标题,以及您运行的确切代码。@iGuanaut更新了!我没有包括头,因为它是巨大的,但这是我正在使用的代码。它相当短,所以我不知道它为什么不起作用。你也可以只添加标题的一部分。我不确定如何确切地解释要包含哪些部分,但至少要说明前10个左右的关键字(通常描述数据的格式)以及与WCS相关的部分(大多数都是从
C
开始的,比如
CTYPE
以及
CRVAL
CRPIX
CDELT
CROTA
,等等。如果你不介意提供一个下载文件的链接也会有帮助的话。我不认为这是真正的问题,但它仍然没有用:
为避免覆盖图像
scim=np.copy(insciim)
。此处的
insciim
只是FITS文件的只读句柄,因此您无论如何都不能“覆盖”原始数据。
np.copy()
用于复制单个Numpy数组,但您将向其传递一个
HDUList
对象。
HDUList
就像是一个Python
列表
的HDU对象,因此此行的唯一效果是将
HDUList
转换为一个由HDU对象组成的Numpy数组,实际上使它变得不那么有用。只需删除该行。您的代码示例也不完整,因为我看不到变量
scimheader
来自何处,也看不到
ID
RA
、和
Dec
。可能传递的是图像域之外的一些坐标,但如果看不到更完整、可复制的示例,就无法说出这些坐标。您能说l吗请详细说明您使用的是哪种数据?因为它是一个FITS文件,也许您可以在问题中包括标题,以及您运行的确切代码。@iGuanaaut更新了!我没有包括标题,因为它很大,但这是我正在使用的代码。它相当短,所以我不知道它为什么不起作用。您也可以只添加一部分我不确定如何确切地解释要包含哪些部分,但至少要说明前10个左右的关键字(通常描述数据格式)以及与WCS相关的部分(大多数都是从
C
开始的,比如
CTYPE
以及
CRVAL
CRPIX
CDELT
CROTA
,等等。如果你不介意提供一个下载文件的链接也会有帮助的话。我不认为这是真正的问题,但它仍然没有用:
为避免覆盖图像
scim=np.copy(insciim)
。此处的
insciim
只是FITS文件的只读句柄,因此您无论如何都不能“覆盖”原始数据。
np.copy()
用于复制单个Numpy数组,但您将向其传递一个
HDUList
对象。
HDUList
就像是一个Python
列表
的HDU对象,因此此行的唯一效果是将
HDUList
转换为一个由HDU对象组成的Numpy数组,实际上使它变得不那么有用。只需删除该行。您的代码示例也不完整,因为我看不到变量
scimheader
来自何处,也看不到
ID
RA
Dec
。您可能传递了图像域之外的一些坐标,但如果看不到更完整、可复制的示例,就无法说出。