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

Dr. Baranyai László

 

Színes kép normálása GNU Octave programmal

júl 26, 19:54, |

 

A képfeldolgozás egyre népszerűbb technika roncsolásmentes vizsgálatokhoz, hiszen csak egy fényképet kell készíteni. Praktikusan minden, ami látható vagy láthatóvá tehető, az mérhető is. Szerencsére ehhez nem mindig kellenek drága szoftverek. A kezdő lépéseket megtehetjük Scilab vagy GNU Octave programokkal is.

GNU Octave

A kettő közül most a GNU Octave környezetet mutatom be. Nagyon hasonlít a Matlab® programozásához, de itt nem igazán számíthatunk fejlett grafikus kezelőfelületre vagy toolboxokra. Az elkészített függvényeket ".m" szövegfájlokban tárolhatjuk.

A képfeldolgozást az alábbi udvar képen - a Western Farm bemutatásból származik - és annak normálásán kezdhetjük. A lineáris normálás során minden képpontot úgy módosítunk, hogy a színkomponensekre R+G+B = 1 igaz legyen. Nyilván a megjelenítéshez 0-255 tartományra transzformáljuk.

Henryx City - teszt kép

A feladat elvégzéséhez a következő imgnorm() nevű függvényt hozzuk létre:

%% Linear normalization of truecolor images
%% RV  = result image matrix
%% img = input image matrix
function RV = imgnorm(img)
 [Height,Width,Layers] = size(img);
 if Layers == 3
  RV = img;
  for y = 1:Height
   for x = 1:Width
    s = sum( img(y,x,:) );
    p = 255.0/(s+1);
    RV(y,x,:) = p*img(y,x,:);
   end
  end
 else
  error("Non-color image matrix!");
 endif
endfunction

A fenti megoldásban pixelenként történik a számítás. A nullával osztás elkerülése érdekében az intenzitás összeghez +1 kerül. A kódot mentsük el imgnorm.m néven. Használata egyszerű:

octave:1> PIC = imread("test01.jpg");
octave:2> imshow( imgnorm(PIC) )

Az eredménye pedig:

Henryx City - normált teszt kép

A normálás célja a domináns szinek kiemelése. Az udvar fotóján például remekül azonosíthatóak a zöld fák. Ha kedvet kapott a fejlesztéshez, vagy egyéb ötletei vannak, másolja ki a fenti kódot és jó munkát!