Vyvážené prahování histogramu - Balanced histogram thresholding
v zpracování obrazu, metoda prahování vyváženého histogramu (BHT),[1] je velmi jednoduchá metoda používaná pro automatický obraz prahování. Jako Otsuova metoda[2] a Metoda prahování iteračního výběru,[3] toto je histogram založená metoda prahování. Tento přístup předpokládá, že obraz je rozdělen do dvou hlavních tříd: Pozadí a popředí. The BHT metoda se snaží najít optimální prahovou úroveň, která rozděluje histogram na dvě třídy.



Tato metoda váží histogram, kontroluje, která ze dvou stran je těžší, a odebírá váhu z těžší strany, dokud se nestane světlejší. Opakuje stejnou operaci, dokud okraje váha setkat.
Vzhledem ke své jednoduchosti je tato metoda dobrou volbou jako první přístup při prezentaci předmětu automatické prahování obrazu.
Algoritmus
Následující výpis v C notace, je zjednodušená verze Vyvážení prahových hodnot histogramu metoda:
int BHThreshold(int[] histogram) { i_m = (int)((je + tj) / 2,0f); // střed váhy I_m w_l = get_weight(je, i_m + 1, histogram); // váha vlevo W_l w_r = get_weight(i_m + 1, tj + 1, histogram); // hmotnost vpravo W_r zatímco (je <= tj) { -li (w_r > w_l) { // pravá strana je těžší w_r -= histogram[tj--]; -li (((je + tj) / 2) < i_m) { w_r += histogram[i_m]; w_l -= histogram[i_m--]; } } jiný -li (w_l >= w_r) { // levá strana je těžší w_l -= histogram[je++]; -li (((je + tj) / 2) >= i_m) { w_l += histogram[i_m + 1]; w_r -= histogram[i_m + 1]; i_m++; } } } vrátit se i_m;}
Následuje možná implementace v Krajta Jazyk:
def bht(hist, min_počet: int = 5) -> int: "" "Vyvážený práh histogramu." "" n_bins = len(hist) # předpokládá 1D histogram h_s = 0 zatímco hist[h_s] < min_počet: h_s += 1 # ignorovat malé počty na začátku on = n_bins - 1 zatímco hist[on] < min_počet: on -= 1 # na konci ignoruje malé počty # použijte střední intenzitu histogramu jako střed; alternativně: (h_s + h_e) / 2) h_c = int(kolo(np.průměrný(np.linspace(0, 2 ** 8 - 1, n_bins), závaží=hist))) w_l = np.součet(hist[h_s:h_c]) # váha v levé části w_r = np.součet(hist[h_c : on + 1]) # hmotnost v pravé části zatímco h_s < on: -li w_l > w_r: # levá část byla těžší w_l -= hist[h_s] h_s += 1 jiný: # pravá část se stala těžší w_r -= hist[on] on -= 1 new_c = int(kolo((on + h_s) / 2)) # vycentrujte váhu -li new_c < h_c: # přesuňte přihrádku na druhou stranu w_l -= hist[h_c] w_r += hist[h_c] elif new_c > h_c: w_l += hist[h_c] w_r -= hist[h_c] h_c = new_c vrátit se h_c
Reference
- ^ A. Anjos a H. Shahbazkia. Dvouúrovňové prahování obrazu - rychlá metoda. BIOSIGNALS 2008. Svazek: 2. P: 70-76.
- ^ Nobuyuki Otsu (1979). "Metoda výběru prahové hodnoty z histogramů úrovně šedé". IEEE Trans. Sys., Man., Cyber. 9: 62–66.
- ^ Ridler TW, Calvard S. (1978) Práh obrazu pomocí iterativní metody výběru, IEEE Trans. System, Man and Cybernetics, SMC-8: 630-632.