Whitening a matrix is a useful preprocessing step in data analysis. The goal is to transform matrix X into matrix Y such that Y has identity covariance matrix. This is straightforward enough but in case you are too lazy to write such a function here’s how you might do it:
function [X] = whiten(X,fudgefactor) X = bsxfun(@minus, X, mean(X)); A = X'*X; [V,D] = eig(A); X = X*V*diag(1./(diag(D)+fudgefactor).^(1/2))*V'; end
You can read about bsxfun here if you are unfamiliar with this function. Because the results of whitening can be noisy, a fudge factor is used so that eigenvectors associated with small eigenvalues do not get overamplified. Thus the whitening is only approximate. Here’s an image patch whitened this way:
Unsurprisingly this accentuates high frequencies in the image. At the bottom you can see the covariance matrix of the set of natural image patches before and after whitening.
Update: Here’s the explanation for why this works as well as a reference you may cite.

Pingback: Using the SVD to estimate receptive fields « xcorr: computational neuroscience
Thanks for the snippet. But what would be a good value for fudgefactor? 0-1 or higher?
Something like 1e-6 times the largest eigenvalue of the A matrix.
Pingback: Whiten images in Matlab | xcorr: computational neuroscience