我处理后的文件大小有问题…我编写了创建编辑图像的脚本…(从原始图像数据中扣除平场图像数据和暗图像数据)…这里是代码Convert float NumPy array to big endian,我的问题是…在beggining,我有大小为2.8MiB的fits文件,类型为>;2i…经过处理后,我有一个11MiB和类型float64的fits文件,我不知道为什么? 在IDL中是一些fix方法http://www.exelisvis.com/docs/FIX.html。在Python中,我使用imgg=imgg.A类型(np.int16型,copy=False)。所以我得到了一个2.8MiB的图像文件,但是只有白色和黑色。。。你知道吗
有什么建议吗?你知道吗
从http://docs.astropy.org/en/stable/io/fits/appendix/faq.html#why-is-an-image-containing-integer-data-being-converted-unexpectedly-to-floats
如果图像的标题包含可选的BSCALE和/或BZERO关键字(即BSCALE!=1和/或b0!=0),则必须根据以下公式将文件中的原始数据重新缩放为其物理值:
由于BZERO和BSCALE是浮点值,因此结果值也必须是浮点值。如果原始值是16位整数,则结果值是单精度(32位)浮点。如果原始值是32位整数,则结果值是双精度(64位浮点)。你知道吗
如果您不期望,这种自动缩放很容易让您感到不安,因为在访问HDU的数据部分之前,这种情况不会发生(允许在不重新缩放数据的情况下更新报头之类的事情)。例如:
原因是,一旦用户访问了数据,他们也可以对其进行操作和计算。如果数据被迫保持为整数,则会损失大量精度。因此,最好是在不丢失数据的情况下出错,代价是一开始造成一些混乱。你知道吗
如果数据在保存前必须返回整数,请使用图像HDU.scale方法:
或者,如果以mode='update'和scale\u back=True参数打开文件,则在保存之前,原始的BSCALE和BZERO缩放将自动重新应用于数据。通常这是不可取的,尤其是当从浮点值转换回无符号整数值时。但在需要根据物理值的变化修改原始数据的情况下,这可能很有用。你知道吗
为了防止发生重缩放(有利于更新头-即使您不打算让代码访问数据,在这里也要小心出错),请在打开文件时使用do\u not\u scale\u image\u data参数:
相关问题 更多 >
编程相关推荐