opencv 在尝试使用FITS文件时,如何解析cv2.cvtcolor生成的NaN值?

41zrol4v  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(138)

我正在使用强透镜事件的CASTLES数据集,并试图将星系的图像分类为透镜事件或不。
当我检查FITS图像本身中的任何NaN值时,我找不到任何值:

img_g = fits.open(os.path.join(path, os.listdir(path)[0]))
    img = img_g[0].data

    print(np.any(np.isnan(img))) --> (False)

但是,当我尝试将图像格式化为适当数量的颜色通道时,我会得到以下结果:

pic = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB)
    for i in pic[0]:
      if np.any(np.isnan(i)):
        print(i) --> [nan, nan, nan]

此外,当我尝试调整图像大小时,NaN值会弹出:

pic = cv2.resize(img,(256,256))
    print(np.any(np.isnan(pic))) --> (True)

有谁能告诉我我做错了什么,或者有没有办法在保留图像的同时删除这些NaN值?如果有必要,我会提供更多信息。

b1zrtrql

b1zrtrql1#

没有颜色通道。那些是灰度图像。我下载了一套来检查。所有137张图像都是灰度的。如果你要给它们上色,那就由你来做转换。

后续

你不能只是把这些图像转换成颜色。这没有意义。我看了一个示例文件,值的范围从-0.0289到+0.224。如果我给你一个给予0.18的值,那是什么颜色?如果我给你给予-0.02,那是什么颜色?
以下是使用2D绘图可视化这些文件的方法:

from astropy.io import fits
import numpy as np
import matplotlib.pyplot as plt

f = fits.open('q256.fits')
img = f[0].data

plt.imshow(img,interpolation='none')
plt.show()

如果我cd Castles/B2319/FIT/NIC2H并运行该脚本,我会得到:x1c 0d1x
但这是matplotlib应用颜色Map的工件。如果这是你想要的,你必须做颜色Map。OpenCV不能做。

相关问题