Многоуровневый порог Otsu Matlab

Я попытался реализовать алгоритм порога Mutlilevel Otsu, но мои значения не соответствуют значениям из внутренней функции Matlab, возможно, у меня ошибка.

Это стандартный алгоритм:

введите здесь описание изображения

Вот мой код:

function [T] = MultiLevelOtsu(img, n)

% Calculate Histogram of Image
H = imhist(uint8(img));
a = size(H, 2);
b = size(H, 1);
T = [zeros(1, n)];    
% Step 1 : Repeat recursivly Step 2-6 n/2-1 times
for i = 1:n/2-1

    % Step 2 : Define & Update Range
    R = [a:b]';

    % Step 3 : Find mean & std of all pixels in R
    mu = mean(R);
    sigma = std(R);

    % Step 4 : Sub-ranges T1 & T2
    T1 = mu - 1*sigma;
    T2 = mu + 1*sigma;

    % Step 5 : Threshold Calculation
    T(i) = floor((ceil(otsuthresh(H(a:T1))*256)+ceil(otsuthresh(H(T2:b))*256))/2);

    % Step 6 : Update a & b
    a = T1+1;
    b = T2-1; 

end

% Step 7 : Update Step 5
T1 = mu;
T2 = mu+1;
T = floor((ceil(otsuthresh(H(a:T1))*256)+ceil(otsuthresh(H(T2:b))*256))/2);


end

person Xeno1987    schedule 06.09.2016    source источник
comment
Когда вы говорите о внутренней функции Matlab, вы имеете в виду функцию graythresh?   -  person Ratbert    schedule 06.09.2016
comment
Нет, я имею в виду функцию мультитреша в Matlab R2016a.   -  person Xeno1987    schedule 06.09.2016
comment
см. ссылку: stackoverflow.com/questions /22706742/   -  person SKG    schedule 21.12.2018