Ich versuche, ein NumPy-RGB-Array (ein 3D-Array mit der Dimension 512x512x3) in einer .fits-Datei mit astropy.io
. Das Speichern dieses Arrays in einer .png-Datei funktioniert einwandfrei, aber wenn ich versuche, es mit in eine .fits-Datei zu speichern HDUList.writeto
, werden nur Müllfarben erzeugt. Außerdem muss ich das Bild so umformen:
img = img.reshape(img.shape[2], img.shape[0], img.shape[1])
oder es wird versucht, nur 3 Spalten des Bildes statt 512 zu speichern.
Jedes Element im 3D-Array enthält einen Wert zwischen 0 und 255.
Ich habe noch nicht viel astronomische Bildverarbeitung gemacht, aber da diese Frage unbeantwortet ist, werde ich es versuchen - hoffentlich mit etwas Erfolg. Wenn das Problem spezifischer ist, wäre ein Codebeispiel/Bildbeispiel wahrscheinlich für die weitere Diagnose nützlich, aber ansonsten kann dieses Beispiel hilfreich sein. Es erläutert den Vorgang des Schreibens eines 3-Kanal-Bildes in separate FITS-Bilder. Ich würde dies zuerst versuchen und prüfen, ob diese Ausgabe auch Müll ist - es könnte nur ein Problem mit der Verwendung der Funktion HDUList.writeto () sein. Der relevante Code wird unten eingefügt (mit ein paar Änderungen, da das Beispiel zunächst die Pillow Image-Klasse verwendet):
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')
Auch aus Neugier - warum speichert Ihr "numpy RGB-Array" Werte zwischen 0 und 512? Der Standard für Bilder sind normalerweise ganze Zahlen zwischen 0-255 oder Floats zwischen 0 und 1; Aber ich vermute, dass die Astronomie eine größere Bittiefe erfordert? In jedem Fall sollten Sie auch darauf achten, dass der dtype Ihres numpy-Arrays groß genug für die gewünschte Bittiefe ist – oft werden Bilder mit dtype="uint8" gespeichert, das von 0 bis 255 reicht.
Peter Erwin