%   PRAH_ENTROPY_KAPUR       [lvl T] = prah_entropy_kapur(obr)
%   Funkce slouží k nalezené optimální hodnoty jasu pro prahování
%   entropickou Kapůrovou metodou.
%
%   obr - vstupní obraz
%   lvl - hodnota jasu prahu
%   T - kriteriální funkce

function [lvl T] = prah_entropy_kapur(obr);


h = imhist(obr);    % histogram
p = h/sum(h);   % pravděpodobnostní fce

p2 = p;
% p(find (p<0.0001))=[]; 

p = p(p~=0);    % smazání nulových hodnot
tab(:,1) = 1:256;   % pomocná tabulka
tab(:,2) = p2;  % pomocná tabulka

%% výpočet kriteriílní fce
for i = 1:length(p)
    Pf = sum(p(1:i));
    Pb = sum(p(i+1:end));
    
    Hf(i) = - sum(p(1:i)/Pf .* log10(p(1:i)/Pf));
    Hb(i) = - sum(p(i+1:end)/Pb .* log10(p(i+1:end)/Pb));
    
    T(i) = Hf(i)+Hb(i);
end
%% Pom. tab. pro vyhledání opt. prahu po smazání nulových hodnot v pravděp. fci
poc = 0;
for i = 1:256
    if p2(i) == 0
    else
        poc = poc + 1;
        tab(i,3) = poc;
        krit(:,poc) = [i T(poc)];
    end
end
%%  Nalezení opt. prahu (maximum kriteriální fce)

T2 = T(round(end/2):end);
Topt = find(T2 == max(T2(T2<inf))) + floor(length(T)/2);
if length(T)<Topt
    Topt = length(T)/256;
else
    Topt = find(tab(:,3) == Topt)/256;
end

lvl = Topt;