This shows you the differences between two versions of the page.
spg:laboratoare:09 [2023/08/17 17:48] maria_anca.balutoiu |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Laboratorul 09. ===== | ||
- | ===== Detecția Pixelilor de Frontieră ===== | ||
- | |||
- | ==== Pixelii de frontieră ==== | ||
- | Pixelii de frontieră sunt pixeli în care intensitatea imaginii se schimbă brusc. Aceștia alcătuiesc frontierele din imagine. Frontierele pot reprezenta obiecte subțiri (linii) sau pixelii aflați la adiacența a două zone din imagine cu intensități diferite. | ||
- | |||
- | Majoritatea metodelor de extragere a frontierelor presupun efectuarea următoarelor etape: | ||
- | - Detectia pixelilor de front. | ||
- | - Eliminarea pixelilor de front falși. | ||
- | - Conectarea pixelilor de front pentru a forma frontiere. | ||
- | |||
- | Detecția pixelilor de front este bazată pe gradientul imaginii sau pe Laplacianul imaginii. Se utilizează operatori care aproximează în planul discret Gradientul sau Laplacianul funcției imagine. Operatorii sunt reprezentați prin măști de convoluție de dimensiune mică (3x3) și sunt sensibili la zgomot (pot produce puncte de front false). | ||
- | |||
- | Cei mai utilizati detectori de fronturi bazați pe gradient sunt: | ||
- | * Roberts | ||
- | * Sobel | ||
- | * Prewitt | ||
- | |||
- | ==== Detectorul Sobel ==== | ||
- | |||
- | Gradientul este aproximat prin convoluția imaginii cu următoarele măști: | ||
- | |||
- | {{ :spg:laboratoare:sobel.png?800 |}} | ||
- | |||
- | Pixelul (x,y) în care se calculează gradientul este cel pe care este centrată masca. Dacă I este imaginea de intrare: | ||
- | |||
- | <code> | ||
- | Dx (x, y) = I(x+1, y+1) + 2* I(x+1, y) + I(x+1, y-1) – I(x-1, y+1) – 2* I(x-1, y) – I(x-1, y-1) | ||
- | Dy (x, y) = I(x+1, y+1) + 2* I(x, y+1) + I(x-1, y+1) – I(x+1, y-1) – 2* I(x, y-1) – I(x-1, y-1) | ||
- | </code> | ||
- | |||
- | Măștile sunt proiectate pentru răspuns maxim la frontiere verticale si orizontale. Masca Dx evidențiază frontierele orizontale (Dx=0), iar Dy frontierele verticale (Dy=0). Amplitudinea gradientului este aproximată prin: **D(x,y) = |Dx| + |Dy|**. | ||
- | |||
- | ==== Extragerea frontierelor pe baza punctelor de frontieră ==== | ||
- | |||
- | Pași: | ||
- | - Detectia pixelilor de frontieră | ||
- | - Eliminarea falselor puncte de frontieră | ||
- | - Conectarea punctelor de frontieră validate pentru a forma frontiere | ||
- | |||
- | Metode existente: | ||
- | * Metode locale, care utilizează relațiile dintre pixelii de front vecini, bazate pe amplitudinea și direcția frontului. Exemplu: detectorul Canny | ||
- | * Metode globale, care se bazează pe cunoașterea formei geometrice sau a ecuației matematice a frontierelor. Exemplu: Transformata Hough | ||
- | |||
- | ==== Detectorul Canny de Extragere a Frontierelor ==== | ||
- | |||
- | <note warning>În cadrul acestui laborator, veți implementa o versiune simplificată a algoritmului Canny!</note> | ||
- | |||
- | - Reducere zgomote. Se aplică imaginii de intrare un filtru Gaussian. | ||
- | - Detecție puncte de front. Se convertește rezultatul obținut la pasul 1 în grayscale, apoi se aplică operatorul Sobel pentru a calcula amplitudinea gradientului. | ||
- | - Hysteresis thresholding pentru subțierea frontierelor cu un singur prag. Se elimină toate valorile mai mici decât un anumit prag setat de voi. | ||
- | |||
- | ==== Cerinte laborator ==== | ||
- | |||
- | - Descărcați [[https://github.com/UPB-Graphics/gfx-framework|framework-ul de laborator]] | ||
- | - Implementați pe CPU sau pe GPU folosind framebuffere algoritmul Canny simplificat: | ||
- | - Aplicați blur pe imagine | ||
- | - Aplicați grayscale | ||
- | - Aplicați detectorul Sobel | ||
- | - Aplicați un singur treshhold de binarizare |