I read about entropy thresholding[1] and I wanted to give it a try. This technique was rather simple to implement in Matlab compared to other more complex methods and performed reasonably (see results).
Code
- function [A, T] = EntropyThresholding(img)
- [h, ~] = imhist(img);
- h = h/sum(h); % Normalize the histogram so that it sums to 1.
- entropies = zeros(256, 1); % Intialize array for storing entropies.
- for t = 1:254
- White = h(1:t);
- Black = h(t+1:255);
- % Add 0.001 to prevent division by zero(nan) and log of zero(-inf).
- HB = sum((Black/(0.001+sum(Black))).*log((Black+0.001)/(0.001 +sum(Black))));
- HW = sum((White/(0.001+sum(White))).*log((White+0.001)/(0.001 +sum(White))));
- entropies(t) = HB+HW;
- end
- [~, T] = max(abs(entropies)); % The Maximal entropy determines the threshold.
- T = T - 1;
- A = img > T;
Results
References
1. J.N. Kapur, P.K. Sahoo and A.K.C. Wong, "A New Method for Gray-Level Picture Thresholding Using the Entropy of
the Histogram", CVGIP, (29), pp.273-285 , 1985.
heyy
ReplyDeletenice code..even i am working on entropic thresholding on retinal blood vessels...could u please help me
sir
ReplyDeleteI am working on multilevel thresholding by kapur method..can u help me with some code