%% OTSU automatic thresholding method sumB = 0; wB = 0; maximum = 0; threshold1 = 0.0; threshold2 = 0.0; sum1 = sum((1:levels).*histogramCounts.'); % the above code is replace with this single line subplot(1,4,1);imshow(im,[0 levels]); for ii=1:levels wB = wB + histogramCounts(ii); if (wB == 0) continue; end wF = total - wB; if (wF == 0) break; end %---debug --- Bx=histogramCounts(1:ii);Fx=histogramCounts(ii+1:levels); weightB=sum(Bx)/sum(histogramCounts); weightF=sum(Fx)/sum(histogramCounts); meanB=(sum(Bx.*[0:ii-1]'))/sum(Bx); meanF=sum(Fx.*[ii:levels-1]')/sum(Fx); Between=weightB*weightF*((meanB-meanF)^2); if ( Between > maximum ) threshold1 = ii; maximum = Between; end message(ii,:)=[ii meanB weightB meanF weightF Between]; level =threshold1;% (threshold1 + threshold2 )/(2); disp([num2str(ii) ' : ' num2str(Between)]); subplot(1,4,1);imshow(im,[0 levels]); subplot(1,4,2);bar(histogramCounts);hold on;plot(ii,max(histogramCounts)/2,'x','color','r');plot(level,max(histogramCounts)*(2/3),'x','color','g');hold off; set(gca,'XTickLabel',{0:levels-1}); subplot(1,4,3);imshow((im>ii)); subplot(1,4,4);imshow((im>level)); drawnow(); %pause(); end