Wpisany przez Tomasz Lubiński
czwartek, 08 września 2005 21:15
Histogram obrazu w odcieniach szarości wyznaczany jest jako suma wszystkich pikseli o danej wartości. Przeanalizujmy to na przykładzie. Mamy dany obraz o wymiarze 3x2, o 4 odcieniach szarości (0-3). Czcionką pogrubioną zaznaczono aktualnie rozpatrywaną komórkę obrazu.
Pierwsza komórka jest równa jeden, zatem w histogramie, zwiększamy indeks numer 1 (liczymy od 0 tak jak odcienie w obrazie, w końcu każdy odcień musi mieć swój odpowiednik w histogramie)
Kolejna wartość w obrazie to 0, zatem zwiększamy indeks 0
Kolejna wartość w obrazie to 1
Następnie 2
I znów 2
I na końcu 1
Z histogramu możemy zatem od razu odczytać, że piksli o odcieniu szarości równym 0 jest w obrazie 1, o odcieniu równym 1 są 3, o odcieniu równym 2 są 2, natomiast o odcieniu równym 3 w obrazie nie ma żadnego.
W przypadku obrazów, w których pojedynczy piksel zawiera kilka składowych, zazwyczaj analizuje się histogramy dla każdej składowej. I tak dla obrazu kolorowego w trybie RGB będą to 3 histogramy dla składowej R (Red), G (Green) oraz B (Blue).
Poniżej przedstawiono, analizę histogramów, dla obrazu kolorowego i monochromatycznego.

W histogramie zawarta jest informacja o kontraście i jasności obrazu. Dane zawarte w histogramie umozliwiaja również polepszenie jakości obrazu. Możliwe operacje to m.in rozjaśnianie i przyciemnianie obrazu, zwiększanie i zmniejszanie kontrastu, korekcja gamma, wyrównywanie histogramu oraz rozciąganie histogramu. Przy wszystkich tych operacjach wykorzystujemy tablicę LUT (ang. Look Up Table), do konwersji oryginalnych wartości składowych obrazu na nowe wartości.
Przykład w JavaScript:
Ustaw ścieżkę do pliku (lub pozostaw tą domyślną), wczytaj plik a następnie użyj przycisku "Histogram" by zobaczyć wykres dla obrazu.
Ze względu na zabezpieczenia w przeglądarkach, skrypt generuje histogramy wyłącznie dla plików graficznych 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
Obraz
|
Historgam
|
Pierwsza komórka jest równa jeden, zatem w histogramie, zwiększamy indeks numer 1 (liczymy od 0 tak jak odcienie w obrazie, w końcu każdy odcień musi mieć swój odpowiednik w histogramie)
Obraz
|
Historgam
|
Kolejna wartość w obrazie to 0, zatem zwiększamy indeks 0
Obraz
|
Historgam
|
Kolejna wartość w obrazie to 1
Obraz
|
Historgam
|
Następnie 2
Obraz
|
Historgam
|
I znów 2
Obraz
|
Historgam
|
I na końcu 1
Obraz
|
Historgam
|
Z histogramu możemy zatem od razu odczytać, że piksli o odcieniu szarości równym 0 jest w obrazie 1, o odcieniu równym 1 są 3, o odcieniu równym 2 są 2, natomiast o odcieniu równym 3 w obrazie nie ma żadnego.
W przypadku obrazów, w których pojedynczy piksel zawiera kilka składowych, zazwyczaj analizuje się histogramy dla każdej składowej. I tak dla obrazu kolorowego w trybie RGB będą to 3 histogramy dla składowej R (Red), G (Green) oraz B (Blue).
Poniżej przedstawiono, analizę histogramów, dla obrazu kolorowego i monochromatycznego.

W histogramie zawarta jest informacja o kontraście i jasności obrazu. Dane zawarte w histogramie umozliwiaja również polepszenie jakości obrazu. Możliwe operacje to m.in rozjaśnianie i przyciemnianie obrazu, zwiększanie i zmniejszanie kontrastu, korekcja gamma, wyrównywanie histogramu oraz rozciąganie histogramu. Przy wszystkich tych operacjach wykorzystujemy tablicę LUT (ang. Look Up Table), do konwersji oryginalnych wartości składowych obrazu na nowe wartości.
Przykład w JavaScript:
Ustaw ścieżkę do pliku (lub pozostaw tą domyślną), wczytaj plik a następnie użyj przycisku "Histogram" by zobaczyć wykres dla obrazu.
Ze względu na zabezpieczenia w przeglądarkach, skrypt generuje histogramy wyłącznie dla plików graficznych 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
| Autor | Język programowania | Komentarz | Otwórz | Pobierz | Ocena |
| Tomasz Lubiński | C/C++ | Borland Builder 6 | ![]() | ![]() |
![]() ![]() ![]() ![]() / 4 |
| Tomasz Lubiński | Delphi/Pascal | Borland Delphi 5 | ![]() | ![]() |
![]() ![]() ![]() ![]() / 3 |
| Tomasz Lubiński | Java Script | Firefox 3.0+, Safari 3.0+, Chrome 3.0+, Opera 9.5+, IE 9.0+ | ![]() | ![]() |
![]() ![]() ![]() ![]() / 0 |
Poprawiony: poniedziałek, 28 listopada 2011 20:39






Komentarze