Principal component analysis is a statistical technique that
is used in finding patterns and reducing the dimensions of multi-dimensional
data. There is an excellent tutorial by Lindsay I Smith on this topic so I will
be focusing more on the application part in this post.

Let’s start with the image compression application in this
post.

**EXAMPLE:**

**MATLAB CODE:**

clear all

clc

%READ A GRAYSCALE IMAGE

I = imread('cameraman.tif');

figure(1),subplot(121),imshow(I);title('INPUT IMAGE');

A = double(I);

%MEAN OF EACH COLUMN IN THE
IMAGE

meanCols = mean(A,1);

%SUBTRACT THE MEAN VALUE OF
EACH COLUMN

for k = 1:size(A,1)

A(k,:) = A(k,:)-meanCols;

end

%COMPUTE COVARIANCE MATRIX

covmat = cov(A);

%OBTAIN EIGEN VALUES

[coeff,D] = eig(covmat);

coeff = fliplr(coeff);

figure(2),imagesc(coeff);colormap(jet);

FV = coeff(:,1:50)'; %PRINCIPAL
COMPONENT

Res = FV*A';

%RECONSTRUCTION

Org = (FV'*Res)';

%ADD THE MEAN VALUES OF THE
COLUMN

Output = zeros(size(A));

for k = 1:size(A,1)

Output(k,:) = Org(k,:)+meanCols;

end

Output = uint8(Output);

figure(1),subplot(122),imshow(Output);title('RESTORED
IMAGE');

**EXAMPLE 2:**

Let’s consider the LANDSAT-8 dataset. I have chosen the following bands.

Band 2– BLUE,

Band 3 – Green,

Band 4 – Red,

Band 5 – NIR

Band 6 - SWIR-1

Band 7 – SWIR-2

**MATLAB CODE:**

clear all

% READ ALL THE TIF IMAGE
NAMES

fnames = dir('*.TIF');

dim1=400;

dim2=950;

C=[];

inc=1;

%CREATE A VOXEL OF IMAGES

for k = [4,5,6,7,8,9];

A = imread(fnames(k).name);

A = A(1901:2300,2251:3300);

inc=inc+1;

C =[C,A(:)];

end

C1 = double(C);

%SUBTRACT THE MEAN

meanval = zeros([1,size(C,2)]);

for k = 1:size(C,2)

meanval(1,k) = mean(squeeze(C(:,k)));

C1(:,k) = C1(:,k)- meanval(1,k);

end

%PERFORM PCA ANALYSIS

coeff = pca(C1,'Algorithm','eig');

figure,imagesc(coeff);colormap(jet);

FV=coeff(:,[1:3])'; %PRINCIPAL
COMPONENTS

Res = FV*C1';

%RECONSTRUCTION

Org = (FV'*Res)';

%2-Blue, 3-Green 4-Red, 5-NIR, 6 and 7 SWIR-1 and 2

%NATURAL COLOR

%ADD THE MEAN VALUE

R1 = Org(:,3)+mean(C(:,3));

G1 = Org(:,2)+mean(C(:,2));

B1 = Org(:,1)+mean(C(:,1));

R1= reshape(R1,[size(A,1)
size(A,2)]);

G1= reshape(G1,[size(A,1)
size(A,2)]);

B1= reshape(B1,[size(A,1)
size(A,2)]);

%ENHANCE THE CONTRAST

R1 = BCET16(0,65535,20000,R1);

G1 = BCET16(0,65535,20000,G1);

B1 = BCET16(0,65535,20000,B1);

Output = zeros([size(A,1)
size(A,2) 3]);

Output(:,:,1)=R1;

Output(:,:,2)=G1;

Output(:,:,3)=B1;

figure(8),imagesc(uint16(Output));title('Natural
Color');

%6-SWIR-2,4-NIR,2-GREEN

%ADD THE MEAN VALUE

R1 = Org(:,6)+mean(C(:,6));

G1 = Org(:,4)+mean(C(:,4));

B1 = Org(:,2)+mean(C(:,2));

R1= reshape(R1,[size(A,1) size(A,2)]);

G1= reshape(G1,[size(A,1)
size(A,2)]);

B1= reshape(B1,[size(A,1)
size(A,2)]);

%ENHANCE THE CONTRAST

R1 = BCET16(0,65535,25000,R1);

G1 = BCET16(0,65535,25000,G1);

B1 = BCET16(0,65535,25000,B1);

Output1 = zeros([size(A,1)
size(A,2) 3]);

Output1(:,:,1)=R1;

Output1(:,:,2)=G1;

Output1(:,:,3)=B1;

figure(4),imagesc(uint16(Output1));title('Vegetation
and Water');

%SWIR-1, SWIR-2,Red

%Urban

%ADD THE MEAN VALUE

R1 = Org(:,6)+mean(C(:,6));

G1 = Org(:,5)+mean(C(:,5));

B1 = Org(:,3)+mean(C(:,3));

R1= reshape(R1,[size(A,1)
size(A,2)]);

G1= reshape(G1,[size(A,1)
size(A,2)]);

B1= reshape(B1,[size(A,1)
size(A,2)]);

%ENHANCE THE CONTRAST

R1 = BCET16(0,65535,25000,R1);

G1 = BCET16(0,65535,25000,G1);

B1 = BCET16(0,65535,25000,B1);

Output2 = zeros([size(A,1)
size(A,2) 3]);

Output2(:,:,1)=R1;

Output2(:,:,2)=G1;

Output2(:,:,3)=B1;

figure(5),imagesc(uint16(Output2));title('Urban
Environment');

%SWIR-1,NIR,RED(4,3,2)

%Color IR

%ADD THE MEAN VALUE

R1 = Org(:,4)+mean(C(:,4));

G1 = Org(:,3)+mean(C(:,3));

B1 = Org(:,2)+mean(C(:,2));

R1= reshape(R1,[size(A,1)
size(A,2)]);

G1= reshape(G1,[size(A,1)
size(A,2)]);

B1= reshape(B1,[size(A,1)
size(A,2)]);

%ENHANCE THE CONTRAST

R1 = BCET16(0,65535,25000,R1);

G1 = BCET16(0,65535,25000,G1);

B1 = BCET16(0,65535,25000,B1);

Output3 = zeros([size(A,1)
size(A,2) 3]);

Output3(:,:,1)=R1;

Output3(:,:,2)=G1;

Output3(:,:,3)=B1;

figure(6),imagesc(uint16(Output3));title('Color IR');

**EXPLANATION:**

The total number of bands chosen is 6. PC1, PC2 and PC3 are used to
reconstruct the 6 bands. PC1 is the largest contributor. By combining different bands together we obtain
natural color, urban environment, vegetation and color IR.

NOTE: The dataset is obtained from https://landsatlook.usgs.gov/

The function BCET16 is used to enhance the contrast. Save the below
function as BCET16.m and make sure the m file is available in the current working
directory.

function
y=BCET16(Gmin,Gmax,Gmean,x)

%BALANCE CONTRAST ENHANCEMENT
TECHNIQUE

x
= double(x); % INPUT IMAGE

Lmin = min(x(:)); % MINIMUM OF
INPUT IMAGE

Lmax = max(x(:)); % MAXIMUM
OF INPUT IMAGE

Lmean = mean(x(:)); %MEAN OF
INPUT IMAGE

LMssum = mean(x(:).^2); %MEAN
SQUARE SUM OF INPUT IMAGE

bnum = Lmax.^2*(Gmean-Gmin) -
LMssum*(Gmax-Gmin) + Lmin.^2*(Gmax-Gmean);

bden =
2*(Lmax*(Gmean-Gmin)-Lmean*(Gmax-Gmin)+Lmin*(Gmax-Gmean));

b = bnum/bden;

a =
(Gmax-Gmin)/((Lmax-Lmin)*(Lmax+Lmin-2*b));

c = Gmin - a*(Lmin-b).^2;

y = a*(x-b).^2+c; %PARABOLIC
FUNCTION

y = uint16(y);

end

To learn more about BCET check, Balance Contrast Enhancement Technique

## 5 comments:

Hello sir, I have a number of satellite images and I want to reduce their dimensions using two methods (factor analysis and multidimensional scaling), do you have a code for these two methods please, can you help me please, I am very need for any help and I would be thankful to you

Hello sir, I have a number of satellite images and I want to reduce their dimensions using two methods (factor analysis and multidimensional scaling), do you have a code for these two methods or any of them please, can you help me please, I am very need for any help and I would be thankful to you

Dual Polynomial Thresholding For Transform

Denoising In Application To Local Pixel Grouping

Method

Plz send this code

sir i have hyperion datasets i want to do the spectral unmixing can you please send me the code

sir i have hyperion data sets which is hyperspectral image i want to do spectral unmixing can you send me the code

## Enjoyed Reading? Share Your Views