12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- % [N,X] = histo(MTX, nbinsOrBinsize, binCenter);
- %
- % Compute a histogram of (all) elements of MTX. N contains the histogram
- % counts, X is a vector containg the centers of the histogram bins.
- %
- % nbinsOrBinsize (optional, default = 101) specifies either
- % the number of histogram bins, or the negative of the binsize.
- %
- % binCenter (optional, default = mean2(MTX)) specifies a center position
- % for (any one of) the histogram bins.
- %
- % How does this differ from MatLab's HIST function? This function:
- % - allows uniformly spaced bins only.
- % +/- operates on all elements of MTX, instead of columnwise.
- % + is much faster (approximately a factor of 80 on my machine).
- % + allows specification of number of bins OR binsize. Default=101 bins.
- % + allows (optional) specification of binCenter.
- % Eero Simoncelli, 3/97.
- function [N, X] = histo(mtx, nbins, binCtr)
- %% NOTE: THIS CODE IS NOT ACTUALLY USED! (MEX FILE IS CALLED INSTEAD)
- fprintf(1,'WARNING: You should compile the MEX version of "histo.c",\n found in the MEX subdirectory of matlabPyrTools, and put it in your matlab path. It is MUCH faster.\n');
- mtx = mtx(:);
- %------------------------------------------------------------
- %% OPTIONAL ARGS:
- [mn,mx] = range2(mtx);
- if (exist('binCtr') ~= 1)
- binCtr = mean(mtx);
- end
- if (exist('nbins') == 1)
- if (nbins < 0)
- binSize = -nbins;
- else
- binSize = ((mx-mn)/nbins);
- tmpNbins = round((mx-binCtr)/binSize) - round((mn-binCtr)/binSize);
- if (tmpNbins ~= nbins)
- warning('Using %d bins instead of requested number (%d)',tmpNbins,nbins);
- end
- end
- else
- binSize = ((mx-mn)/101);
- end
- firstBin = binCtr + binSize*round( (mn-binCtr)/binSize );
- tmpNbins = round((mx-binCtr)/binSize) - round((mn-binCtr)/binSize);
- bins = firstBin + binSize*[0:tmpNbins];
- [N, X] = hist(mtx, bins);
|