Pazartesi, Kasım 25, 2024
Ana SayfaNesnelerin İnternetiYapay ZekaOpenCV Python'da Basit Bir HDR Uygulaması

OpenCV Python’da Basit Bir HDR Uygulaması

HDR görüntüler, farklı pozlamalara sahip birden fazla resmin bilgilerini kapsar. Işık kaynağının eşit olmadığı bir sahnede, tek bir çekim görüntünün belirli alanlarını aşırı pozlayabilir ve artan parlaklık nedeniyle ayrıntılar kaybolabilir. Tersine, bu resim aynı zamanda bilgi kaybına yol açacak şekilde az pozlanmış alanlar da sunabilir.

Bir HDR görüntüsü oluşturmak için aşağıdakilere ihtiyacınız olacak:

  • Farklı pozlamalarla fotoğraf çekin. Minimum 2, genellikle 3, 3’ten fazla görüntü kullanabilirsiniz, ancak çok fazla CPU kaynağı alacaktır.
  • Görüntüleri hizalayın. Tripod kullansanız bile bu adımı uygulamanız gerekecektir (piksel seviyesinde hizalamadan bahsediyoruz). Resminizi düzgün şekilde hizalamamak, HDR resminizde yapaylıklara ve “hayaletlere” yol açacaktır.
  • Hizalanmış görüntüleri bir araya getirin.
  • Birleştirilmiş görüntü üzerinde ton eşleme gerçekleştirin. Doğada mümkün olan minimum parlaklık sıfırdır, ancak maksimum 255 ile sınırlı değildir, aslında bunun bir sınırı yoktur, sonsuz olabilir.
  • Bu nedenle üçüncü adımda elde edilen görüntüyü (0,255) aralığına eşlememiz gerekiyor. Bu, ton haritalama ile başarılabilir.

Örnek

import cv2 as cv
import numpy as np
# Loading exposure images into a list
img_fn = [r"C:\Users\felipe.cunha\Documents\venv\HDRTest\100.jpg", r"C:\Users\felipe.cunha\Documents\venv\HDRTest\250.jpg", r"C:\Users\felipe.cunha\Documents\venv\HDRTest\500.jpg"]
img_list = [cv.imread(fn) for fn in img_fn]
exposure_times = np.array([100, 250, 500], dtype=np.float32)
# Merge exposures to HDR image
merge_debevec = cv.createMergeDebevec()
hdr_debevec = merge_debevec.process(img_list, times=exposure_times.copy())
merge_robertson = cv.createMergeRobertson()
hdr_robertson = merge_robertson.process(img_list, times=exposure_times.copy())
# Tonemap HDR imagetonemap1 = cv.createTonemap(gamma=2.2)
res_debevec = tonemap1.process(hdr_debevec.copy())
# Exposure fusion using Mertens
merge_mertens = cv.createMergeMertens()
res_mertens = merge_mertens.process(img_list)
# Convert datatype to 8-bit and save
res_debevec_8bit = np.clip(res_debevec*255, 0, 255).astype('uint8')
res_mertens_8bit = np.clip(res_mertens*255, 0, 255).astype('uint8')
cv.imwrite(r"C:\Users\felipe.cunha\Documents\venv\HDRTest\ldr_debevec.jpg", res_debevec_8bit)
cv.imwrite(r"C:\Users\felipe.cunha\Documents\venv\HDRTest\fusion_mertens.jpg", res_mertens_8bit)

 

Debevec yöntemi.

 

Merten yöntemi.

Sonuç

HDR’nin temellerini ele aldık. Bu teknik, özellikle yetersiz ve fazla pozlanmış alanları olan geniş bir görüş alanındaki özellikleri konumlandırmanız gereken durumlarda yardımcı olur.

RELATED ARTICLES

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz

Bizi Takip Edin

4,200BeğenenlerBeğen
10,000TakipçilerTakip Et
296TakipçilerTakip Et
1,400AboneAbone Ol

BÜLTENİMİZE ABONE OLUN

Popüler