Entwicklung von Astro-Fotos ohne Bayer-Matrix Interpolation

Update 8.11.2023

Bei dem unten beschriebenen Verfahren werden mit den Drizzle-Verfahren die Bilder zur ursprünglichen Auflösung zurück geholt. Damit verliert man Signal-/Rausch-Verhältnis, d.h. die Bilder sollten verrauschter aussehen als diejenigen mit Debayer-Interpolation entwickelten. Interessanterweise ist aber genau das Gegenteil der Fall wie man hier in den Testbildern sieht:

debayer Vergleich

Ggf. wirken Interpolationseffekte des Debayer-Algorithmus eher Rausch-verstärkend. Die Sternabbildung ist auch leicht unterschiedlich welches bei der photometrischen Kalibrierung zu leicht unterschiedlichen Farbdarstellung führt. Die Testbilder zeigen die identische direkte Ausgabe aus Siril.


14.5.2022

Moderne Farbkameras verfügen über einen sogenannten Bayer-Sensor, bei dem die Fotosensoren für Rot, Grün und Blau in einem Schachbrettmuster angebracht sind. Aus diesen Sensordaten wird dann ein Farbbild errechnet. Bei Astro-Fotos ist das nicht ganz optimal, da die Farbwerte interpoliert und somit nicht ausschließlich gemessene Daten verarbeitet, sondern Interpolationsdaten eingemischt werden.

Wenn wir einen Sensor mit 100 x 100 Pixeln betrachten, so verfügt dieser in Summe über 10000 Pixel unterteilt in 2500 rote, 5000 grüne und 2500 blaue Pixel. Trotzdem erhalten wir ein Farbbild mit 10000 RGB-Pixeln, weil die fehlenden Daten aus den Nachbarwerten ermitteln werden. Ein einfacher Interpolationsalgorithmus sieht z.B. so aus:

bayer_1

Siril verfügt über verschiedene, teilweise sehr aufwändige Interpolationsalgorithmen, die sich in den Einstellungen finden:

bayer_2

Diese Algorithmen führen zu ziemlich guten Ergebnissen. Was ist aber zu tun, wenn man Bayer-Matrix-Interpolation in seinen Bildern ausschließen möchte?

Als ersten Schritt zerlegen wir alle Bilder in die Farbgrundwerte. Siril hat hierfür den Skriptbefehl "seqsplit_cfa" mit dem alle Bilder einer Sequenz zerlegt werden:

bayer_3

Wenn man dieses für Darks, Darkflats, Darks und Lights durchführt, dann hat man Bildsequenzen, als wäre die Aufnahme mit monochromer Kamera und R/G/B-Filter aufgenommen. Diese kann man nun getrennt stacken und erhält dann den reinen Rot-, Grün- und Blau-Kanal, allerdings in der Hälfte der Auflösung.

Die ursprüngliche Auflösung kann man zurückholen, in dem bei der Registrierung die Option „-drizzle“ verwendet wird. Dabei nutzt die Software den Umstand, dass die Einzelbilder nie genau übereinander liegen, sondern um Pixelbruchteile versetzt sind. Damit können die Pixellücken errechnet werden. Wenn man auf diese Option verzichtet, dann entspricht das Ergebnis einem Kamera-Binning 2.

Zur Komposition des Farbbildes wird in Siril der Menü-Punkt „RGB-Zusammensetzung“ gewählt und die Ergebnisdateien der 3 Farbkanäle ausgewählt. Das zweite Skript unten erledigt die Registrierung und Montage der Farbkanäle automatisch.

bayer_4


Hier ist ein Beispiel-Skript mit der oben dargelegten Prozedur:

############################################
# Script for Siril 1.0
# May 2022
# Joachim Stroiczek
#
# compute lights by using master flat / master bias / master dark
# superpixel-algorithm, bin1 result
# for ZWO cameras (green = CFA_0 and CFA_3, red = CFA_1, blue = CFA_2
# your picture directory must contain those folders: darks, darkflats, flats, lights
#
############################################

requires 1.0.0

cd
[path to the directory where the pictures are located]

#preprocess darks
cd darks
convert dark_
seqsplit_cfa dark_

#build master-dark
stack CFA_0_dark_ med -out=CFA_0_dark_stacked
stack CFA_1_dark_ med -out=CFA_1_dark_stacked
stack CFA_2_dark_ med -out=CFA_2_dark_stacked
stack CFA_3_dark_ med -out=CFA_3_dark_stacked
cd ..

#preprocess darkflats
cd darkflats
convert darkflat_
seqsplit_cfa darkflat_

#build master-dark
stack CFA_0_darkflat_ med -out=CFA_0_darkflat_stacked
stack CFA_1_darkflat_ med -out=CFA_1_darkflat_stacked
stack CFA_2_darkflat_ med -out=CFA_2_darkflat_stacked
stack CFA_3_darkflat_ med -out=CFA_3_darkflat_stacked
cd ..

#build master-flat
cd flats
convert flat_
seqsplit_cfa flat_
calibrate CFA_0_flat_ -bias=../darkflats/CFA_0_darkflat_stacked
calibrate CFA_1_flat_ -bias=../darkflats/CFA_1_darkflat_stacked
calibrate CFA_2_flat_ -bias=../darkflats/CFA_2_darkflat_stacked
calibrate CFA_3_flat_ -bias=../darkflats/CFA_3_darkflat_stacked

stack pp_CFA_0_flat_ med -out=CFA_0_flat_stacked
stack pp_CFA_1_flat_ med -out=CFA_1_flat_stacked
stack pp_CFA_2_flat_ med -out=CFA_2_flat_stacked
stack pp_CFA_3_flat_ med -out=CFA_3_flat_stacked
cd ..

#preprocess lights
cd lights
convert light_
seqsplit_cfa light_
calibrate CFA_0_light_ -dark=../darks/CFA_0_dark_stacked -flat=../flats/CFA_0_flat_stacked
calibrate CFA_1_light_ -dark=../darks/CFA_1_dark_stacked -flat=../flats/CFA_1_flat_stacked
calibrate CFA_2_light_ -dark=../darks/CFA_2_dark_stacked -flat=../flats/CFA_2_flat_stacked
calibrate CFA_3_light_ -dark=../darks/CFA_3_dark_stacked -flat=../flats/CFA_3_flat_stacked

#merge the two green channels into one
merge pp_CFA_0_light_ pp_CFA_3_light_ pp_CFA_03_light_

#register with drizzle option to get Bin1 result:
register pp_CFA_03_light_ -drizzle
stack r_pp_CFA_03_light_ rej s 2 2 -norm=addscale -weight_from_wfwhm
register pp_CFA_1_light_ -drizzle
stack r_pp_CFA_1_light_ rej s 2 2 -norm=addscale -weight_from_wfwhm
register pp_CFA_2_light_ -drizzle
stack r_pp_CFA_2_light_ rej s 2 2 -norm=addscale -weight_from_wfwhm

#save rgb-channels
load r_pp_CFA_1_light_stacked
save ../result_r
load r_pp_CFA_03_light_stacked
save ../result_g
load r_pp_CFA_2_light_stacked
save ../result_b

cd ..



Bevor man die Bilder wieder zu einem Farbbild zusammenfasst, sollten diese sauber aufeinander registriert werden. Per Skript sieht das dann so aus:


############################################
# Script for Siril 1.0
# May 2022
# Joachim Stroiczek
#
# register color layers and compose to RGB
# your picture directory must contain this empty folder: register
#
############################################

requires 1.0.0

cd [path to the directory where the pictures are located]

load result_r
cd register
save r01
cd ..

load result_g
cd register
save r02
cd ..

load result_b
cd register
save r03

convert reg_
register reg_

load r_reg_00001
cd ..
save rr_result

cd register
load r_reg_00002
cd ..
save rg_result

cd register
load r_reg_00003
cd ..
save rb_result

rgbcomp rr_result rg_result rb_result -out=r_result_RGB
load r_result_RGB


Für o.g. Skripte sind folgende Unterverzeichnisse erforderlich
  • lights
  • darks
  • flats
  • darkflats
  • register

Wenn die Bayer-Matrix der eigenen Kamera anders als hier dargestellt ist, dann muss das Skript entsprechend angepasst werden.

Das Skript ist recht speicher- und rechenintentiv, aber vielleicht eine Anregung für eigene Experimente.

Hier können die Skripte gelanden werden: