Mercurial > hg > camir-aes2014
diff 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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirhisto/mirhisto.m Tue Feb 10 15:05:51 2015 +0000 @@ -0,0 +1,117 @@ +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); \ No newline at end of file