MATLAB: PCA OF AN IMAGE…

Image Processing ToolboxStatistics and Machine Learning Toolbox

I want to find PCA of an image… but when i run the code i get following error..
Error using – Integers can only be combined with integers of the same class, or scalar doubles. Error in pca (line 26) data = data – repmat(mn,1,N);
here is the code….'
function [signals,PC,V] = pca()
I = imread('C:\Users\div\Pictures\Picture1.png');
I = rgb2gray( I);
[irow, icol] = size(I);
data = reshape(I',irow*icol,1);
% [sR ,sC ,eR ,eC] = deal(1, 3, 2, 4);
% Compute the sum over the region using the integral image.
% PCA1: Perform PCA using covariance.
% data – MxN matrix of input data
% (M dimensions, N trials)
% signals – MxN matrix of projected data
% PC – each column is a PC
% V – Mx1 matrix of variances
[M,N] = size(data);
% subtract off the mean for each dimension
mn = mean(data,2);
data = data – repmat(mn,1,N);
% calculate the covariance matrix
covariance = 1 / (N-1) * data * data;
% find the eigenvectors and eigenvalues
[PC, V] = eig(covariance);
% extract diagonal of matrix as vector
V = diag(V);
% sort the variances in decreasing order
[junk, rindices] = sort(-1*V);
V = V(rindices); PC = PC(:,rindices);
% project the original data set
signals = PC * data;

Best Answer

That is a dangerous way that you used size(). See Steve's blog: http://blogs.mathworks.com/steve/2011/03/29/even-more-information-about-the-size-function/
A common way to deal with your error is to just convert everything to double. But if you do then you need to use [] to see your images or else they will show up as all white because double images are expected to be in the range 0-1.
imshow(doubleImage, []);
The [] will adjust the display to handle whatever range your array may have, and not require it to be in the 0-1 range.