 1  %=======================================================================


 2  % Copyright 20082014, LEGI UMR 5519 / CNRS UJF GINP, Grenoble, France


 3  % http://www.legi.grenobleinp.fr


 4  % Joel.Sommeria  Joel.Sommeria (A) legi.cnrs.fr


 5  %


 6  % This file is part of the toolbox UVMAT.


 7  %


 8  % UVMAT is free software; you can redistribute it and/or modify


 9  % it under the terms of the GNU General Public License as published


 10  % by the Free Software Foundation; either version 2 of the license,


 11  % or (at your option) any later version.


 12  %


 13  % UVMAT is distributed in the hope that it will be useful,


 14  % but WITHOUT ANY WARRANTY; without even the implied warranty of


 15  % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the


 16  % GNU General Public License (see LICENSE.txt) for more details.


 17  %=======================================================================


 18 


 19  function DataOut=im_levels(DataIn)


 20  %% set GUI config: no action defined


 21  DataOut=[]; %default output field


 22  if strcmp(DataIn,'*')


 23  return


 24  end


 25  %


 26  %parameters


 27  np=30


 28  %


 29  DataOut=DataIn;%default


 30 


 31  B=double(DataIn.A(:,:,1));


 32  windowsize=round(min(size(B,1),size(B,2))/20);


 33  windowsize=floor(windowsize/2)*2+1;


 34  ix=[1/2windowsize/2:1/2+windowsize/2];%


 35  %del=np/3;


 36  %fct=exp((ix/del).^2);


 37  fct2=cos(ix/((np1)/2)*pi/2);


 38  %Mfiltre=(ones(5,5)/5^2);


 39  %Mfiltre=fct2';


 40  Mfiltre=fct2'*fct2;


 41  Mfiltre=Mfiltre/(sum(sum(Mfiltre)));


 42 


 43  C=filter2(Mfiltre,B);


 44  C(:,1:windowsize)=C(:,windowsize)*ones(1,windowsize);


 45  C(:,endwindowsize+1:end)=C(:,endwindowsize+1)*ones(1,windowsize);


 46  C(1:windowsize,:)=ones(windowsize,1)*C(windowsize,:);


 47  C(endwindowsize+1:end,:)=ones(windowsize,1)*C(endwindowsize,:);


 48  C=tanh(B./(2*C));


 49  [n,c]=hist(reshape(C,1,[]),100);


 50  % figure;plot(c,n);


 51 


 52  [m,i]=max(n);


 53  c_max=c(i);


 54  [dummy,index]=sort(abs(cc(i)));


 55  n=n(index);


 56  c=c(index);


 57  i_select = find(cumsum(n)<0.95*sum(n));


 58  if isempty(i_select)


 59  i_select = 1:length(c);


 60  end


 61  c_select=c(i_select);


 62  n_select=n(i_select);


 63  cmin=min(c_select);


 64  cmax=max(c_select);


 65  C=(Ccmin)/(cmaxcmin)*256;


 66  DataOut.AA=uint8(C);


 67 


 68 


 69 


 70  DataOut.A=uint8(C);

