Triangle method of thresholding - The right way to go for this image?

7 visualizaciones (últimos 30 días)
Joe Perkins
Joe Perkins el 11 de Abr. de 2017
Editada: Joe Perkins el 12 de Abr. de 2017
Hi - I'm after some advice with the triangle method (TM) for this image? Is it the right way to go? I used the TM demo to try and find a method of automatically identifying the threshold value to remove the background. TM gave me the blue line value, I know from manually playing around with an interactive tool that the threshold I want is at approx 40, the local minima in the bimodal distribution.
Many thanks!
%% Read image RGB image and convert to gray level %Reads RGB Ib=imread('LaLomaCoalOil.png'); %% [lehisto x]=imhist(Ib); [level]=triangle_th(lehisto,256); I_bw=im2bw(Ib,level);
function [level]=triangle_th(lehisto,num_bins)
% Find maximum of histogram and its location along the x axis [h,xmax]=max(lehisto); xmax=round(mean(xmax)); %can have more than a single value! h=lehisto(xmax);
% Find location of first and last non-zero values. % Values<h/10000 are considered zeros. indi=find(lehisto>h/10000); fnz=indi(1); lnz=indi(end);
% Pick side as side with longer tail. Assume one tail is longer. lspan=xmax-fnz; rspan=lnz-xmax; if rspan>lspan % then flip lehisto lehisto=fliplr(lehisto'); a=num_bins-lnz+1; b=num_bins-xmax+1; isflip=1; else lehisto=lehisto'; isflip=0; a=fnz; b=xmax; end
% Compute parameters of the straight line from first non-zero to peak % To simplify, shift x axis by a (bin number axis) m=h/(b-a);
% Compute distances x1=0:(b-a); y1=lehisto(x1+a); beta=y1+x1/m; x2=beta/(m+1/m); y2=m*x2; L=((y2-y1).^2+(x2-x1).^2).^0.5;
% Obtain threshold as the location of maximum L. level=find(max(L)==L); level=a+mean(level);
% Flip back if necessary if isflip level=num_bins-level+1; end
level=level/num_bins;

Respuestas (1)

Image Analyst
Image Analyst el 11 de Abr. de 2017
I don't think it would be robust enough. Depending on the exact heights of the bins, sometimes it might give you 60 while other times it would give you 40. Why not see what graythresh() gives you?
  1 comentario
Joe Perkins
Joe Perkins el 12 de Abr. de 2017
Editada: Joe Perkins el 12 de Abr. de 2017
Thanks for the answer. The comparison to greythresh() is on the same image but it picked a threshold value way of from the desired 40, similarily to the TM. Thanks

Iniciar sesión para comentar.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by