annotate toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirhisto/mirhisto.m @ 0:cc4b1211e677 tip

initial commit to HG from Changeset: 646 (e263d8a21543) added further path and more save "camirversion.m"
author Daniel Wolff
date Fri, 19 Aug 2016 13:07:06 +0200
parents
children
rev   line source
Daniel@0 1 function varargout = mirhisto(x,varargin)
Daniel@0 2 % h = mirhisto(x) constructs the histogram from x. The elements of x are
Daniel@0 3 % binned into equally spaced containers.
Daniel@0 4 % Optional argument:
Daniel@0 5 % mirhisto(...,'Number',n): specifies the number of containers.
Daniel@0 6 % Default value : n = 10.
Daniel@0 7 % mirhisto(...,'Ampli'): adds the amplitude of the elements,instead of
Daniel@0 8 % simply counting then.
Daniel@0 9
Daniel@0 10
Daniel@0 11 n.key = 'Number';
Daniel@0 12 n.type = 'Integer';
Daniel@0 13 n.default = 10;
Daniel@0 14 option.n = n;
Daniel@0 15
Daniel@0 16 a.key = 'Ampli';
Daniel@0 17 a.type = 'Boolean';
Daniel@0 18 a.default = 0;
Daniel@0 19 option.a = a;
Daniel@0 20
Daniel@0 21 specif.option = option;
Daniel@0 22
Daniel@0 23
Daniel@0 24 varargout = mirfunction(@mirhisto,x,varargin,nargout,specif,@init,@main);
Daniel@0 25
Daniel@0 26
Daniel@0 27 function [x type] = init(x,option)
Daniel@0 28 type = 'mirhisto';
Daniel@0 29
Daniel@0 30
Daniel@0 31 function h = main(x,option,postoption)
Daniel@0 32 if iscell(x)
Daniel@0 33 x = x{1};
Daniel@0 34 end
Daniel@0 35 d = get(x,'Data');
Daniel@0 36 %disp('Computing histogram...')
Daniel@0 37 ddd = cell(1,length(d));
Daniel@0 38 bbb = cell(1,length(d));
Daniel@0 39 for i = 1:length(d)
Daniel@0 40 di = d{i}{1}; % To be generalized for segmented data
Daniel@0 41 if iscell(di)
Daniel@0 42 mx = -Inf;
Daniel@0 43 mn = Inf;
Daniel@0 44 nc = size(di,2);
Daniel@0 45 for k = 1:nc
Daniel@0 46 dk = di{k};
Daniel@0 47 if size(dk,4) == 2
Daniel@0 48 dk(end+1:end*2,:,:,1) = dk(:,:,:,2);
Daniel@0 49 dk(:,:,:,2) = [];
Daniel@0 50 end
Daniel@0 51 mxk = max(dk);
Daniel@0 52 mnk = min(dk);
Daniel@0 53 if mxk > mx
Daniel@0 54 mx = mxk;
Daniel@0 55 end
Daniel@0 56 if mnk < mn
Daniel@0 57 mn = mnk;
Daniel@0 58 end
Daniel@0 59 end
Daniel@0 60 if isinf(mx) || isinf(mx)
Daniel@0 61 b = [];
Daniel@0 62 dd = [];
Daniel@0 63 else
Daniel@0 64 dd = zeros(1,option.n);
Daniel@0 65 if mn == mx
Daniel@0 66 b(1,:) = mn-ceil(option.n/2) : mn+floor(option.n/2);
Daniel@0 67 else
Daniel@0 68 b(1,:) = mn : (mx-mn)/option.n : mx;
Daniel@0 69 end
Daniel@0 70 for k = 1:nc
Daniel@0 71 dk = di{k};
Daniel@0 72 for j = 1:option.n
Daniel@0 73 found = find(and(dk>=b(1,j),dk<=b(1,j+1)));
Daniel@0 74 if option.a
Daniel@0 75 dd(1,j) = dd(1,j) + sum(dk(found));
Daniel@0 76 else
Daniel@0 77 dd(1,j) = dd(1,j) + length(found);
Daniel@0 78 end
Daniel@0 79 end
Daniel@0 80 end
Daniel@0 81 end
Daniel@0 82 else
Daniel@0 83 if isa(x,'mirscalar')
Daniel@0 84 di = permute(di,[3 2 1]);
Daniel@0 85 end
Daniel@0 86 if size(di,4) == 2
Daniel@0 87 di(end+1:end*2,:,:,1) = di(:,:,:,2);
Daniel@0 88 di(:,:,:,2) = [];
Daniel@0 89 end
Daniel@0 90 nl = size(di,1);
Daniel@0 91 nc = size(di,2);
Daniel@0 92 np = size(di,3);
Daniel@0 93 dd = zeros(1,option.n,np);
Daniel@0 94 for l = 1:np
Daniel@0 95 mx = max(max(di(:,:,l),[],1),[],2);
Daniel@0 96 mn = min(min(di(:,:,l),[],1),[],2);
Daniel@0 97 b(l,:) = mn:(mx-mn)/option.n:mx;
Daniel@0 98 for k = 1:nc
Daniel@0 99 dk = di(:,k,l);
Daniel@0 100 for j = 1:option.n
Daniel@0 101 found = (find(and(dk>=b(l,j),dk<=b(l,j+1))));
Daniel@0 102 if option.a
Daniel@0 103 dd(1,j,l) = dd(1,j,l) + sum(dk(found));
Daniel@0 104 else
Daniel@0 105 dd(1,j,l) = dd(1,j,l) + length(found);
Daniel@0 106 end
Daniel@0 107 end
Daniel@0 108 end
Daniel@0 109 end
Daniel@0 110 end
Daniel@0 111 ddd{i} = ipermute(dd,[3 2 1]);
Daniel@0 112 bbb{i}(:,:,1) = b(:,1:end-1);
Daniel@0 113 bbb{i}(:,:,2) = b(:,2:end);
Daniel@0 114 end
Daniel@0 115 h = class(struct,'mirhisto',mirdata(x));
Daniel@0 116 h = purgedata(h);
Daniel@0 117 h = set(h,'Bins',bbb,'Weight',ddd);