instrukcja

Transkrypt

instrukcja
Ćwiczenie 2
OPERACJE JEDNOPIKSELOWE I HISTOGRAM OBRAZU
Zakres pracy
W ramach ćwiczenia należy do przygotowanego wcześniej programu dodać możliwość
przeprowadzania następujących operacji:
1. zmiana jasności (w zakresie -100100),
2. zmiana kontrastu (mnożnik 0,15,0),
3. potęgowanie (wykładnik 0,13,0),
4. negatyw,
5. wyświetlanie histogramu,
6. wyrównywanie histogramu.
Ustawianie wartości parametrów dla zadań 13 powinno się odbywać przy użyciu suwaka.
Zadania te dotyczą wyłącznie obrazów 8-bitowych.
Histogramy należy wyświetlać w oddzielnym oknie dialogowym. Dla obrazów 8-bitowych
powstanie jeden histogram jasności, dla obrazów 24-bitowych - trzy histogramy
odpowiadające składowym RGB, a dla obrazów 1-bitowych - dwa histogramy reprezentujące
liczbę czarnych pikseli w poszczególnych liniach poziomych i pionowych.
Informacje pomocnicze
1. Implementując zmianę kontrastu należy pamiętać o tym, aby skalować jasność w taki
sposób, by wartość środkowa (127) nie ulegała zmianie.
2. Potęgowanie obrazu wymaga wstępnego przeskalowania jasności do przedziału 01.
3. Procedura wyrównywania histogramu opisana jest transformacją skonstruowaną na
podstawie dystrybuanty rozkładu źródłowego:
k
sk   p(r j ) , k = 0,1, ..., L-1
j 0
gdzie rj to j-ty poziom jasności w obrazie źródłowym, sk - k-ty poziom jasności w obrazie
wynikowym (rj i sk należą do przedziału 01), L to liczba poziomów szarości (256),
natomiast p(rj) oznacza prawdopodobieństwo wystąpienia j-tego odcienia w obrazie
źródłowym.
Wskazówki implementacyjne
1. Do obsługi suwaka służy w MFC klasa CSliderCtrl. Suwak możemy umieścić w oknie
dialogowym korzystając z edytora zasobów:
W edytorze zasobów kliknięcie prawym przyciskiem na suwak umożliwi wybranie opcji Add
variable, która utworzy odpowiednią zmienną typu CSliderCtrl. Następnie można korzystać
z metod SetRange(), SetPos() i GetPos() w celu obsługi suwaka.
2. W edytorze zasobów okno właściwości listy rozwijanej pozwala na obsłużenie meldunków
z nią związanych, np. odpowiadających za reakcję na zmianę wyboru opcji:
3. Klikając prawym przyciskiem w oknie Resource View uzyskujemy możliwość utworzenia
nowego okna dialogowego. Następnie we właściwościach okna wartości Visible i Tool
Window ustawiamy na true.
4. Kliknięcie prawym przyciskiem na utworzonym oknie umożliwia związanie z nim nowej
klasy. Class Wizard pozwala na dodanie obsługi meldunku WM_PAINT
oraz przeciążenie metody OnInitDialog()
5. Metoda OnInitDialog() jest dobrym miejscem na zmianę rozmiaru okna:
SetWindowPos(NULL, 0, 0, szerokosc, wysokosc, SWP_NOMOVE | SWP_NOZORDER);
6. Do rysowania histogramów przydadzą się m.in. metody MoveTo() i LineTo() obiektu
CPaintDC (w kodzie obsługującym meldunek WM_PAINT).