Skip navigation

Automatikus kontraszt széthúzás

Működése

Az automatikus kontraszt széthúzás esetén egy százalékos paraméter értéket adunk meg, amely meghatározza, a színek (pontosabban csatornánként az intenzitásértékek) közül az összes képpontszámhoz képest mennyit szeretnénk "eldobni". Ez fele-fele arányban a legalacsonyabb és legmagasabb értékeket érinti. Ilyen funkcióval rendelkeznek általában a fotószerkesztő programok is. Egyszerű használhatóságát az biztosítja, hogy például egy 5%-os érték fotók esetén jó eredménnyel járhat.

A százalékos paraméter segítségével igazából egy alsó és felső tartományhatár-értéket számolunk ki, ezután a művelet végrehajtása megegyezik az előző részben látott manuális értékmegadással.

A tartományhatár számítása az alábbi fő lépésekből áll:

  • Kiszámítjuk a képen található képpontok számát (képmátrix szélesség és magasság szorzata).
  • Meghatározzuk a levágandó képpont darabszámot, illetve annak felét (mert az alsó és felső régióból eldobottak összesen adják a kért százalékot).
  • Kiszámítjuk a kép hisztogramját.
  • Elindulunk a hisztogram alacsony intenzitásokhoz tartozó részén, és addig lépkedünk, míg az összegzett hisztogram értékek el nem érik az alsó tartományhatár értékét.
  • Ugyanezt elvégezzük a legmagasabb értéktől visszafelé lépkedve.
  • Az így megkapott határokkal végrehajtjuk a kontraszt széthúzást.

Ezt hajtja végre a 05_04_simple_color_balance_hist.py példaprogram.

A program lehetőséget ad a százalékos érték interaktív módosítására is, és kirajzolja az aktuális RGB hisztogramot. Mivel a széthúzás miatt több intenzitás hiányozni fog a képről, ezért nem vonallal kötjük össze, hanem pontokként reprezentáljuk a hisztogramokat. Megjegyezzük, hogy a csúszka paraméter érték nem a tényleges levágási értéket adja, hanem annál eggyel nagyobbat az OpenCV trackbar működésének korlátai miatt.