Dr. Baranyai László, fénykép

Dr. Baranyai László

 

Színes kép szürkére konvertálása

aug 1, 19:38, |

 

A digitális képfeldolgozás egyik gyakori lépése a szürkére konvertálás. Sok esetben a vörös, zöld és kék színkomponensek átlagolásával végzik. Ennél jobb megközelítés a luminancia vagyis fényerő meghatározása. A konvertáláshoz GNU Octave programot készítettem.

Luminancia és gamma

A fényerő számítása során az emberi szem érzékenységét figyelembe véve a színkomponensek eltérő súllyal szerepelnek. Mint minden normálásnál, a súlyok összege itt is 1,00 kell legyen.

L = 0,2126 × R + 0,7152 × G + 0.0722 × B

Ezen túlmenően az eredetileg CRT (katódsugárcsöves) monitorok színkorrekciójához használt u.n. gamma függvény további szabályozási lehetőséget ad. Valójában egy gamma nevű kitevőt állíthatunk, amely alapértelmezetten 1.0 (nincs korrekció) és kisebb értéknél sötétebb, nagyobb értéknél világosabb képet eredményez. A kapcsolat nem lineáris:

L = 0,2126 × Rγ + 0,7152 × Gγ + 0.0722 × Bγ

Ennek az összetettebb függvénynek a megvalósítása:

%% Luminosity (Grayscale) transformation of truecolor images
%% RV  = result image matrix
%% img = input image matrix
%% gm  = gamma, optional, default = 1 if not present
function RV = imglumin(img,gm=1)
 [Height,Width,Layers] = size(img);
 RV = zeros(Height,Width);
 if Layers == 3
  RV = 0.2126*img(:,:,1).^gm + 0.7152*img(:,:,2).^gm + 0.0722*img(:,:,3).^gm;
 else
  error("Non-color image matrix!");
 endif
endfunction

Az előző bejegyzésben is látott udvar képét választottam mintának:

Henryx City - teszt kép
Teszt kép (Henryx City udvar)

A szürkére konvertálás gamma = 1 értéknél, vagyis korrekció nélkül:

octave:1> pic = imread("test01.jpg");
octave:2> imshow( imglumin(pic) )

Szürke teszt kép, gamma=1
Szürke teszt kép, gamma=1

octave:3> imshow( imglumin(pic,0.8) )

Szürke teszt kép, gamma=0.8
Szürke teszt kép, gamma=0.8

octave:4> imshow( imglumin(pic,1.2) )

Szürke teszt kép, gamma=1.2
Szürke teszt kép, gamma=1.2

Tekintettel a kitevő jellegére, érdemes óvatosan megválasztani a korrekciós paramétert. Határozottan nem lineáris a viselkedése. Fontos kiegészítenem a kódot azzal, hogy ez a gamma paraméter - bár hasonló funkciót lát el -, számszerűen nem azonos a gamma korrekció néven ismert szabványos transzformációval. Arról bonyolultsága miatt a következő bejegyzésben írok. Másolja ki a kódot és próbálja ki! Jó szórakozást!