Daniel@0: function varargout = mirstd(f,varargin) Daniel@0: % m = mirstd(f) returns the standard deviation along frames of the feature f Daniel@0: % Daniel@0: % f can be a structure array composed of features. In this case, Daniel@0: % m will be structured the same way. Daniel@0: Daniel@0: if isa(f,'mirstruct') Daniel@0: data = get(f,'Data'); Daniel@0: for fi = 1:length(data) Daniel@0: data{fi} = mirstd(data{fi}); Daniel@0: end Daniel@0: varargout = {set(f,'Data',data)}; Daniel@0: elseif isstruct(f) Daniel@0: fields = fieldnames(f); Daniel@0: for i = 1:length(fields) Daniel@0: field = fields{i}; Daniel@0: stat.(field) = mirstd(f.(field)); Daniel@0: end Daniel@0: varargout = {stat}; Daniel@0: else Daniel@0: Daniel@0: normdiff.key = 'NormDiff'; Daniel@0: normdiff.type = 'Boolean'; Daniel@0: normdiff.default = 0; Daniel@0: specif.option.normdiff = normdiff; Daniel@0: Daniel@0: specif.nochunk = 1; Daniel@0: Daniel@0: varargout = mirfunction(@mirstd,f,varargin,nargout,specif,@init,@main); Daniel@0: end Daniel@0: Daniel@0: Daniel@0: function [x type] = init(x,option) Daniel@0: type = ''; Daniel@0: Daniel@0: Daniel@0: function m = main(f,option,postoption) Daniel@0: if iscell(f) Daniel@0: f = f{1}; Daniel@0: end Daniel@0: if isa(f,'mirhisto') Daniel@0: warning('WARNING IN MIRSTD: histograms are not taken into consideration yet.') Daniel@0: m = struct; Daniel@0: return Daniel@0: end Daniel@0: fp = get(f,'FramePos'); Daniel@0: ti = get(f,'Title'); Daniel@0: d = get(f,'Data'); Daniel@0: l = length(d); Daniel@0: for i = 1:l Daniel@0: if iscell(d{i}) Daniel@0: if length(d{i}) > 1 Daniel@0: error('ERROR IN MIRSTD: segmented data not accepted yet.'); Daniel@0: else Daniel@0: dd = d{i}{1}; Daniel@0: end Daniel@0: else Daniel@0: dd = d{i}; Daniel@0: end Daniel@0: if iscell(dd) Daniel@0: m{i} = {zeros(1,length(dd))}; Daniel@0: for j = 1:length(dd) Daniel@0: m{i}{1}(j) = std(dd{j}); Daniel@0: end Daniel@0: elseif size(dd,2) < 2 Daniel@0: nonan = find(not(isnan(dd))); Daniel@0: dn = dd(nonan); Daniel@0: if option.normdiff Daniel@0: m{i}{1} = norm(diff(dn,2)); Daniel@0: else Daniel@0: m{i}{1} = std(dn,0,2); Daniel@0: end Daniel@0: else Daniel@0: dd = mean(dd,4); Daniel@0: m{i} = {NaN(size(dd,1),1,size(dd,3))}; Daniel@0: for k = 1:size(dd,1) Daniel@0: for l = 1:size(dd,3) Daniel@0: dk = dd(k,:,l); Daniel@0: nonan = find(not(isnan(dk))); Daniel@0: if not(isempty(nonan)) Daniel@0: dn = dk(nonan); Daniel@0: if option.normdiff Daniel@0: m{i}{1}(k,1,l) = norm(diff(dn,2)); Daniel@0: else Daniel@0: m{i}{1}(k,1,l) = std(dn,0,2); Daniel@0: end Daniel@0: end Daniel@0: end Daniel@0: end Daniel@0: end Daniel@0: end Daniel@0: m = mirscalar(f,'Data',m,'Title',['Standard deviation of ',ti]);