Wenn Sie mit einem Smartphone oder einer Digitalkamera in einem dunklen Raum mit starkem Kontrast wie Dämmerung, Nachtansicht, Hintergrundbeleuchtung oder Außenlicht aufnehmen, ist der helle Teil möglicherweise weiß oder der dunkle Teil schwarz. Wurdest du jemals enttäuscht? Dies ist ein Phänomen, das auftritt, weil die Abstufung in hellen und dunklen Bereichen unzureichend ist. Dieses Mal werde ich ein Bild mit hohem Dynamikbereich erstellen, indem ich ein helles und ein dunkles Bild auf gute Weise synthetisiere.
Informationen zum Bau der Umgebung finden Sie ab sofort hier. Umgebungskonstruktion von OpenCV 3 und Python 3
Drei JPEG-Bilder mit zwei verschiedenen Belichtungen. Für eine schöne Komposition wird empfohlen, die Kamera zu fixieren, die Blende gleich einzustellen, nur die Belichtungszeit zu ändern und kontinuierlich zu fotografieren.
Bild von OpenCV verarbeitet.
hdr.py
# -*- coding: utf-8 -*-
import cv2
import numpy as np
#Lesen Sie 3 Bilddateien
img_fn = ["img1.jpg ", "img2.jpg ", "img3.jpg "]
img_list = [cv2.imread(fn) for fn in img_fn]
#Stellen Sie die Belichtungszeit für 3 Bilder ein
exposure_times = np.array([0.2, 0.05, 0.0125], dtype=np.float32)
#HDR-Synthese nach der Debevec-Methode
merge_debvec = cv2.createMergeDebevec()
hdr_debvec = merge_debvec.process(img_list, times=exposure_times.copy())
tonemap1 = cv2.createTonemapDurand(gamma=2.2)
res_debvec = tonemap1.process(hdr_debvec.copy())
#HDR-Synthese nach der Robertson-Methode
merge_robertson = cv2.createMergeRobertson()
hdr_robertson = merge_robertson.process(img_list, times=exposure_times.copy())
tonemap2 = cv2.createTonemapDurand(gamma=2.2)
res_robertson = tonemap2.process(hdr_robertson.copy())
#HDR-Synthese nach der Mertens-Methode
merge_mertens = cv2.createMergeMertens()
res_mertens = merge_mertens.process(img_list)
#In 8-Bit-Daten konvertieren
res_debvec_8bit = np.clip(res_debvec*255, 0, 255).astype('uint8')
res_robertson_8bit = np.clip(res_robertson*255, 0, 255).astype('uint8')
res_mertens_8bit = np.clip(res_mertens*255, 0, 255).astype('uint8')
#Bild in Datei speichern
cv2.imwrite("ldr_debvec.jpg ", res_debvec_8bit)
cv2.imwrite("ldr_robertson.jpg ", res_robertson_8bit)
cv2.imwrite("fusion_mertens.jpg ", res_mertens_8bit)
Wenn die Anzahl der Fotos 3 und die Belichtung -2, 0, +2 beträgt, ist dies wie folgt.
img_fn = ["img1.jpg ", "img2.jpg ", "img3.jpg "]
exposure_times = np.array([0.2, 0.05, 0.0125], dtype=np.float32)
Wenn Sie 5 Fotos haben und die Belichtung -2, -1, 0, +1, +2 beträgt, ändern Sie diesen Teil wie folgt.
img_fn = ["img1.jpg ", "img2.jpg ", "img3.jpg ", "img4.jpg ", "img5.jpg "]
exposure_times = np.array([0.2, 0.1, 0.05, 0.025, 0.0125], dtype=np.float32)
Dieses Mal konnten wir mit der Martens-Methode ein leistungsstarkes Bild ohne Parameteranpassung synthetisieren. Ich habe verschiedene Dinge mit anderen Beispielbildern [1] ausprobiert, aber unter den dreien sah die Martens-Methode am besten aus. .. Als HDR-bezogene Funktionen bietet OpenCV auch Funktionen zur Anpassung der Tonkarte (Drago, Durand, Reinhard, Mantiuk) und Kalibrierungsfunktionen (Debevec, Robertson). Ich habe festgestellt, dass OpenCV für eine automatische und ziemlich gute Komposition verwendet werden kann, daher möchte ich es in einigen Fällen verwenden.
Recommended Posts