diff --git a/tt.m b/tt.m index 0ee8045a9ed8c46067c5fe01fe68070e3dbda702..83c9373f094f115bb712e81000ffd006cd1e9754 100644 --- a/tt.m +++ b/tt.m @@ -23,6 +23,9 @@ function [a_out, b_out, c_out]=tt(x) % $Revision$ % % $Log$ +% Revision 3.4 2007/12/20 16:26:57 marwan +% includes also white vertical lines +% % Revision 3.3 2005/11/23 07:29:14 marwan % help text updated % @@ -44,94 +47,111 @@ if nargout>3, error('Too many output arguments'), end %a_out = NaN; b_out = NaN; c_out = NaN; warning off -if any(x(:)) +try + + if any(x(:)) + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % for black vertical lines + xb=double(x); + xb(end+1,:)=0;xb=double(xb(:)); + z=diff(xb); + z0=find(z==1); % begin of black sequence + z1=find(z==-1); % end of black sequence + + + % measure the length of black lines + if z0(1)>z1(1) + z0(2:end+1,1)=z0(1:end);z0(1,1)=0; + if length(z0)>length(z1) + z0(end)=[]; + end + end + + t=sort(z1-z0); + t1=t(find(t-1)); + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % for white vertical lines + for i = 1:size(x,2) + i_ = find(x(:,i)); + i1 = min(i_); i2 = max(i_); + x(1:i1,i) = 1; + x(i2:end,i) = 1; + end + + xw=double(x); xw(end+1,:)=1; + zw=diff(xw(:)); + z0w=find(zw==-1); % begin of white sequence + z1w=find(zw==1); % end of white sequence + + + % measure the length of white lines + if z0w(1)>z1w(1) + z0w(1)=[]; + if length(z1w)>length(z0w) + z1w(end)=[]; + end + end + if length(z1w)>length(z0w) + z0w=[1;z0w]; + end + tw=sort(z1w-z0w); + t1w=tw(find(tw-1)); + if nargout==3 + c_out=zeros(length(tw),1); + c_out=tw; + end -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% for black vertical lines - xb=double(x); - xb(end+1,:)=0;xb=double(xb(:)); - z=diff(xb); - z0=find(z==1); % begin of black sequence - z1=find(z==-1); % end of black sequence - + if nargout>=2 + b_out=zeros(length(t),1); + b_out=t; + end - % measure the length of black lines - if z0(1)>z1(1) - z0(2:end+1)=z0(1:end);z0(1)=0; - if length(z0)>length(z1) - z0(end)=[]; + if nargout>0 + if isempty(t1), a_out=0; + else, a_out=mean(t1); + end + else + mean(t1) + end + + else + + if nargout==3 + c_out=NaN; + end + + if nargout>=2 + b_out=NaN; + end + + if nargout>0 + a_out=NaN; + else + NaN + end + + end + + warning on + +catch + if nargout==3 + c_out=NaN; end - end - - t=sort(z1-z0); - t1=t(find(t-1)); - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% for white vertical lines - for i = 1:size(x,2) - i_ = find(x(:,i)); - i1 = min(i_); i2 = max(i_); - x(1:i1,i) = 1; - x(i2:end,i) = 1; - end - - xw=double(x); xw(end+1,:)=1; - zw=diff(xw(:)); - z0w=find(zw==-1); % begin of white sequence - z1w=find(zw==1); % end of white sequence - - - - % measure the length of white lines - if z0w(1)>z1w(1) - z0w(1)=[]; - if length(z1w)>length(z0w) - z1w(end)=[]; + + if nargout>=2 + b_out=NaN; end - end - if length(z1w)>length(z0w) - z0w=[1;z0w]; - end - - tw=sort(z1w-z0w); - t1w=tw(find(tw-1)); - - if nargout==3 - c_out=zeros(length(tw),1); - c_out=tw; - end - - if nargout>=2 - b_out=zeros(length(t),1); - b_out=t; - end - - if nargout>0 - if isempty(t1), a_out=0; - else, a_out=mean(t1); - end - else - mean(t1) - end - -else - - if nargout==3 - c_out=NaN; - end - - if nargout>=2 - b_out=NaN; - end - - if nargout>0 - a_out=NaN; - else - NaN - end + if nargout>0 + a_out=NaN; + else + NaN + end end - -warning on