Éldetektálás Matlabban

Matlabban a gradiens detektorok megvalósításáért az fspecial(), az éldetektorok megvalósításáért pedig az edge() függvény felelős. Ne feledjük, hogy az fspecial() függvény csak a  konvolúciós maszkot állítja elő, magát a képműveletet az imfilter() függvénnyel végezhetjük el. Az függvényeket különböző paraméterekkel meghívva nyerhetünk ki gradiens magnitúdó vagy pedig élképet. Fontosnak tartjuk itt is megjegyezni, hogy a gradiens magnitúdó kép és az élkép nem ugyanaz. A gradiens magnitúdó képen valós intenzitások szerepelnek, míg az élkép egy bináris kép.

Az fspecial() gradienst számoló opciói:

  • log: Laplacian of Gaussian (paraméterként megadható a szűrő mérete és a szigma érték)
  • prewitt: Prewitt-féle gradiens detektor
  • sobel: Sobel operátor (csak vízszintes irányút határoz meg)

A függőleges irányú gradiens operátort a vízszintes operátor transzponáltjaként kapjuk.

Az edge() függvénynek a következő paramétereket lehet megadni:

  • sobel: Sobel gradiens detektor ( további paraméterként küszöb és irány is megadható)
  • prewitt: Prewitt gradiens detektor (további paraméterként küszöb és irány is megadható)
  • roberts: Roberts-féle gradiens detektor (további paraméterként küszöb és egyéb opciók adhatók meg)
  • log: Laplacian-of-Gaussian (LoG) függvény (további paraméterként a küszübérték és a szigma érték adható meg)
  • zerocross: a közös nulla-átmeneteket kezeli
  • canny: Canny-féle éldetektor (további paraméterként megadható a küszöb érték és a szigma paraméter is)

Fontos megjegyezni, hogy az említett képműveletek szürkeárnyalatos képekre működnek.

Lássunk néhány példát!

>> img = imread('Columbo.JPG');
>> grad_sobel = fspecial('sobel');
>> img_grad_sobel = imfilter(img, grad_sobel);
>> img_edge_sobel = edge(img, 'sobel');

 eredeti kép img_grad_sobel  img_edge_sobel

 

Nézzünk egy példát a legelterjedtebb éldetektorra is! A példában több különböző küszöbérték mellett szemléltetjük az eredményt.

>> img = imread('haz_auto_gray.jpg');
>> img_canny_02 = edge(img, 'canny', 0.2);
>> img_canny_05 = edge(img, 'canny', 0.5);
>> img_canny_1 = edge(img, 'canny', 1.0);

eredeti

haz_auto_canny_02

haz_auto_canny_05 haz_auto_canny_1

 

 Próbáljátok ki a többi opciót is!