two-dimensional Otsu's method
이전 댓글 표시
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
Geoff Hayes
2016년 1월 29일
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
2016년 1월 29일
편집: Geoff Hayes
2016년 1월 29일
Prabhu Bevinamarad
2020년 11월 13일
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
채택된 답변
추가 답변 (1개)
Harsha
2016년 12월 4일
0 개 추천
댓글 수: 5
Madhava Teja Munagala
2018년 2월 23일
Hii harsha bro, im doing project on otsu 2d,,, im not understanding code,how to implement,plz help me
Harsha
2018년 2월 23일
Madhava Teja Munagala
2018년 2월 23일
편집: Madhava Teja Munagala
2018년 2월 25일
thank u harsha bro, i get output, how to analyze loop
Image Analyst
2018년 2월 23일
Madhava, I don't understand what you said.
MAS
2018년 4월 5일
It works absolutely fine for two clusters. Any suggestions to update it for handling multi-level thresholding!?
카테고리
도움말 센터 및 File Exchange에서 Computer Vision with Simulink에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
