VL13: Singulaerwertzerlegung

close all;
clear all;
% Einlesen einer Bilddatei
A = imread('pic.jpg');
[d1,d2,d3] = size(A);
% Darstellung der Bilddatei
figure;
image(A)
% Umwandlung in double
A = double(A);
Ar = A(:,:,1); % rot
Ag = A(:,:,2); % gr?n
Ab = A(:,:,3); % blau
% 1. Variante: Aufstellung einer Matrix unter Verwendung aller Komponenten
B = [Ar,Ag,Ab];
% Singulaerwertzerlegung
[U,S,V] = svd(B,0);
% Komprimierung unter Verwendung der ersten k Singulaerwerte
k = 100;
Bk = U(:,1:k)*S(1:k,1:k)*V(:,1:k)';
% Umwandlung in integer
Bk = uint8(Bk);
Anew = reshape(Bk,d1,d2,d3);
% Darstellung der komprimierten Bilddatei
figure;
image(Anew)
close all;
clear all;
% Einlesen einer Bilddatei
A = imread('pic.jpg');
[d1,d2,d3] = size(A);

A = double(A);

k=50;
% 2. Variante: Wende svd auf jede Farbkomponente separat an
for i=1:3
    [U,S,V] = svd(A(:,:,i),0);
    B(:,:,i) = U(:,1:k)*S(1:k,1:k)*V(:,1:k)';
end

B = uint8(B);
figure
image(B)