怎么用IDL处理FITS文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用IDL处理FITS文件相关的知识,希望对你有一定的参考价值。
参考技术A 从开始做这个课题到现在就没少用IDL读FITS文件。这个方面用mrdfits比较容易,基本就是一行搞定数据,几行搞定文件头,用了不知多少次。其实在读FITS的时候就在想,把写FITS也搞明白吧,不过惰性太大,一直都回避这个问题。 今天合作者建议我把数据平滑一下重新计算。我用的那个程序的输入就是一个FITS文件,这就意味着我需要重新写一个平滑后的FITS文件,于是今天不得不去看看怎么写FITS文件了。原来知道和mrdfits对应的有mwrfits,专门写FITS文件的。我有一个数组a和文件头head,于是按照说明里写 IDL> mwrfits,a,'out.fits',head 这样倒是可以生成一个FITS文件,查看了也正常,可是我用来处理的那个程序就是不认。不得已,参考了一下别人的程序,用writefits IDL> writefits, 'out.fits', a, head 这样生成的FITS文件就能被识别了。原因为何,有待研究。 在文件头某些信息改变的情况下还需要改一下文件头里的参数,可以用fxaddpar,例如改变参数'NAXIS'的值 IDL> fxaddpar,'NAXIS',2数组/矩阵转换成Image类
Python下将数组/矩阵转换成Image类
先说明一下为什么要将数组转换成Image类。我处理的图像是FITS (Flexible Image Transport System)文件,是一种灰度图像文件,也就是单通道图像。FITS图像的特点是灰度值取值为0~65535,这类图像在python下读成数组首先是不能直接转换成位图,也就不能用OpenCV、Image等方法了。如果是普通的jpg图像,用自带的Image库就能实现很多功能。
下方的这幅图就是通过python下的Image库中的rotate函数实现的
接下来贴上代码。
import Image
import numpy as np
#生成一个数组,维度为100*100,灰度值一定比255大
narray=np.array([range(10000)],dtype=‘int‘)
narray=narray.reshape([100,100])
#调用Image库,数组归一化
img=Image.fromarray(narry*255.0/9999)
#转换成灰度图
img=img.covert(‘L‘)
#可以调用Image库下的函数了,比如show()
img.show()
#Image类返回矩阵的操作
imgdata=np.matrix(img.getdata(),dtype=‘float‘)
imgdata=imgdata.reshape(narry.shape[0],narry.shape[1])
#图像归一化,生成矩阵
nmatrix=imgdata*9999/255.0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
这是刚才代码生成的图片,是不是很简单?
以上是关于怎么用IDL处理FITS文件的主要内容,如果未能解决你的问题,请参考以下文章