two-dimensional Otsu's method
Afficher commentaires plus anciens
I am trying to implement 2D Otsu segmentation method, but i am facing problem in my code. in 2D otsu the gray-level value of each pixel as well as the average value of its immediate neighborhood is studied so that the binarization results are greatly improved. I am attaching code,but it is not working and also hyperlink http://en.wikipedia.org/wiki/Otsu%27s_method
function inputs and output:
%hists is a 256\times 256 2D-histogram of grayscale value and neighborhood average grayscale value pair.
%total is the number of pairs in the given image.
%threshold is the threshold obtained.
function threshold = 2D_otsu(hists, total)
maximum = 0.0;
threshold = 0;
helperVec = 0:255;
mu_t0 = sum(sum(repmat(helperVec',1,256).*hists));
mu_t1 = sum(sum(repmat(helperVec,256,1).*hists));
p_0 = zeros(256);
mu_i = p_0;
mu_j = p_0;
for ii = 1:256
for jj = 1:256
if jj == 1
if ii == 1
p_0(1,1) = hists(1,1);
else
p_0(ii,1) = p_0(ii-1,1) + hists(ii,1);
mu_i(ii,1) = mu_i(ii-1,1)+(ii-1)*hists(ii,1);
mu_j(ii,1) = mu_j(ii-1,1);
end
else
p_0(ii,jj) = p_0(ii,jj-1)+p_0(ii-1,jj)-p_0(ii-1,jj-1)+hists(ii,jj);
mu_i(ii,jj) = mu_i(ii,jj-1)+mu_i(ii-1,jj)-mu_i(ii-1,jj-1)+(ii-1)*hists(ii,jj);
mu_j(ii,jj) = mu_j(ii,jj-1)+mu_j(ii-1,jj)-mu_j(ii-1,jj-1)+(jj-1)*hists(ii,jj);
end
if (p_0(ii,jj) == 0)
continue;
end
if (p_0(ii,jj) == total)
break;
end
tr = ((mu_i(ii,jj)-p_0(ii,jj)*mu_t0)^2 + (mu_j(ii,jj)-p_0(ii,jj)*mu_t0)^2)/(p_0(ii,jj)*(1-p_0(ii,jj)));
if ( tr >= maximum )
threshold = ii;
maximum = tr;
end
end
end
3 commentaires
Geoff Hayes
le 29 Jan 2016
pramod - please clarify what you mean by it is not working. Are you observing an error, and if so, what is it (please copy and paste the full error message)? Or, are the results not what you expect. If this is the case, please describe your inputs (which you can attach as a mat file), what the outputs from the above are, and what they should be. Also, in the future, rather than copying and pasting your code into the question body, just attach the code (m file).
Harsha
le 29 Jan 2016
Modifié(e) : Geoff Hayes
le 29 Jan 2016
Prabhu Bevinamarad
le 13 Nov 2020
Hi,
I am new to Matlab. I wanted to apply two-dimensional Otsu's method for thresholding. I am not getting how to find hists i.e. 2D-histogram of grayscale value and neighborhood average grayscale value pair and total is the number of pairs in the given image which are passed as a parameters for otsu_2D function.Can anybody suggest which functions are used.
Thank you
Réponse acceptée
Plus de réponses (1)
Harsha
le 4 Déc 2016
0 votes
5 commentaires
Madhava Teja Munagala
le 23 Fév 2018
Hii harsha bro, im doing project on otsu 2d,,, im not understanding code,how to implement,plz help me
Harsha
le 23 Fév 2018
Madhava Teja Munagala
le 23 Fév 2018
Modifié(e) : Madhava Teja Munagala
le 25 Fév 2018
thank u harsha bro, i get output, how to analyze loop
Image Analyst
le 23 Fév 2018
Madhava, I don't understand what you said.
MAS
le 5 Avr 2018
It works absolutely fine for two clusters. Any suggestions to update it for handling multi-level thresholding!?
Catégories
En savoir plus sur Computer Vision with Simulink dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
