Lab05 Histogram

Transkrypt

Lab05 Histogram
Rozciągnięcie (ściśnięcie) histogramu poziomów szarości.
Operacją odwrotną do rozciągania jest ściśnięcie histogramu, które
kontrastu obrazu. Wyraża się ono wzorem:
powoduje zmniejszenie
gdzie f – funkcja obrazu,
f(r, c) – jasność piksela obrazu o współrzędnych (r, c),
fmax – najjaśniejszy poziom szarości,
fmin – najciemniejszy poziom szarości.
Dla obrazów 8 bitowych (z 256 poziomami szarości) fmax = 255 fmin = 0 (w Matlabie dla obrazu
zapisanego przy pomocy typu double jest to odpowiednio 1 i 0).
Rmin, Rmax – nowy maksymalne i minimalne wartości pikseli na obrazie.
Rmin=35
Rys 1. Histogram oryginalnego obrazu.
Rmax=200
Rys 2. Histogram obrazu po wykonaniu
operacji “ściśnięcia histogramu”.
Ten przykład dotyczy obrazu zdefiniowanego przy pomocy typu uint8 (wartości od 0 do 255). Aby
ustalić takie same wartości Rmin, Rmax – w przypadku, gdy obraz jest zapisany przy pomocy typu
double (wartości od 0 do 1) należy użyć Rmin = 35/255, Rmax = 200/255.
W podanym przykładzie obraz wynikowy posiada wyłącznie pikseli o wartości z przedziału [35,
255].
Operacja ta produkuje obraz o zmniejszonym kontraście, lecz mimo to jest wykorzystywana w
algorytmie wyostrzania obrazu.
Ćwiczenie 1.
Wyświetl na ekranie obraz wraz z jego histogramem. Następnie wykonaj operacje przesunięcia
histogramu (rozjaśnienie i przyciemnienie obrazu) i wyświetl obrazy wynikowe wraz z ich
histogramami.
Ćwiczenie 2.
Spróbuj poprawić jakość obrazów poprzez operacje wyrównania, ściśnięcia i rozciągnięcia
histogramu. Operacje przeprowadź dla kilku obrazów.
Ćwiczenie 3.
Napisz m-plik, realizujący operację ściśnięcia histogramu, dla której użytkownik wprowadza
wymagane dane.
Przydatne funkcje:
disp('Podaj ilość progów'); - wypisanie tekstu na ekranie.
n = input('n = ');
- wczytanie wartości do zmiennej.
[x y] = ginput(1);
- odczytanie współrzędnych myszki z aktywnego
obrazu, parametr funkcji ginput określa ilość
odczytów.
Im = histeq(I);
- wyrównanie histogramu.
H = imhist(L1);
- zapisanie wartości funkcji histogram obrazu L1 w
tablicy H.
imhist(L1);
- narysowanie histogramu.
Wskazówka:
I(I > 0.3) = 1;
- elementom tablicy I, które są większe od 0.3 zostaje
przypisana wartość 1.
1. Wyznaczenie na obrazie interesującego nas rejonu.
Często wykonując analizę obrazu nie interesuje nas cały obraz lecz tylko jego fragment.
Ograniczenie analizy tylko do interesującego nas rejonu może znacznie zredukować czas
wykonania tej operacji.
W Matlabie można wyciąć (ang. crop) prostokątny rejon obrazu przy pomocy funkcji imcrop:
L1 = imcrop(L);
Użytkownik w sposób interaktywny, przy pomocy myszki, zaznacza prostokątny fragment na
obrazie L. Jest on następnie przypisany obrazowi L1. Wciśnięcie klawisza Shift przed
rozpoczęciem zaznaczania rejonu powoduje, że rejon będzie miał kształt kwadratu.
Nie zawsze przy pomocy myszki można dokładnie wyznaczyć położenie i rozmiar rejonu.
Wówczas można użyć funkcji:
L1 = imcorp(L, rect);
gdzie rect jest czteroelementową tablicą, w której dwa pierwsze elementy określają współrzędne
lewego górnego narożnika okna, trzecia szerokość a czwarta jego wysokość. Na przykład
instrukcja:
L1 = imcrop(L, [30, 50, 100, 200]);
powoduje, że L1 przedstawia fragment obrazu L, którego lewy górny wierzchołek ma współrzędne
(30, 50), długość obrazu L wynosi 100 natomiast wysokość 200.
2. Binaryzacja obrazu oraz progowanie histogramu poziomu szarości.
Binaryzacja polega na zamianie obrazów monochromatycznych lub kolorowych w obrazy czarno –
białe. Binaryzacji używa się do wyznaczenia na obrazie interesującego nas obiektu w celu jego
późniejszej analizy (np. obliczenia pole powierzchni, obwodu, określenie kształtu). W celu
otrzymania obrazu binarnego można użyć operacji progowania. Operacja progowania polega na
wyznaczeniu wartości progowej i wykorzystania jej do określenia, czy dany piksel obrazu ma
przyjąć kolor biały czy czarny. W progowaniu z dolnym progiem piksele obraz o wartościach
mniejszych od wartości progowej stają się czarne (wartość 0), natomiast pozostałe białe (wartość
255).
W technikach progowania można wyróżnić dwu- i wielopoziomowe progowanie.
W dwupoziomowym progowaniu obraz jest podzielony na dwa rejony - obiekt i tło,
w wielopoziomowym możemy otrzymać wiele obiektów. Jeżeli na obrazie występuje kilka
obiektów o różnych charakterystykach powierzchni, to należy określić kilka progów w celu
poprawnej segmentacji. W takich sytuacjach staramy się ustalić zbiór wartości progowych (t1, t2, ...,
tk) taki, że wszystkie piksele z obrazu I(r, c) ∈ [ti, ti+1), i = 0, 1, ..., k; tworzą i -ty rejon.
Ćwiczenie 1. Napisz m-plik, który umożliwia wykonanie operacji progowania obrazu z dolnym
(górnym) progiem. Dokonaj progowania na kilku obrazach starając się oddzielić interesujący Cię
obiekt od tła. Wartość progu wskazuje użytkownik przy pomocy myszki na wykresie
przedstawiającym histogram przetwarzanego obrazu. Wyświetl obraz oryginalny, jego histogram
oraz obraz wynikowy.
Ćwiczenie 2. Napisz m-plik, który umożliwia wyodrębnienie z obrazu obiektu, którego poziomy
szarości należą do zadanego przedziału [a, b] (a >= 0 i a < b <= 255 dla obrazów typu uint8).
Wartość progów wskazuje użytkownik przy pomocy myszki na wykresie przedstawiającym
histogram przetwarzanego obrazu. Wyświetl obraz oryginalny, jego histogram oraz obraz
wynikowy. Jaka jest różnica pomiędzy progowaniem określonym w tym zadaniu a zadaniu 1?
Ćwiczenie 3. Napisz m-plik, który umożliwia wykonanie operacji progowania obrazu dla wielu
progów. Ilość progów wpisuje użytkownik przy pomocy klawiatury, natomiast poszczególne
wartości progowe wskazuje użytkownik (przy pomocy myszki) na wykresie przedstawiającym
histogram przetwarzanego obrazu. Wyświetl obraz oryginalny, jego histogram oraz obraz
wynikowy. Korzystając z operacji wieloprogowania postaraj się dokonać segmentacji obrazu
(podział obrazu na rejony, które odpowiadają obiektom lub ich fragmentom).
Ćwiczenie 4.
Zdefiniuj m-plik, który realizuje operacje progowania histogramu w ten sposób, że piksele
o wartościach większych (mniejszych) od wartości progowej pozostają niezmienione. Pikselom
o wartościach mniejszych (większych) przypisz kolor biały.
Z obrazu “cameraman.tif” wydobądź sylwetkę operatora kamery.
Ćwiczenie 5.
Wykonaj operacje wyrównania oraz rozciągnięcia histogramu dla obrazu kolorowego. Przeprowadź
te operacje odrębnie dla poszczególnych składowych R, G i B.
Ćwiczenie 6. Zaproponuj i zaimplementuj algorytm, który w sposób automatyczny wybierze
wartości progowe i wykona operację progowania histogramu.