Estoy tratando de guardar una matriz NumPy RGB (una matriz 3d con una dimensión de 512x512x3), en un archivo .fits usando astropy.io
. Guardar esta matriz en un archivo .png funciona bien, pero cuando trato de guardarla en un archivo .fits usando HDUList.writeto
, solo produce colores basura. Además, tengo que remodelar la imagen así:
img = img.reshape(img.shape[2], img.shape[0], img.shape[1])
o intentará almacenar solo 3 columnas de la imagen en lugar de 512.
Cada elemento de la matriz 3d contiene un valor entre 0 y 255.
No he hecho mucho procesamiento de imágenes astronómicas antes, pero como esta pregunta no tiene respuesta, lo intentaré, con suerte, para algo. Si el problema es más específico, una muestra de código/una muestra de imagen probablemente sería útil para un diagnóstico posterior, pero de lo contrario, este ejemplo puede ayudar. Describe el proceso de escritura de una imagen de 3 canales para separar imágenes FITS. Intentaría esto primero y verificaría si esta salida también es basura; podría ser un problema con la forma en que está usando la función HDUList.writeto(). El código relevante se pega a continuación (con un par de ediciones, ya que el ejemplo usa la clase Imagen de almohada al principio):
r, g, b = img[:, :, 0], img[:, :, 1], img[:, :, 2]
red = fits.PrimaryHDU(data=r)
red.writeto('red.fits')
green = fits.PrimaryHDU(data=g)
green.writeto('green.fits')
blue = fits.PrimaryHDU(data=b)
blue.writeto('blue.fits')
También por curiosidad: ¿por qué su "matriz RGB numpy" almacena valores entre 0 y 512? El estándar para las imágenes suele ser números enteros entre 0 y 255 o flotantes entre 0 y 1; pero supongo que la astronomía requiere una mayor profundidad de bits. En cualquier caso, también debe asegurarse de que el dtype de su matriz numpy sea lo suficientemente grande para la profundidad de bits deseada; a menudo, las imágenes se almacenan con dtype="uint8", que va de 0 a 255.
pedro erwin