instrukcja
Transkrypt
instrukcja
Ćwiczenie 9 PARAMETRY OBRAZU Zakres pracy W ramach ćwiczenia należy do przygotowanego wcześniej programu dodać możliwość przeprowadzania następujących operacji: 1. wyznaczania wartości momentów 00, 01, 10, 11, 20, 02, a także kąta ustawienia dla obiektów wskazywanych poprzez kliknięcie na obrazie binarnym (przedstawiającym czarne kształty na białym tle), 2. wyświetlania obrazu LBP, czyli obrazu powstałego po wyznaczeniu 8-bitowego kodu LBP dla każdego piksela, 3. wyświetlania histogramu obrazu LBP, 4. wyświetlania wyniku filtracji Gabora dla zadanych parametrów i (tylko moduł wyniku zespolonego). Zadania te dotyczą wyłącznie obrazów 8-bitowych. Informacje pomocnicze 1. Momenty obrazu wyznacza się według następujących wzorów: M N 1 M N 00 I( xi , y j ) 20 ( xi x )2 I( xi , y j ) 00 i 1 i 1 j 1 x 10 y 01 1 M xi I( xi , y j ) 02 00 i 1 1 N M j 1 N y j I( xi , y j ) 11 00 i 1 j 1 1 M N ( y 00 i 1 1 j 1 M j 1 y ) I( x i , y j ) 2 j N ( x x )( y 00 i 1 i j 1 j y ) I( x i , y j ) gdzie M,N – wymiary obrazu, I(xi,yj) – funkcja jasności (zakładamy obiekty binarne), 1 dla punktów obiektu, I( xi , y j ) 0 dla punktów spoza obiektu, xi , yj – współrzędne punktów obiektu, x , y – współrzędne środka ciężkości. Dla tzw. obiektów smukłych kąt ustawienia obliczamy według wzoru: 1 2 2 11 20 02 tan 1 Aby można było wyznaczyć wartości momentów tylko dla wskazanego obiektu, niezbędny jest algorytm umożliwiający zebranie w tablicy wszystkich pikseli tego obiektu. Jedna z najprostszych jego wersji wygląda następująco. 1. 2. 3. 4. Jeżeli punkt startowy należy do tła, wyjdź. Utwórz Q - pustą kolejkę FIFO. Dodaj punkt startowy do Q. Dopóki Q nie jest puste: 5. Podstaw za p pierwszy element Q. 6. Usuń pierwszy element z Q. 7. Jeżeli p należy do obiektu: 8. Zapisz p na liście punktów obiektu i oznacz p jako już przetworzony. 9. Dodaj do Q prawego sąsiada p, jeśli ten sąsiad nie został jeszcze przetworzony. 10. Dodaj do Q lewego sąsiada p, jeśli ten sąsiad nie został jeszcze przetworzony. 11. Dodaj do Q górnego sąsiada p, jeśli ten sąsiad nie został jeszcze przetworzony. 12. Dodaj do Q dolnego sąsiada p, jeśli ten sąsiad nie został jeszcze przetworzony. 2. Podstawowy operator LBP zdefiniowano dla okna (sąsiedztwa) o rozmiarach 3×3 piksele. W oknie tym wyznacza się 8-bitowe kody obliczane na podstawie wartości 8 sąsiadów piksela centralnego. Formalnie, operator LBP przyjmuje postać: 7 LBP ( xc , yc ) 2 n s (in ic ) n 0 gdzie punkt c o współrzędnych (xc, yc) stanowi środek maski, n przebiega przez jego 8 sąsiadów, ic oraz in to wartości jasności piksela c i jego n-tego sąsiada, natomiast s(u) przyjmuje wartość 1, gdy u 0, lub 0 w przeciwnym przypadku. 3. Filtr Gabora jest filtrem splotowym o specyficznej masce, złożonej z liczb zespolonych. Maskę można opisać następującym wzorem: k (p) k 2 2 e 2 k p 2 2 2 ik p e e 2 2 gdzie p oznacza punkt wewnątrz maski, natomiast k jest wektorem określającym długość fali oraz orientację filtru x p y , k cos k , k sin k 2 ( 2 ) , 8 , 2 Wartości i są parametrami o wartościach całkowitych, odpowiednio, 0..7 i 0..4. Wprowadzając następujące oznaczenia: a k 2 2 2 , b k p 2 2 2 , c 2 2 uzyskujemy ostateczne wzory na część rzeczywistą i urojoną każdego z elementów maski Re k (p) aeb cos(k p) aebc Im k (p) aeb sin( k p) gdzie symbol () oznacza iloczyn skalarny wektorów. Wskazówki implementacyjne 1. Realizację algorytmu wyszukującego wszystkie punkty należące do wskazanego obiektu może ułatwić zastosowanie szablonu std::queue<> zdefiniowanego w pliku nagłówkowym <queue>.