我目前想用python3.11中的astropy包来处理fits的图像并进行透视变化的修正
但是目前遇到一个问题,我运行下面代码之后并不能得到理想的结果,目前还是有一些倾斜且有一些不完整的小格子,具体代码如下,包括结果,我不知道下面如何修改才能得到一个修正好的结果,希望有人可以帮忙解答下:
具体代码:
from astropy.io import fits
import numpy as np
import matplotlib.pyplot as plt
from skimage.transform import warp, ProjectiveTransform
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False
# 读取 FITS 文件
fits_file_path = 'E:/20231113.fits'
hdul = fits.open(fits_file_path)
data = hdul[0].data.byteswap().newbyteorder()
# 定义透视变换函数
def perspective_correction(image):
rows, cols = image.shape
src_points = np.array([[0, 0], [0, rows], [cols, 0], [cols, rows]])
dst_points = np.array([[0,0], [0, rows], [cols * 0.85, 0], [cols * 0.85, rows]])
# 通过透视变换矩阵创建 ProjectiveTransform 对象
transform = ProjectiveTransform()
transform.estimate(src_points, dst_points)
# 应用透视变换
corrected_image = warp(image, transform, output_shape=(rows, cols), mode='edge')
return corrected_image
# 进行透视修正
processed_data = perspective_correction(data)
# 保存修正后的数据为新的 FITS 文件
output_fits_path = 'E:/output_image1.fits'
hdu = fits.PrimaryHDU(processed_data.byteswap().newbyteorder())
hdul_output = fits.HDUList([hdu])
hdul_output.writeto(output_fits_path, overwrite=True)
print("透视修正完成,并保存到", output_fits_path)
# 显示原始图像和修正后的图像
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.imshow(data, cmap='viridis')
plt.title('原始图像')
plt.subplot(1, 2, 2)
plt.imshow(processed_data, cmap='viridis')
plt.title('修正后的图像')
plt.show()