Élek detektálása Vámossy Zoltán 2004 (Gonzales, Woods, Forsyth, Rehg, Hanson, Trucco, Verri, Thrun, Bradski anyagai alapján)
Vámossy Zoltán (Umeai Egyetem – Finnország) előadásai alapján E. Trucco, A. Verri: Introductory techniques for 3-D Computer Vision (Prentice Hall 1998) Vámossy Zoltán (Umeai Egyetem – Finnország) előadásai alapján This is the lecture 2 in Computer vision and it will include… <switch slide>
2. előadás 4. fejezet (pp. 67-94) 5. fejezet (pp. 95-121) Jellemzők detektálása (Feature detection) Élek (Edges) Sarokpontok (Corners) 5. fejezet (pp. 95-121) Jellemzők osztályozása (Feature classification) Vonalak – szakaszok (Lines) Görbék (Curves) Ellipszisek (Ellipses) Deformálható kontúrok (Deformable contours)
Élek (edges) Mit értünk él alatt? Élek olyan pixelek, ahol, vagy ami körül a kép intenzitás-értékei erőteljesen megváltoznak What is an edge? Does anyone know what an edge is? The definition is ” Edges are pixels at or around which the image values undergo a sharp variation”. <switch slide>
Általános jellemzők #1: élek (edges) C B D A: Hirtelen mélységi változás (discontinuity) B: Felület normálisának változása C: Megvilágítás változása: árnyékok, világítás változás D: Visszaverődésben változás: felület tulajdonság, jelek
Miért fontosak számunkra az élek? A legtöbb elem, objektum, vagy azok árnyékai éleket generálnak Az élek megtalálásával sokszor az objektum alakját és helyét meg tudjuk határozni So, why are we interested in edges? Why do we want to locate edges in a scene? ” Most elements like solid objects, shadows etc create edges”. By using edges, it is possible to find out what an object looks like and locate it.
Tipikus élprofilok Ugrás Rámpa Gerinc Tető Vonal
Hogyan találhatunk éleket?
Élkeresés 101 im = imread('bridge.jpg'); image(im); figure(2); bw = double(rgb2gray(im)); image(bw); gradkernel = [-1 1]; dx = abs(conv2(bw, gradkernel, 'same')); image(dx); colorbar; [dx,dy] = gradient(bw); gradmag = sqrt(dx.^2 + dy.^2); image(gradmag); colorbar colormap(gray(255)) colormap(default)
Az éldetektálás lépései Zajcsökkentés (Noise reduction) Élkiemelés (Edge enhancement) Éldetektálás (Edge detection) Éllokalizálás (Edge localisation) Noise reduction: If you look at the left image, you can see that it is full of noise. By removing the noise (right image) things become much clearer and more easy to detect. Edge enhancement: A filter where its output is large at true edges and low elsewhere. That means a high intensity value at true edges and low intensity value where there is not an edge. Edge localisation: This step decides which values that belong to an edge and which values are noise.
Éldetektálók Canny éldetektáló* Roberts éldetektáló Sobel éldetektáló* Prewitt éldetektáló Kirsch éldetektáló Laplace éldetektáló és a LoG (Marr-Hildreth) Susan él-, sarokpont detektáló Haralick módszere *: a könyvben csak ez van There are many different kinds of edge detection algorithms but most of them give the same result. The book concentrate on two of them and those are Canny and Sobel. These are two of the most common algorithms in Computer Vision.
Definiciók Él-normális = merőleges az élre, a maximális intenzitás-változás iránya, N(i, j) I(i, j) Él-irány = az él iránya, merőleges a normálisra Él-pozíció = ahol a képen elhelyezkedik az él Él-erősség = megmutatja mennyire „jó” egy él. Nagy változás -> nagy erősség Some definitions.
Él-irány, él-normális
Változás detektálás Kép deriváltja Differenciáló szűrők [1 -1] Hátrafele differencia [-1 1] Előrehaladó differencia [1 -1] Központi differencia [-1 0 1]
Deriváltak, differenciák 2D-ben Definició Közelítés Konvoluciós magok
Kép deriváltak Image I
Élnormális megjelenítése figure(5); hold on; image(smooth); colormap(gray(255)); [m,n] = size(gradmag); edges = (gradmag > 0.3 * gmax); inds = find(edges); [posx,posy] = meshgrid(1:n,1:m); posx2=posx(inds); posy2=posy(inds); gm2= gradmag(inds); sintheta = dx(inds) ./ gm2; costheta = - dy(inds) ./ gm2; quiver(posx2,posy2, gm2 .* sintheta / 10, -gm2 .* costheta / 10,0); hold off;
Prewitt és Sobel éldetektálás Kevésbé zajérzékeny (3x3 maszk jobban eltünteti a zajokat) A nagyobb maszkméret miatt a meredek élek több pixel szélesen jelentkeznek Főbb lépések Input: Kép és küszöb Képszűrés Gradiens nagyság számolása Küszöbölés The sobel algorithm takes an image and a sigma as input. It first performs noise reduction using a gaussian kernel and then it is filtered with a another, special kernel. Then calculate the gradient magnitude. If the magnitude for each pixel is greater than a threshold, tao, mark the pixel as an edge.
Sobel operátor -1 -2 -1 0 0 0 1 2 1 -1 0 1 -2 0 2 S1= S2 = -1 -2 -1 0 0 0 1 2 1 -1 0 1 -2 0 2 S1= S2 = Él-erősség, él-irány: Edge Magnitude = Edge Direction = S1 + S2 2 tan-1 S1 S2
Prewitt éldetektor image blurred élek x image blurred élek y átlagolás x irányban Differenciáló szűrő x irányban and results image blurred élek y Átlagolás y irányban Differenciálás Y irányban results and
Sobel éldetektáló image átlagolás x irányban blurred Élek x Differenciáló szűrő x irányban and results image blurred élek y Átlagolás Y irányban Differenciáló szűrés y irányban results and
Sobel éldetektáló Threshold Edges Image I
Sobel éldetektáló
Sobel éldetektáló
Sobel maszk: összefoglalás Sobel maszk szeparálható! Éllel párhuzamos átlagolás
Robert keresztoperátor 1 0 0 -1 0 1 -1 0 + S = [ I(x, y) - I(x+1, y+1) ]2 + [ I(x, y+1) - I(x+1, y) ]2 vagy S = | I(x, y) - I(x+1, y+1) | + | I(x, y+1) - I(x+1, y) |
Robinson iránytű maszk -1 0 1 -2 0 2 0 1 2 -1 0 1 -2 -1 0 1 2 1 0 0 0 -1 -2 -1 2 1 0 1 0 -1 0 -1 -2 2 0 -2 1 1 -1 -1 0 -1
További maszkok Frei & Chen
Laplace Ahol a gradiens maximális, ott a második derivált előjelet vált (0) Elmosódott élek esetén pontosabb lokalizálás Ebben az esetben csak az élek helyét tudjuk meghatározni, az irányát nem Az operátor nem érzékeny az elforgatásra, izotrópikus Zajérzékeny -> Simítás előtte
Gauss simítás + Laplace (LoG) Zajra nagyon érzékeny éldetektálók esetében előbb simítást szoktak alkalmazni Például Gauss szűrőt
Gauss simítás A Gauss szűrő paraméterének hatása növekedésével több pixel kerül az átlagolásba növekedésével a kép jobban el lesz mosva növekedésével a zaj jobban el lesz távolítva
Gauss simítás + Laplace (LoG) Alkalmazhatjuk közvetlenül a Gauss szűrő Laplace-át – második derivált r szerint (Laplacian of Gaussian) – LoG Mexikói kalap
LoG - Marr Hildreth éldetektáló Robusztus Simított kép deriváltját közelíti A 0 átmeneteket kell vizsgálni Stabilabb zérushelyek jelölik az éleket, mert nem meredek éleknél is pontos
Marr Hildreth éldetektor Gauss simítás Laplace gradiens (derivált) Laplace
Marr Hildreth éldetektor (LoG) számítása
LoG Filter Y X
Zéró átmenetek detektálása Négy eset: {+,-} {+,0,-} {-,+} {-,0,+} Zéró átmenetek (slope) számítása {a, -b} -> |a+b|. Éldetektálás zéróátmenet nagyságának küszöbölése
LoG szeparálhatóság Hasonlóan a Gauss szűrőhöz A kétdimenziós Gauss szűrő két egydimenzióssá alakítható n2 szorzás 2n szorzás
LoG szeparálhatóság n2 szorzás 4n szorzás
Szeparálhatóság Gauss szűrő Image g(x) g(y) + LoG szűrő gxx(x) g(x) gyy(y) g(y)
LoG példa
LoG példa
Canny éldetektor John Canny, “Finding Edges and Lines in Images”, Master’s Thesis, MIT, June 1983. “Optimális” maszk – Gaussian szűrő Non-maximum suppression – eltávolítja a maximumra merőleges élgyanús pontokat Hysteresis thresholding – hosszabb kontúrok készítése Subpixel accuracy (eredetiben nincs) – subpixeles pontosság
Ideális éldetektáló Milyen kritériumoknak kell megfelelnie egy ideális éldetektálónak? Megbízható mindent valódi élt detektál nem detektál hibás éleket (zajos kép) Az éleket pontosan lokalizálja Minden élt pontosan egyszer jelez
Canny éldetektor Elsősorban lépcsős élekre A kép Gauss-zajjal terhelt Három lépést tartalmaz Input Image Kiemelés Nonmax_suppression Hysteres._thresh. The Canny Edge detector consists of three steps. An enhancder, supression and thresholding. It takes as input a normal image. Output: Kontúrok listái
I. Canny élkiemelő Az élkiemelő elemei: (Lineáris) konvolúció Gauss szűrővel Gradiens számolás Normális és erősség (nagyság) számítás
I. Canny élkiemelő - megjegyzés 1.lépés: Konvolúció J = I G I = eredeti kép (image) G = Gauss szűrő magja (kernel) Nagyobb szűrő jobban csökkenti a zajt, lassabb, de kevésbé lokalizálja jól az éleket!
I. Canny élkiemelő 2. lépés: Derivált számítás Minden I(i, j) pixelre kiszámoljuk a parciális deriváltakat Megjegyzés: Konvolúció alkalmazása (A kép és a Gauss fgv. konvolúciójának első deriváltja ekvivalens a kép és a Gauss fv. első deriváltjának konvolúciójával. Zajszűrés és éldetektálás kombinálható.)
Canny éldetektor – Gauss deriváltja
Canny éldetektor – első két lépés
I. Canny élkiemelő 3. lépés: Erősség és normális meghatározás Élerősség számítás (minden pixelre): Élnormális (orientáció) számítás:
I. Canny élkiemelő - outputja Es = élerősség (milyen jó az él, a gradiens nagyságával arányos) Eo = élorientáció (milyen irányba mutat) A normálist tartalmazza The output is a strength image which shows how good the edges are. The strangth image are built up by the gradient so so bigger the change, the bigger value. The orientation image shows in what direction the edge is heading.Remember that the orientation image contains the normal with respect to the edges in point(i,j)
II. Non-max Suppression Élek ott vannak, ahol a gradiensnek lokális maximuma van A Non-maxima suppression (nem maximumok elnyomása) célja: Fals élpontok eltávolítása, amelyek az élre merőleges irányban vannak Egy vastagságú élekké zsugorítás There can still be local maximas (i.e. false edges), get rid of these false edges by supressing the candidates. It is done by supressing the edges to one pixel.
II. Non-max Suppression-algoritmus 1. Minden (i, j)-re határozzuk meg azt a dk (0, 45, 90, 135) irányt, ami legjobban közelíti az EO(i, j) élnormálist 2. Ha Es(i,j) < legalább egy szomszédjánál a dk irányokban, akkor IN(i,j) = 0 legyen (elnyomás), egyébként IN(i, j) = Es(i,j) Eredmény: IN(i, j) vékonyított éleket tartalmazó kép a nem maximumok eltávolítása után The image IN is a new image which contains the thinned edges.
III. Canny – harmadik lépés oka Fig 4.5 Show Fig. 4.5 The figure shows the strength image after supression. Élkiemelő - balról jobbra =3, =2, =1
III. Hysteresis thresholding Miért szükséges a hysteresis küszöbölés? Ha a küszöb túl alacsony, akkor fals élpontok maradnak A küszöb felett, illetve alatt is lehet maximum erősség Ha az élek értéke a küszöb körül ingadozik, akkor sok szakadás lehet The last step in the edge detection is to threshold out false edges. Using a normal threshold may cause problems. Does anyone know why we can’t apply a regular threshold? If you choose a threshold which is too low, there will still be some false edges left. A real edge might have a value below or obove the edge. With a normal threshold, this edge will be set to zero and then lost. Therefore, apply Hysteres threshold.
Példa
Canny, alacsony threshold
Canny, magas threshold
III. Hysteresis thresholding Definiáljunk két thresholdot Minden IN(i, j) élpontra 1. Keressük meg a következő IN(i, j) élpontot, hogy 2. IN(i, j)-től kiindulva kövessük a lokális maximumok láncát az élnormálisokra merőleges irányban mindaddig, amíg Jelöljünk meg minden maglátogatott pontot (lista) Tehát ha a felső küszöbnél nagyobb, akkor vegyük fel élnek Ha az alsó küszöb alatt van, akkor nem él Ha a kettő között van, akkor vegyük fel élnek, ha egy szomszédos pixel élhez tartozik
III. Hysteresis thresholding Eredmény: A kapcsolódó élpixelek listái
Canny eredmények ‘Y’ or ‘T’ csatlakozási probléma a Canny operátornál
Canny: Sarok effektus
LoG és Canny összehasonlítás Marr-Hildreth és Canny éldetektorok Gauss simítás Derivált számítás x és y irányokban Gradiens nagyság meghatározás Gradiens nagyság küszöbölés Marr-Hildreth és Canny különbségek Marr-Hildreth másodrendű deriváltat használ Marr-Hildreth a zéró átmenetek nagyságát küszöböli
Marr-Hildreth operátor Image 2g(x) Find zero-crossings compute slope Threshold
Canny gx(x,y) gy(x,y) Gradiens nagyság Image Non-maximum suppression Hysteresis thresholding gy(x,y) Gradiens irány
Élpontosítás más módszerei
Ötlet 1: Bilineáris interpoláció Használjunk bilineáris interpolációt szubpixeles pontosság érdekében Gradiens csökkenés: olyan pont keresése, ami maximalizálja S-t
Ötlet 2: Élkövetés Következő pont: Merőleges a gradiensre Használjunk Hysteresis-t
SUSAN algoritmus Konturkeresés nem differenciáló operátorral Smith és Brady ötlete (http://www.fmrib.ox.ac.uk/~steve/susan/susan/node1.html)
SUSAN algoritmus A maszk közepén levő pont a nucleus (középpont) Az USAN egy rövidítés, jelentése: univalue segment assimilating nucleus
SUSAN algoritmus A SUSAN jelentése: smallest univalue segment assimilating nucleus.
SUSAN algoritmus A nucleus és a maszkban lévő pontok eltérése alapján megjelölés: A hasonló intenzitásúak száma A területen levő élek meghatározása az élválasz függvénnyel történik (g geometriai küszöb)
SUSAN algoritmus Az ugrásszerű átmenet elkerülése, stabilabb eredményt ad (táblázat!)
Haralick felületi modellje Éldetektálás az intenzitásfelületre illesztett térbeli polinommmal
Felületi modell alkalmazása Facet model: Felületi modellt tételezünk fel – közelítjük az intenzitás felületet általában térbeli polinommal és ebből határozunk meg éleket Haralick bi-cubic modellje: Legkisebb négyzetek módszerével illesztünk kétparaméteres polinomot Adott pixel élpont ha: Második derivált 0 Harmadik derivált negatív f(x, y)=k1+ k2x+ k3y+ k4x2+ k5xy+ k6y2+ k7x3+ k8x2y+ k9xy2+ k10y3 keressük a felületet ilyen alakban (1)
Haralick éldetektora Irány menti deriváltak adott θ irányban: A gradiens szöge a pozitív y tengellyel (0, 0)-ban:
Haralick éldetektora Változó behelyettesítéssel (1) x = r sinθ, y = r cosθ: c0 = k1 c1 = k2 sinθ + k3 cosθ c2 = k4(sinθ)2 + k5sinθcosθ + k6(cosθ)2 c3 = k7(sinθ)3 + k8(sinθ)2cosθ + k9sinθ(cosθ)2 + + k10(cosθ)3 Második derivált 0, harmadik negatív, -> c3 < 0 és |c2 / 3c3| < r0
ki-k számítása maszkkal (Shah könyv)
Haralick algoritmusa Keressük k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 értéket a legkisebb négyzetek módszerével, vagy az előző konvolúciós maszkokkal Kiszámoljuk θ, sinθ, cosθ Kiszámoljuk c2 = k4(sinθ)2 + k5sinθcosθ + k6(cosθ)2 Kiszámoljuk c3 = k7(sinθ)3 + k8(sinθ)2cosθ + k9sinθ(cosθ)2 + k10(cosθ)3 Ha c3 < 0 és |c2 / 3c3| < r0, akkor élpont