Wpisany przez Tomasz Lubiński,
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.
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
Implementacje
Autor | Język programowania | Komentarz | Otwórz | Pobierz | Ocena |
Tomasz Lubiński | C# | Microsoft Visual Studio 2010 | .cs | .cs | ***** / 1 |
Tomasz Lubiński | C/C++ | Borland Builder 6 | .cpp | .cpp | ***** / 5 |
Tomasz Lubiński | Delphi/Pascal | Borland Delphi 5 | .pas | .pas | ***** / 3 |
Tomasz Lubiński | JavaScript | Firefox 3.0+, Safari 3.0+, Chrome 3.0+, Opera 9.5+, IE 9.0+ | .js | .js | ***** / 1 |
Poprawiony: 28 listopada 2011 20:39