Filter löschen
Filter löschen

PCA OF AN IMAGE...

10 Ansichten (letzte 30 Tage)
divya
divya am 23 Mai 2013
Beantwortet: Shaveta Arora am 1 Feb. 2016
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;

Akzeptierte Antwort

Image Analyst
Image Analyst am 24 Mai 2013
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.
  4 Kommentare
divya
divya am 24 Mai 2013
Undefined function 'eig' for input arguments of type 'uint8'.
Error in pca (line 46) [PC, V] = eig(covariance);
still getting this error.....:(
Image Analyst
Image Analyst am 24 Mai 2013
So cast it to double, or do
which eig

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (3)

yagnesh
yagnesh am 24 Mai 2013
try data = double(data)- double(repmat(mn,1,N));

farahnaz
farahnaz am 22 Mär. 2014
please use this cod :
function [signals,PC,V] = pca() I=imread('G:\Users\farahnaz\Downloads\018.jpg'); b= im2double(I); imshow(b, []); [irow, icol] = size(b); data = reshape(b',irow*icol,1);
[M,N] = size(data);
mn = mean(data,2);
data = data - repmat(mn,1,N);
covariance = cov(data)';
[PC, V] = eig(covariance);
V = diag(V);
[junk, rindices] = sort(-1*V);
V = V(rindices); PC = PC(:,rindices);
  4 Kommentare
Shaveta Arora
Shaveta Arora am 31 Jan. 2016
pls elaborate about the pcimage variable. how to get PC image as 2D
Image Analyst
Image Analyst am 31 Jan. 2016
I don't see how he's getting PC images. There aren't any. You can see my attached demo if you want.

Melden Sie sich an, um zu kommentieren.


Shaveta Arora
Shaveta Arora am 1 Feb. 2016
actually I want to recover the image using principal components after the following instruction:
% project the original data set
signals = PC * data;
pls help me in recovering the image.

Tags

Noch keine Tags eingegeben.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by