## how PCA can be applied to an image to reduce its dimensionality with example?

### G Prasanth Reddy (view profile)

on 24 Dec 2014
Latest activity Commented on by Image Analyst

on 25 Jul 2019

### Image Analyst (view profile)

This question was flagged by Walter Roberson

### Walter Roberson (view profile)

Dimensionality reduction

Ameerah Omar

### Ameerah Omar (view profile)

on 9 Nov 2015
i run your code but it is not work with me this error in the picture in the file plz see it and tell me what is the wrong

### Image Analyst (view profile)

on 24 Dec 2014

Here's code I got from Spandan, one of the developers of the Image Processing Toolbox at the Mathworks:
Here some quick code for getting principal components of a color image. This code uses the pca() function from the Statistics Toolbox which makes the code simpler.
X = reshape(I,size(I,1)*size(I,2),3);
coeff = pca(X);
Itransformed = X*coeff;
Ipc1 = reshape(Itransformed(:,1),size(I,1),size(I,2));
Ipc2 = reshape(Itransformed(:,2),size(I,1),size(I,2));
Ipc3 = reshape(Itransformed(:,3),size(I,1),size(I,2));
figure, imshow(Ipc1,[]);
figure, imshow(Ipc2,[]);
figure, imshow(Ipc3,[]);
In case you don’t want to use pca(), the same computation can be done without the use of pca() with a few more steps using base MATLAB functions.
Hope this helps.
-Spandan

Image Analyst

### Image Analyst (view profile)

on 5 Oct 2015
They are the principal components of the color image. It's like you rotated the R, G, and B axes so that it goes down through the major axis of the 3D color gamut.
pranav

### pranav (view profile)

2016 年 4 月 2 日
How can i create a new file with selected bands if my dimensions are 200x150x50 and i have selected few bands 1,3,5,11,24 and now want to change it to 200x150x5??
Image Analyst

### Image Analyst (view profile)

on 2 Apr 2016
Use cat(3, ....)
newImage = cat(3, data(:,:,1), data(:,:,3), data(:,:,5), data(:,:,11), data(:,:,24));

### Devan Marçal (view profile)

on 13 Aug 2015

Hi,
in your example you used PCA in just one image. I have an image bank a total of ~ 800 images. If I make a loop (if, while, etc ..) using the PCA function for each image individually, will be using this command wrong or inefficiently?
Thanks a lot.
Devan

Etworld

### Etworld (view profile)

on 3 Apr 2019
Hello, it is weird but, in line 114 it gives inner dimension error.
transformedImagePixelList = listOfRGBValues * coeff;
For 'coloredChips' image example, size(listOfRGBValues)=202538x3
size(coeff)=202538x2
Why do you think is happening ?
Darshan Jain

### Darshan Jain (view profile)

2019 年 7 月 25 日
Hey @ImageAnalyst,
I checked out your script, I had a small question, How could I plot the colored image back in three plots (showing approximation by pca1, then pca1 and pca2 and then followed by pca1, pca2 and pca3).
I tried doing using the imfuse comand "imfuse(pca1,pca2)", the clarity improved well, but i'm not able to reproduce the same colors. (see the attached image)
I think this is because I need to normalize the data, and then un-normalize it back before plotting. (I'm not sure though)
Image Analyst

### Image Analyst (view profile)

on 25 Jul 2019
Etworld, I just ran the colored chips image and it ran fine. Did you change my code at all?
Darshan: where did your colors come from? I don't understand what your "approximations" are supposed to be. But anyway, you can stitch images side by side if they are all RGB images to begin with:
wideImage = [rgbImage1, rgbImage2, rgbImage3];

### Ram (view profile)

on 9 Nov 2015

how to create additional columns in a image

Image Analyst

### Image Analyst (view profile)

on 9 Nov 2015
This is not related at all. Please start a new question.

### Shaveta Arora (view profile)

on 30 Jan 2016

Can I have the pca code used in this color image example

Image Analyst

### Image Analyst (view profile)

2016 年 1 月 31 日
You must not have the Statistics and Machine Learning Toolbox.
Shaveta Arora

### Shaveta Arora (view profile)

on 31 Jan 2016
Might possible. Pls share this pca function to save in my folder.
Image Analyst

### Image Analyst (view profile)

2016 年 1 月 31 日
I can't. It would not be legal. You either have to buy the toolbox from the Mathworks, or implement it yourself from low level code.

### Anitha Anbazhagan (view profile)

on 17 Sep 2016

I have 200 ROIs from each of the 50 images. For each ROI, I have 96 feature vectors for four different frequency bands. It seems very high dimensional. How to apply PCA for this? PCA should be applied to data matrix. Do I have to apply for each image or each ROI?

Image Analyst

### Image Analyst (view profile)

on 17 Sep 2016
It depends on if you want PCA components on each image individually, or the PCA components of the group as a whole.

### Mina Kh (view profile)

on 11 Dec 2016

Hi. I have multispectral( multi channel) data and I want to apply PCA to reduce the number of channel. Can u give me some hint?Which code i have to use?

### Arathy Das (view profile)

on 20 Dec 2016

How can i extract three texture features among the 22 using PCA?

Image Analyst

### Image Analyst (view profile)

on 20 Dec 2016
I think you should start your own discussion with your own data or images. If you have 22 PCA columns, then just extract the 3 you want as usual.
pca3 = pca22(:, 1:3); % or whatever.

### joynjo (view profile)

on 24 Mar 2018

How to visualize the result of PCA image in pseudocolor?

Image Analyst

### Image Analyst (view profile)

on 24 Mar 2018
imshow(PC1); % Display the first principal component image.
colormap(jet(256));

### F M Anim Hossain (view profile)

Answer by F M Anim Hossain

### F M Anim Hossain (view profile)

on 6 Apr 2018

I'm new to the concept of PCA. I'm trying to develop something that can recognize color features from different images. Is it possible to do it with the help of PCA?