WERBUNG

Manueller Weißabgleich

Knix mit icks

Themenersteller
Guten Tag liebe Leser,

ich stehe vor einem "kleinen" Problem mit dem Weißabgleich.
Ich habe mir ein kleines Python Script geschrieben, welches von meiner Kamera live von dem momentan aufgenommenen Bild die Balance zwischen Blau und Rot findet, um einen möglichst gleichen RGB Anteil in dem Bild zu haben.

Sowohl als RGB Bild und YUV Bild ist mir dies gelungen (allerdings benötigt yuv bei gleicher Auflösung, sehr viel länger zum finden der Blau und Rot Anteile)(steckt ja auch etwas mehr Rechenarbeit hinter ;))

Aber, mein "kleines" Problem jetzt ist, dass ich aus einem Bild im raw Format einen Weißabgleich durchführen möchte. Was mich hier etwas verwirrt ist, dass im raw Format angeblich 10Bit Farbwerte angegeben sein sollen, bisher hab ich nur mit 8Bit Farbwerten gearbeitet.

Meine Umgebung sind: Ein Raspberry Pi 2 B+ mit einer Raspicamera.

Nun meine Frage an euch: Wie ist es möglich, aus einem verlustfreien Bild im raw Format einen Weißabgleich durchzuführen?
Ich stelle mir da vor, dass ich wahrscheinlich dann Stunden damit verbringen werde, dem Raspberry Pi zuzuschauen, wie er akkert.
Gibt es vielleicht eine andere Möglichkeit den WA schneller durchzuführen?

Vielen Dank für eure Antworten. Wenn ihr noch Fragen bezüglich Script oder Umgebung habt, gerne her damit :)
 
Nun meine Frage an euch: Wie ist es möglich, aus einem verlustfreien Bild im raw Format einen Weißabgleich durchzuführen?
Da Du aus dem Raw die Daten in Form der Bayer-Matrix erhälst, sollte zwar das eigentliche Berechnen anhand der von die schon erstellten Berechnung aus R und B kein Problem sein.

Für mehr wie 8 Bit je Farbkanal muss man das Raw halt selber dekodieren anstatt das "Grau"-Bild der Sensordaten aus dcraw abzugreifen (außer, dcraw kann dort auch 16 Bit ausgeben). Wie das für Deine Kameras geht kann man sich in dcraw abschauen. Die Dekodierung geht sehr schnell, selbst bei komprimierten NEF-Files.

Ob Du dann aber mit dem ermittelten Wert irgendwas anfangen kannst, wenn Du danach das Raw nicht weiter selber in ein RGB-Bild umwandelst, wage ich zu bezweifeln.

Schon die Angaben zur Farbtemperatur und zum Bildton unterscheiden sich je Raw-Konverter. Selbst, wenn Du also aus den Werten irgendwie eine Farbtemperatur errechnest, wird die nur zufällig zu Deinem bevorzugten Raw-Konverter passen

Was soll da überhaupt für ein Wert bei heraus kommen?

Beim RGB-Bild vermutlich irgeindein Korrekturwert, den Du auf jeden Farbkanal des RGB-Pixel anwendest. Aber wie stellst Du Dir das bei Raws vor?
 
Gibt es vielleicht eine andere Möglichkeit den WA schneller durchzuführen?
Ja, Augenmaß, das ist durch keine Automatik zu ersetzen. Es gibt Bilder mit hohen Blau
oder Gelbanteilen die Automatiken irreführen können. Natürlich gibt es automatische
WB die auch ne gute Trefferquote haben, verlassen kann man sich darauf jedoch nie.
Die automatische grün - magenta Abstimmung wird ebenfalls immer wieder durch grünlastige Naturfotos veräppelt.
Auch "möglichst gleiche RGB Anteile" führen zu Fehlfarben und auf die Spitze getrieben zur Entsättigung.
Letztendlich ist es doch das Auge welches die Farbbalance als richtig oder falsch beurteilt.
Eine meßtechnisch richtige Farbbalance, bspw. durch Pipette, fürt bei Motiven wie Sonnenuntergängen o.Ä. zu stimmungslosen Bildern.
 
Vorab, vielen Dank für eure schnellen Antworten :)

@Asretouch:

klar ist das Auge was dies angeht am zuverlässigesten, aber dennoch würde ich gerne einen Algorithmus bauen, der annäherungsweise zuverlässig arbeitet.

@GymfanDe:

Genau darum geht es ja. Sowie ich das Format richtig interpretiert habe, hat man diesen 10Bit Farbwert von RGGB so aufgeteilt, dass im ersten Byte die ersten 8Bit kommen von R, dann im 2ten 3ten und 4ten von den adneren und im 5ten dann kommen die restlichen Informationen.
Um das etwas zu verdeutlichen:
Byte|
1 R je 8Bit (von 10 bis 3)
2 G
3 G
4 B
5 RR GG GG BB (hier die fehlenden Bits 2 und 1)

Mein Ziel ist es, ein Bild zu bekommen, welches ohne Verluste ideal zur Weiterverarbeitung der Bildverarbeitung ist, um z.B.: bestimmte Muster auf Bildern zu erkennen.

Ich weiß, dass das auch mit dem ganz normalen Formaten auch möglich ist und viel einfacher zu realisieren. Doch ich will auf das I-Tüpfelchen und mich an den Rohdaten eines Bildes versuchen.
 
Mal so ne Frage für den Anfang:

Wie ist es denn Möglich, einen Weißabgleich von einem schon erstellten Bild zu machen?
Ich hatte das vorher über einen stream laufen und hab von dem Bild den Mittelwert von jeweils R, G und B gebildet und anhand dessen dann den Blau oder Rot Wert angepasst. Doch wie genau funktioniert es, wenn ich nur das Bild habe und keine neue Aufnahme mache? (Automatisch und nicht mit Augenmaß ;))

Ergänzung: Wenn die Kamera ihren Automatischen Abgleich macht, dann sucht sie ja im Bild den hellsten Punkt und interprtiert diesen als Weiß. Doch was passiert dann mit den anderen Punkten, welcher Faktor wird wo wiemit berechnet um die Farben dementsprechend anzupassen?

Dazu habe ich etwas gefunden: https://www.medien.ifi.lmu.de/lehre/ss12/cg2/uebung/cg2-ss2012-blatt3.pdf
Aufgabe 1) Teil b ist genau das, was ich meine^^
Leider habe ich aus den Vorlesungsunterlagen von dieser Webseite keine wirklich gute Erklärung entnehmen können (und für mein Problem diese Hochschule zu besuchen wäre etwas zu hoch gegriffen)... vielleicht könntet ihr mir da weiter helfen?
 
Zuletzt bearbeitet:
DAS RAW-Format gibt es nicht, da musst Du erst mal Deine Kamera (und mit Pech auch noch das Modell) exakt definieren. Mich intereesiert nur Nikon/NEF, und da ist es mit verlustlos komprimierten NEFs anders (ein dekodierter Wert entspricht einem 12 oder 14 Bit Sensorelement, siehe DCRaw-Sourcen)

Mittlerweile scheint es mir aber, als ob es um irgendeine Live-Videokamera zu gehen scheint, die am RaspPi hängt (ich war von einer DSLR oder anderen Fotokamera ausgegangen). Damit bin ich raus, keine Ahnung, was die für ein seltsames Format liefert.

Wie ist es denn Möglich, einen Weißabgleich von einem schon erstellten Bild zu machen?
Ohne passende Metadaten oder entsprechende Annahmen zum Bildinhalt m.M.n. garnicht. Die Annahmen können passen, müssen es aber nicht.

Wenn es sich um en passendes, dafür angefertigtes Bild handelt (wie es für den manuellen Weissabgleich in einigen Kameras genutzt wird), dann geht die Kamera schlicht davon aus, dass das von Dir aufgenommene Motiv überwiegend (oder im Idealfall vollständig) einfarbig grau ist (was bei einer Graukarte der Fall ist) und erreichnet aus der Farbverschiebung die Korrekturwerte.

Ergänzung: Wenn die Kamera ihren Automatischen Abgleich macht, dann sucht sie ja im Bild den hellsten Punkt und interprtiert diesen als Weiß.
Tut sie das? M.M.n. nicht. da ich aber keine Ahnung habe, wie eine moderne Kamera sowas exakt macht, schenke ich mir die Speklationen auf Basis meines eher veralteten Halbwissens.

Meine Nikons haben u.A. dafür einen gesonderten RGB-Sensor, der aber auch für anderes verwendet wird. Einen WA aus einem bereits aufgenommenen Bild kann man mit ihnen, im Gegensatz zu meinen alten Canon-DSLRs, leider nicht berechnen lassen.

Dazu habe ich etwas gefunden: https://www.medien.ifi.lmu.de/lehre/ss12/cg2/uebung/cg2-ss2012-blatt3.pdf
Aufgabe 1) Teil b ist genau das, was ich meine^^
Da steht ja schon so schön: "Im Folgenden wählen Sie einfach selbst einen geeigneten Weisspunkt aus". Also manuell und nicht irgendwie automatisch (wäre dann mit Sicherheit ein Mittelwert über die, wie auch immer automatisch gewählten Pixel).

Irgendwas könnte ich mir da schon ausdenken, wie z.B.
- einige einfarbiege, ansatzweise graue Bildteile ermitteln
- aus genügenden dieser Bildteile die Korrekturwerte ermitteln und mitteln, gewichten oder was Dir noch so einfallen mag

Dann kommt irgedenein Korrekturwert je Farbkanal heraus, der sich auf das RGB-Bild anwenden lässt (das funktioniert sicherlich auch in jedem anderen Farbraum).

Wie Du aber jetzt daraus eine Korrektur für ein Raw-Bild bestimmen willst, wüsste ich nicht. Das geht nach meinem Verständnis nur über die Grauwerte, also über das bereits entwickelte Bild.

Hier noch ein anderer Vorschlag:
http://web.stanford.edu/~sujason/ColorBalancing/robustawb.html
Wie toll sowas funktioniert, sieht man ja schön am drittletzten und vorletzten Bild. Vermutlich auch am letzten, aber vieleicht war der Himmel dort ja so rötlich.
 
Ich weiß, dass das auch mit dem ganz normalen Formaten auch möglich ist und viel einfacher zu realisieren. Doch ich will auf das I-Tüpfelchen und mich an den Rohdaten eines Bildes versuchen.
Letztlich liest es sich für mich so, dass du einen eigenen, für deine Bedürfnisse hin abgespeckten Rawkonverter schreiben willst. Ob es für diene Anwendung sinnvoll ist, oder nicht sei mal dahingestellt.
Du könntest aber durchaus etwas abgucken, wenn du mal in Open-Source-Programme wie dcraw schaust. ...ich glaube dcraw hat auch einen automagischen WA.
 
WERBUNG
Zurück
Oben Unten