Wpisany przez Tomasz Lubiński,
08 września 2005 22:01
Zmiana kontrastu obrazu sprowadza sie do wykonania przekształcenia obrazu przy pomocy odpowiednio przygotowanej tablicy LUT.
Współczynniki w takiej tablicy wyznaczane są wg następującego wzoru:
Jeżeli wartosc stałej a, czyli współczynnika kierunkowego prostej, jest większa od 1, to nastąpi zwiększenie kontrastu obrazu. W przeciwnym wypadku, gdy wartość a jest mniejsza od 1, nastąpi zmniejszenie kontrastu obrazu. Wykresy powyższych krzywych przedstawia rysunek.
Jak widać zmiana współczynnika a powoduje zmianę kąta nachylenia odcinka przedstawionego w tablicy LUT. Środek obrotu tego odcinka znajduję się w połowie zakresu składowej. Gdy wynik jest większy od zakresu to należy wziąć wartość maksymalną, gdy wynik przekształcenia jest mniejszy od wartości minimalnej wówczas należy wziąć wartość minimalną. Zwiększanie kontrastu obrazu powoduje symetryczne rozszerzanie zakresu histogramu względem środka zakresu składowej. W skrajnym wypadku otrzymujemy histogram tylko z 3 wartościami różnymi od zera - dla wartości najmniejszej, największej oraz środkowej. Zmniejszanie kontrastu prowadzi natomiast do zwężania histogramu obrazu. Tutaj w skrajnym wypadku zatrzemy wszystkie szczegóły doprowadzając do sytuacji, gdzie otrzymamy gładkie szare tło.
Poniżej zestawiono, wyniki zmiany kontrastu przykładowego obrazu. W środku znajduje się obraz oryginalny, po lewej mamy obraz o zmniejszonym kontraście, po prawej obraz o zwiększonym kontraście.
Wyniki dla obrazu monochromatycznego:
Wyniki dla obrazu kolorowego:
Ustaw ścieżkę do pliku (lub pozostaw tą domyślną), wczytaj plik a następnie użyj przycisku "Korekcja kontrastu" w celu sprawdzenia działania metody.
Ze względu na zabezpieczenia w przeglądarkach, skrypt otwiera wyłącznie pliki graficzne w obrębie naszego serwisu, np:
http://www.algorytm.org/images/stories/po/anaglif_lewy.jpg
http://www.algorytm.org/images/stories/po/orig.gif
http://www.algorytm.org/images/stories/mb/hsv.jpg
LUT(i)=\begin{cases}
0 & \text{ jeżeli } a(i-\frac{i_{max}}{2})+\frac{i_{max}}{2} < 0 \\
a(i-\frac{i_{max}}{2})+\frac{i_{max}}{2} & \text{ jeżeli } 0 \leq a(i-\frac{i_{max}}{2})+\frac{i_{max}}{2} \leq i_{max} \\
i_{max} & \text{ jeżeli } a(i-\frac{i_{max}}{2})+\frac{i_{max}}{2} > i_{max}
\end{cases}
gdzie imax oznacza maksymalną dopuszczalną wartość składowej RGB piksela obrazu.Jeżeli wartosc stałej a, czyli współczynnika kierunkowego prostej, jest większa od 1, to nastąpi zwiększenie kontrastu obrazu. W przeciwnym wypadku, gdy wartość a jest mniejsza od 1, nastąpi zmniejszenie kontrastu obrazu. Wykresy powyższych krzywych przedstawia rysunek.
Jak widać zmiana współczynnika a powoduje zmianę kąta nachylenia odcinka przedstawionego w tablicy LUT. Środek obrotu tego odcinka znajduję się w połowie zakresu składowej. Gdy wynik jest większy od zakresu to należy wziąć wartość maksymalną, gdy wynik przekształcenia jest mniejszy od wartości minimalnej wówczas należy wziąć wartość minimalną. Zwiększanie kontrastu obrazu powoduje symetryczne rozszerzanie zakresu histogramu względem środka zakresu składowej. W skrajnym wypadku otrzymujemy histogram tylko z 3 wartościami różnymi od zera - dla wartości najmniejszej, największej oraz środkowej. Zmniejszanie kontrastu prowadzi natomiast do zwężania histogramu obrazu. Tutaj w skrajnym wypadku zatrzemy wszystkie szczegóły doprowadzając do sytuacji, gdzie otrzymamy gładkie szare tło.
Poniżej zestawiono, wyniki zmiany kontrastu przykładowego obrazu. W środku znajduje się obraz oryginalny, po lewej mamy obraz o zmniejszonym kontraście, po prawej obraz o zwiększonym kontraście.
Wyniki dla obrazu monochromatycznego:
Wyniki dla obrazu kolorowego:
Przykład w JavaScript:
Ustaw ścieżkę do pliku (lub pozostaw tą domyślną), wczytaj plik a następnie użyj przycisku "Korekcja kontrastu" w celu sprawdzenia działania metody.
Ze względu na zabezpieczenia w przeglądarkach, skrypt otwiera wyłącznie pliki graficzne w obrębie naszego serwisu, np:
http://www.algorytm.org/images/stories/po/anaglif_lewy.jpg
http://www.algorytm.org/images/stories/po/orig.gif
http://www.algorytm.org/images/stories/mb/hsv.jpg
| |||||
Implementacje
Autor | Język programowania | Komentarz | Otwórz | Pobierz | Ocena |
Tomasz Lubiński | C# | Visual Studio C# 2010 Express | .cs | .cs | ***** / 0 |
Tomasz Lubiński | C/C++ | Borland Builder 6 | .cpp | .cpp | ***** / 4 |
Tomasz Lubiński | Delphi/Pascal | Borland Delphi 5 | .pas | .pas | ***** / 1 |
Tomasz Lubiński | JavaScript | Firefox 3.0+, Safari 3.0+, Chrome 3.0+, Opera 9.5+, IE 9.0+ | .js | .js | ***** / 1 |
Poprawiony: 16 sierpnia 2012 19:50