Wählen Sie die Helligkeit (Belichtung) aus dem HDR-Bild

8

Ich bin derzeit auf einem Video-Projekt von Bildern fest.

Problem:

Ich extrahiere Bilder von UE4, aufgrund eines Fehlers werden nicht alle Lichter beim Rendern des Screenshots berücksichtigt. Ausgabe sind HDR-Bilder. Ich möchte eine bessere Helligkeit erzielen, da das exportierte Bild sehr dunkel ist, wie bei der ersten Belichtung.

Mit dem "exposure bias" -Parameter in UE4 kann ich eine wirklich gute Helligkeit meiner Szene erreichen, kann diesen Parameter aber nicht auf das Screenshot-Rendering anwenden:

Versucht:

Mit Tonemapper Algorithmus (speciafically cv::TonemapDrago ) kann ich ein besseres Ergebnis erzielen:

Das Hauptproblem meines Falles des Tonkartenalgorithmus ist, dass die globale Helligkeit abhängig von der Leuchtkraft der Flächen geändert wird: Im zweiten Bild fügt das Fenster viel Licht hinzu, so dass der Algorithmus die gesamte Leuchtkraft absenkt bedeuten. In dem gerenderten Video ist der Lichtwechsel sehr brutal.

Ich habe versucht, die Helligkeit und die Sättigung ohne Erfolg zu ändern. Ich habe den Code von TonemapDrago geändert, der versucht Konstanten für einige Schritte des Algorithmus.

Frage:

Ich würde gerne die Belichtungszeit von einem HDR-Bild wählen. Tonkarte basiert auf mehreren Belichtungszeiten des gleichen Bildes, in meinem Fall nicht interessant.

Jede andere Idee ist willkommen.

BEARBEITEN :

CV :: Mat Tiefe ist 5, Typ ist CV_32FC3

cout << mat.step gib mir 19200

Hier sind 2 Beispiele, die ich benutze, um mein Problem zu lösen:

Erstes Bild

Bild mit Lichtfenster

Bearbeiten 2:

Kann kein .HDR Bild mit Gimp, Event mit dem "explosure blend" Plugin öffnen. Ich bin in der Lage, mit Photoshop genug Ergebnisse zu erzielen. Irgendeine Idee von dem Algorithmus dahinter? Jedes der 6 Tonkarten-Algos von OpenCV erlaubt es, eine Belichtungskorrektur zu wählen.

EDIT 3:

Ich habe den Algorithmus erklärt in diesem tuto für openGL, was mir diesen C + Code gibt :

%Vor%

Wenn ich diesen Algo auf mein .HDR Bild anwendete, bekam ich ein sehr helles Ergebnis, sogar mit einer Korrektur von 1 und 1 für Gamma und Belichtung:

Beim Lesen des Codes stimmt etwas nicht, weil 1 und 1 als Argument das Bild nicht verändern sollten. Das wurde behoben, die Antwort wurde gepostet. Vielen Dank an @ user3896254 (Ge sah es auch im Kommentar)

    
Marcassin 14.12.2015, 23:18
quelle

3 Antworten

2

Erwägen Sie, Retinex zu verwenden. Es verwendet ein einzelnes Bild für die Eingabe und ist in GIMP enthalten, also ist es einfach, herumzuspielen, außerdem kann man seinen Quellcode bekommen (oder selbst rollen, was sowieso ziemlich einfach ist). Da Sie anstelle von Fotos gerendert haben, gibt es kein Rauschen und Sie können die Farben theoretisch an Ihre Bedürfnisse anpassen.

Aber wie @ mark-ransom bereits gesagt hat, können Sie Probleme haben, Informationen von Ihrer gerenderten Ausgabe wiederherzustellen. Du hast gesagt, du hast HDR-Bilder als Renderausgabe, aber ich bin mir nicht sicher, was du meinst. Ist es ein einzelnes RGB-Bild? Wie groß ist die Farbtiefe jedes Kanals? Ich habe versucht, Retinex auf Ihre Probe anzuwenden, aber offensichtlich sieht es wegen der Komprimierung und der begrenzten Reichweite, die vor dem Speichern angewendet wurde, nicht gut aus. Wenn Ihre Ausgabe eine hohe Reichweite hat und nicht komprimiert ist, erhalten Sie bessere Ergebnisse.

EDIT: Ich habe versucht, Retinex auf Ihre Eingabe und es erwies sich nicht sehr gut - die hellen Teile des Bildes (Lampen / Fenster) eingeführt hässliche dunkle Halos um sie herum.

In diesem Fall sieht die einfache Tonemapping- und Gammakorrektur viel besser aus. Ihr Code war fast in Ordnung, Sie hatten nur einen kleinen Tippfehler: anstelle von cv::pow(exp, 1.0f / gamma, exp); hättest du v::pow(mapped, 1.0f / gamma, exp);

haben sollen

Ich habe mich mit Ihrem Code herumgeschlagen und festgestellt, dass dieses Tonemapping die Farbsättigung zu verschlechtern scheint. Um dies zu überwinden, führe ich es nur auf dem V-Kanal des HSV-Bildes durch. Vergleichen Sie die Ergebnisse selbst (links - Vollraumtonemapping, rechts - nur V): Beachten Sie die Bodenfarbe, den Himmel im Fenster und die gelbliche Lichtfarbe, die mit diesem Ansatz erhalten geblieben ist.

Hier ist der Vollständigkeit halber ein vollständiger Code:

%Vor%     
alexisrozhkov 17.12.2015, 15:11
quelle
0

Welche Art von Szenenbeleuchtung verwenden Sie gerade? Es sieht so aus, als ob du Punktlichter verwendest, wo die Glühbirnen wären, aber sie sind nicht hell genug. In Ihrer nicht gerenderten Szene wird die Szene volle Helligkeit haben. In deiner gerenderten Szene wirst du Dunkelheit bekommen.

Ich würde vielleicht wenigstens ein minimales Himmelslicht empfehlen, so dass Sie immer etwas Licht über Ihre Szene haben (es sei denn, Sie haben Bereiche mit tatsächlicher Dunkelheit)

    
Jesse Williams 17.12.2015 14:51
quelle
0
%Vor%

Dieser Algorithmus ist ein Tonmapper, der versucht, die Verzerrung der Belichtung in einem HDR zu simulieren Wenn du es in openCv 3.0 verwenden willst, vergiss nicht mit -1 als letztes Argument von imread cv::Mat img = cv::imread("mypicture.HDR", -1);

zu öffnen

    
Marcassin 17.12.2015 19:43
quelle