Merge branch 'master' of https://whale.am28.uni-tuebingen.de/git/teaching/scientificComputing
This commit is contained in:
commit
77ad5ed068
31
projects/project_pca_natural_images/solution/ConeResponse.m
Normal file
31
projects/project_pca_natural_images/solution/ConeResponse.m
Normal file
@ -0,0 +1,31 @@
|
||||
function Y = ConeResponse(X)
|
||||
|
||||
wl_r = 700;
|
||||
wl_g = 510;
|
||||
wl_b = 440;
|
||||
wl = [wl_r; wl_g; wl_b];
|
||||
|
||||
mu_s = 445;
|
||||
mu_m = 545;
|
||||
mu_l = 575;
|
||||
|
||||
sig_s = 20;
|
||||
sig_m = 40;
|
||||
sig_l = 45;
|
||||
|
||||
s = gauss(wl,mu_s,sig_s)/gauss(mu_s,mu_s,sig_s);
|
||||
m = gauss(wl,mu_m,sig_m)/gauss(mu_m,mu_m,sig_m);
|
||||
l = gauss(wl,mu_l,sig_l)/gauss(mu_l,mu_l,sig_l);
|
||||
|
||||
S = X'*s;
|
||||
M = X'*m;
|
||||
L = X'*l;
|
||||
|
||||
Y = [L, M, S]';
|
||||
%
|
||||
% close all
|
||||
% hold on
|
||||
% plot(lam,s,'b')
|
||||
% plot(lam,m,'g')
|
||||
% plot(lam,l,'r')
|
||||
% hold off
|
3
projects/project_pca_natural_images/solution/gauss.m
Normal file
3
projects/project_pca_natural_images/solution/gauss.m
Normal file
@ -0,0 +1,3 @@
|
||||
function Y = gauss(X,mu,sigma)
|
||||
Y = exp(-0.5*((X-mu)/sigma).^2)./sqrt(2*pi*sigma^2);
|
||||
% Y = Y/exp(-0.5*(mu/sigma).^2)./sqrt(2*pi*sigma^2);
|
65
projects/project_pca_natural_images/solution/main.m
Normal file
65
projects/project_pca_natural_images/solution/main.m
Normal file
@ -0,0 +1,65 @@
|
||||
clear all
|
||||
close all
|
||||
pic = imread('D:\Dokumente\MATLAB\Matlabkurs2018\pca\natimg.jpg');
|
||||
pic = pic(end:-1:1,:,:);
|
||||
|
||||
red = double(pic(:,:,1));
|
||||
green = double(pic(:,:,2));
|
||||
blue = double(pic(:,:,3));
|
||||
% mat = [red(:),green(:),blue(:)];
|
||||
|
||||
mat = reshape(double(pic),size(pic,1)*size(pic,2),size(pic,3))';
|
||||
cones = ConeResponse(mat);
|
||||
% [coeff, score, latent] = pca(mat,'Centered',false);
|
||||
% [coeff, score, latent] = pca(cones,'Centered',false);
|
||||
|
||||
% n = 10000;
|
||||
% cones = cones(:,randi([1,size(cones,2)],1,n));
|
||||
cones = mat;
|
||||
cv = cov(cones');
|
||||
[ev, ew] = eig(cv);
|
||||
[ew, ew_idx] = sort(diag(ew), 'descend');
|
||||
coeff = cones'*ev(:,ew_idx);
|
||||
% coeff = [coeff'; zeros(size(pic,1)*size(pic,2)-size(coeff,2),3)];
|
||||
|
||||
|
||||
c1 = reshape(coeff(:,1),size(pic,1),size(pic,2));
|
||||
c2 = reshape(coeff(:,2),size(pic,1),size(pic,2));
|
||||
c3 = reshape(coeff(:,3),size(pic,1),size(pic,2));
|
||||
|
||||
% score
|
||||
|
||||
figure
|
||||
subplot(221)
|
||||
contourf(red)
|
||||
axis('square')
|
||||
|
||||
subplot(222)
|
||||
contourf(green)
|
||||
axis('square')
|
||||
|
||||
subplot(223)
|
||||
contourf(blue)
|
||||
axis('square')
|
||||
colormap('gray')
|
||||
|
||||
subplot(224)
|
||||
imshow('D:\Dokumente\MATLAB\Matlabkurs2018\pca\natimg.jpg')
|
||||
axis('square')
|
||||
|
||||
figure
|
||||
subplot(221)
|
||||
contourf(c1)
|
||||
axis('square')
|
||||
|
||||
subplot(222)
|
||||
contourf(c2)
|
||||
axis('square')
|
||||
colormap('gray')
|
||||
|
||||
subplot(223)
|
||||
contourf(c3)
|
||||
axis('square')
|
||||
colormap('gray')
|
||||
|
||||
% score
|
Reference in New Issue
Block a user