help svd SVD Singular value decomposition. [U,S,V]=SVD(X) produces a diagonal matrix S .. ...with nonnegative diagonal elements in decreasing order, and unitary matrices U and V so that X = U*S*V'. close all image % Show the "default image" [C,Cm] = getframe; % Store it in Matrix C >> size(C) ans = 342 434What does the matrix look like.
>> C(25:30,100:106)
ans =
66 66 66 66 66 66 66
66 66 66 66 66 66 66
66 66 66 66 66 66 66
19 19 19 18 18 18 18
19 19 19 18 18 18 18
19 19 19 18 18 18 18
C=flipud(C); % Turn the matrix upside down,
% the original image is upside down
image(C);
title('Original image')
>> tic ; [U,S,V]=svd(C); toc
elapsed_time =
9.9156 % Time in seconds
figure
p=30;
M=zeros(size(C));
for i=1:p
M=M+S(i,i)*U(:,i)*V(:,i)';
%figure(i)
image(M);
title(['First ',num2str(i),' singular values'])
shg;pause
end;
![]() |
|
|
|
Some storage issues
>> whos
Name Size Bytes Class
C 342x434 1187424 double array
Cm 67x3 1608 double array
M 342x434 1187424 double array
S 342x434 1187424 double array
U 342x342 935712 double array
V 434x434 1506848 double array
Size of original image (bytes):
>> 342*434*8
ans =
1187424 = 1.12 M
Using 30 singular values
>> 342*30*2*8
ans =
164160 = 0.16 M
Using 16 singular values
>> 342*16*2*8
ans =
87552 87 K
image(reshape(1:64,8,8)) % See the colorscale