![](/img/trans.png)
[英]Astronomy RA and DEC to cartesian coordinates then plot in a 2D image FOV
[英]Get pixel coordinates from ra, dec after oversampling FITS image
我正在寻找一种方法,可以在过采样后在FITS图像上定位与对象的ra和dec位置相对应的像素坐标(以度为单位)。 如果我不进行过采样,这将很简单,但是我需要这样做。 给定不变的FITS图像,我可以这样做:
from astropy.wcs import WCS
ra, dec = (43.603, 31.029)
w = WCS('myimage.fits')
x, y = w.all_world2pix(ra, dec, 1) #this gives me the pixel coordinates of the object at (ra, dec) position
但是,当我对它进行过采样并尝试找到像素坐标时,由于(ra,dec)对于过采样的图像不再准确,因此它显然是不准确的。 由于我对5x5进行了超采样,因此我尝试将x, y
乘以5。但是,当我在ds9中放大该点时,它显示了对象偏离中心,因此我认为这不起作用。 下面是我的代码过采样部分,因为它可能有助于看到这一点。 在这里, data
只是原始FITS图像中包含的2D numpy数组。
from astropy.nddata import Cutout2D
import numpy as np
from scipy import interpolate
def oversample(data_set, N):
size = 120 #pixel size of my box cutout
geom_ctr = (np.shape(data_set)[0]//2, np.shape(data_set)[1]//2)
cutout = Cutout2D(data_set, geom_ctr, size).data
Y, X = np.shape(cutout)
x = np.linspace(0, 0.5, X)
y = np.linspace(0, 0.5, Y)
f = interpolate.interp2d(x, y, cutout, kind='cubic')
Xnew = np.linspace(0, 0.5, X*N)
Ynew = np.linspace(0, 0.5, Y*N)
new_data = f(Xnew, Ynew)
return new_data
resampled_data = oversample(data, 5)
如果有人对过采样后如何恢复准确的像素坐标有任何想法,那就太好了。 谢谢!
原则上,您描述的“将x,y乘以5”的解决方案是正确的。 您的实现中必须有一个错误。
您没有显示用于计算坐标的代码,因此我只能猜测问题所在。
一些技巧:
cutout.data
您在例子中使用,也有一个cutout.wcs
代表cutout.wcs
的WCS。 如果要使用切口,则必须使用该WCS(而不是原始图像中的WCS)在世界坐标和像素坐标之间进行转换。 w.all_world2pix(ra, dec, 1)
调用中将origin=1
传递为第三个参数,则第一个像素的中心将位于像素位置1。您必须将x和y插值位置设置为插值,以及用于正确计算坐标的代码行。 通过origin=0.5
可能会更容易,即将第一个像素的中心放在像素位置0.5处,从而将图像的角放在像素位置0.0?处。 这样一来,可能更容易将线写到放置插值节点的位置,并正确计算插值图像中的坐标。 如果将任务分为单独的步骤或功能(而不是同时执行剪切和上采样的功能),并使用经过精心挑选的测试用例,可以知道预期的输出(例如,只有几个像素的图像即可知道预期的输出)结果,就像data = np.array([[1, 2, 3], [4, 5, 6]])
)一样,您将在计算坐标的代码中快速找到并解决该问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.