Test script for analysing experimental data with PCA - requires further development.

This commit is contained in:
Karthik 2025-08-11 12:35:02 +02:00
parent 24392f2e35
commit 1d178a3d75

View File

@ -0,0 +1,78 @@
%% STEP 1: Generate synthetic image dataset
clear; close all; clc;
% Parameters
numImages = 50; % number of images in the dataset
imgSize = [50 50]; % image dimensions
% Preallocate array
images = zeros([imgSize, numImages]);
% Generate base features: a horizontal stripe + diagonal gradient
[x, y] = meshgrid(1:imgSize(2), 1:imgSize(1));
for k = 1:numImages
% Feature 1: horizontal stripe
stripe = double(y > 20 & y < 30);
% Feature 2: diagonal gradient
gradient = (x + y) / max(x(:) + y(:));
% Random variation in stripe intensity
stripeIntensity = 0.8 + 0.4*randn(1);
% Random rotation of gradient strength
gradIntensity = 0.5 + 0.2*randn(1);
% Combine features + Gaussian noise
images(:,:,k) = stripeIntensity*stripe + gradIntensity*gradient + 0.1*randn(imgSize);
end
%% STEP 2: Visualize some sample images
figure;
for i = 1:6
subplot(2,3,i);
imagesc(images(:,:,i));
axis image off; colormap gray;
title(sprintf('Image %d', i));
end
sgtitle('Sample Synthetic Images');
%% STEP 3: Reshape images into a 2D data matrix
% Each image is a row, each pixel is a column
X = reshape(images, [], numImages)'; % size: [numImages × numPixels]
%% STEP 4: Perform PCA
[coeff, score, latent, tsquared, explained] = pca(X);
% coeff : principal component directions (eigenvectors) in pixel space
% score : projection of each image onto the principal components
% latent : eigenvalues (variance captured by each PC)
% explained : percentage variance explained by each PC
%% STEP 5: Visualize variance explained
figure;
pareto(explained);
xlabel('Principal Component');
ylabel('Variance Explained (%)');
title('PCA Variance Explained');
%% STEP 6: View first few principal components as "eigenimages"
numPCsToShow = 4;
figure;
for i = 1:numPCsToShow
pcImage = reshape(coeff(:,i), imgSize); % reshape back to image form
subplot(1,numPCsToShow,i);
imagesc(pcImage);
axis image off; colormap gray;
title(sprintf('PC %d', i));
end
sgtitle('First Principal Components (Eigenimages)');
%% STEP 7: View projection (scores) in PC space
figure;
scatter(score(:,1), score(:,2), 50, 'filled');
xlabel('PC 1 Score');
ylabel('PC 2 Score');
title('Images in Principal Component Space');
grid on;