Test script for analysing experimental data with PCA - requires further development.
This commit is contained in:
parent
24392f2e35
commit
1d178a3d75
@ -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;
|
Loading…
Reference in New Issue
Block a user