1234567891011121314151617181920212223242526272829303132333435 |
- % RES = histoMatch(MTX, N, X)
- %
- % Modify elements of MTX so that normalized histogram matches that
- % specified by vectors X and N, where N contains the histogram counts
- % and X the histogram bin positions (see histo).
- % Eero Simoncelli, 7/96.
- function res = histoMatch(mtx, N, X)
- if ( exist('histo') == 3 )
- [oN, oX] = histo(mtx(:), size(X(:),1));
- else
- [oN, oX] = hist(mtx(:), size(X(:),1));
- end
- oStep = oX(2) - oX(1);
- oC = [0, cumsum(oN)]/sum(oN);
- oX = [oX(1)-oStep/2, oX+oStep/2];
- N = N(:)';
- X = X(:)';
- N = N + mean(N)/(1e8); %% HACK: no empty bins ensures nC strictly monotonic
- nStep = X(2) - X(1);
- nC = [0, cumsum(N)]/sum(N);
- nX = [X(1)-nStep/2, X+nStep/2];
- nnX = interp1(nC, nX, oC, 'linear');
- if ( exist('pointOp') == 3 )
- res = pointOp(mtx, nnX, oX(1), oStep);
- else
- res = reshape(interp1(oX, nnX, mtx(:)),size(mtx,1),size(mtx,2));
- end
|