StartAlgorytmyPrzetwarzanie obrazówHistogram - wyrównywanie
Baza Wiedzy
Wersja offline serwisu przeznaczona na urządzenia z systemem Android.

Darowizny
darowiznaWspomóż rozwój serwisu


Nagłówki RSS
Kanał artykuły
Kanał implementacje
Kanał komentarze
Kanał forum


Bookmarki









Sonda
Implementacji w jakim języku programowania poszukujesz?
 
Histogram - wyrównywanie
Ocena użytkowników:++++- / 9
SłabyŚwietny 
Wpisany przez Tomasz Lubiński
środa, 12 października 2005 19:25

Wyrównywanie histogramu (ang. histogram equalization) ma na celu takie dobranie wartosci aby wykres był mozliwie "płaski". W praktyce wyrównywanie histogramu sprowadza się do wykonania przeksztalcenia obrazu przy pomocy odpowiednio przygotowanej tablicy LUT. Operacja wyrównywania histogramu pozwala na uwypuklenie tych szczegółów w obrazie, które z uwagi na niewielki kontrast sa mało widoczne.
Na początku należy obliczyć dystrybuantę rozkładu prawdopodobieństwa. Jest ona określona wzorem:
D(n) = (h0 + h1 + ... + hn) / s
, dla każdego n = 0 .. maksymalna wartość składowej, gdzie s oznacza liczbę wszystkich punktów w obrazie. Zatem wartość dystrybuanty w punkcie i określa liczbę punktów w obrazie o wartości składowej mniejszej lub równej i podzieloną przez liczbę wszystkich punktów w obrazie.

Na podstawie dystrybuanty otrzymujemy tablice LUT, która wyraza się wzorem:
LUT(i) = ((D(i) - D0) / (1 - D0)) * (k - 1)
, gdzie: i - wartosc składowej obrazu oryginalnego, D0 - pierwsza niezerowa wartosc dystrybuanty obrazu oryginalnego, k - liczba mozliwych wartosci składowych obrazu.

Przykład:
Rozważmy obraz o 20 punktach, dla którego dany jest histogram h = {2, 5, 0, 3, 9, 1}
Dystrybuanta dla niego będzie zatem wyglądała następująco: D = {2/20, 7/20, 7/20, 10/20 , 19/20, 20/20}
Co po przekształceniu na ułamki dziesiętne wgląda tak: D = {0.1, 0.35, 0.35, 0.5 , 0.95, 1}
Teraz obliczymy współczynniki tablicy LUT:
Pierwsza niezerowa wartość dystrybuanty D0 = 0.1
Liczba wartości składowych (liczba elementów histogramu) k = 6
Wartości zakrąglamy w dół (można też zaokrąglać wartości normalnie, tzn. do wartości x.5 w dół a powyżej w górę):
LUT(0) = ((0.1 - 0.1) / (1 - 0.1)) * (5) = 0
LUT(1) = ((0.35 - 0.1) / (1 - 0.1)) * (5) = 1
LUT(2) = ((0.35 - 0.1) / (1 - 0.1)) * (5) = 1
LUT(3) = ((0.5 - 0.1) / (1 - 0.1)) * (5) = 2
LUT(4) = ((0.95 - 0.1) / (1 - 0.1)) * (5) = 4
LUT(5) = ((1 - 0.1) / (1 - 0.1)) * (5) = 5

Należy pokreślić, iż operacja ta nie jest uniwersalna i w przypadku niektórych obrazów może nie przynieść zadowalajacych rezultatów. Poniżej przedstawiono wynik wyrównywania histogramu, dla obrazu kolorowego i monochromatycznego (po lewej obrazy przed operacją wyrównywania histogramu):
Wyrównywanie histogramu




Autor Język programowania Komentarz Otwórz Pobierz Ocena
Tomasz Lubiński C/C++ Borland Builder 6
Implementacja w C/C++
Implementacja w C/C++
+++-- / 6
Tomasz Lubiński Delphi/Pascal Borland Delphi 5
Implementacja w Delphi/Pascal
Implementacja w Delphi/Pascal
+++-- / 4
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie



Poprawiony: poniedziałek, 13 czerwca 2011 21:03

Komentarze

 
photo
0 # majsterkus 2009-09-14 02:34

dzięki za pomoc, ze skryptu A.Sluzka"Komputerowa analiza obrazu" ciężko zczaić o co chodzi
Odpowiedz | Odpowiedz z cytatem | Cytować
 
 
photo
0 # Krzysztof85264 2011-04-19 15:59
W Borland Builder 6 jest małe niedociągnięcie . Wg mnie algorytm u mnie działa całkiem nieźle i daje dobre efekty lecz dopiera gdy wszystko co się dało przyrównałem do ZERA. Co prawda straciłem przez to ciekawe efekty graficzne na tym obrazku ale teraz nie mam już losowości w jego działaniu.
Odpowiedz | Odpowiedz z cytatem | Cytować
 

Dodaj komentarz

Kod antysapmowy
Odśwież