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)  aebc
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>.