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.