Mercurial > hg > camir-aes2014
view toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirhisto/mirhisto.m @ 0:e9a9cd732c1e tip
first hg version after svn
author | wolffd |
---|---|
date | Tue, 10 Feb 2015 15:05:51 +0000 |
parents | |
children |
line wrap: on
line source
function varargout = mirhisto(x,varargin) % h = mirhisto(x) constructs the histogram from x. The elements of x are % binned into equally spaced containers. % Optional argument: % mirhisto(...,'Number',n): specifies the number of containers. % Default value : n = 10. % mirhisto(...,'Ampli'): adds the amplitude of the elements,instead of % simply counting then. n.key = 'Number'; n.type = 'Integer'; n.default = 10; option.n = n; a.key = 'Ampli'; a.type = 'Boolean'; a.default = 0; option.a = a; specif.option = option; varargout = mirfunction(@mirhisto,x,varargin,nargout,specif,@init,@main); function [x type] = init(x,option) type = 'mirhisto'; function h = main(x,option,postoption) if iscell(x) x = x{1}; end d = get(x,'Data'); %disp('Computing histogram...') ddd = cell(1,length(d)); bbb = cell(1,length(d)); for i = 1:length(d) di = d{i}{1}; % To be generalized for segmented data if iscell(di) mx = -Inf; mn = Inf; nc = size(di,2); for k = 1:nc dk = di{k}; if size(dk,4) == 2 dk(end+1:end*2,:,:,1) = dk(:,:,:,2); dk(:,:,:,2) = []; end mxk = max(dk); mnk = min(dk); if mxk > mx mx = mxk; end if mnk < mn mn = mnk; end end if isinf(mx) || isinf(mx) b = []; dd = []; else dd = zeros(1,option.n); if mn == mx b(1,:) = mn-ceil(option.n/2) : mn+floor(option.n/2); else b(1,:) = mn : (mx-mn)/option.n : mx; end for k = 1:nc dk = di{k}; for j = 1:option.n found = find(and(dk>=b(1,j),dk<=b(1,j+1))); if option.a dd(1,j) = dd(1,j) + sum(dk(found)); else dd(1,j) = dd(1,j) + length(found); end end end end else if isa(x,'mirscalar') di = permute(di,[3 2 1]); end if size(di,4) == 2 di(end+1:end*2,:,:,1) = di(:,:,:,2); di(:,:,:,2) = []; end nl = size(di,1); nc = size(di,2); np = size(di,3); dd = zeros(1,option.n,np); for l = 1:np mx = max(max(di(:,:,l),[],1),[],2); mn = min(min(di(:,:,l),[],1),[],2); b(l,:) = mn:(mx-mn)/option.n:mx; for k = 1:nc dk = di(:,k,l); for j = 1:option.n found = (find(and(dk>=b(l,j),dk<=b(l,j+1)))); if option.a dd(1,j,l) = dd(1,j,l) + sum(dk(found)); else dd(1,j,l) = dd(1,j,l) + length(found); end end end end end ddd{i} = ipermute(dd,[3 2 1]); bbb{i}(:,:,1) = b(:,1:end-1); bbb{i}(:,:,2) = b(:,2:end); end h = class(struct,'mirhisto',mirdata(x)); h = purgedata(h); h = set(h,'Bins',bbb,'Weight',ddd);