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 -100100), 2. zmiana kontrastu (mnożnik 0,15,0), 3. potęgowanie (wykładnik 0,13,0), 4. negatyw, 5. wyświetlanie histogramu, 6. wyrównywanie histogramu. Ustawianie wartości parametrów dla zadań 13 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 01. 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 01), 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).