SVD_GRAY SVD Compression of Grayscale Images

SVD_GRAY is a MATLAB program which reads a file containing a grayscale image and uses the singular value decomposition (SVD) to compute and display a series of low rank approximations to the image.

In MATLAB, images can be thought of as numeric arrays (although you do have to convert them from the uint8 numeric format used for images to the double format used for numeric arrays.)

Therefore, an MxN image A has an SVD decomposition A = U*S*V'.

For any 1 <= R <= min(M,N), a low rank approximation to A is formed by

```        Ar = U(1:m,1:r) * S(1:r,1:r) * V(1:n,1:r)';
```
Properties of the SVD guarantee that Ar is the best possible rank R approximation to the data in A. This means it is often possible to get a good approximation to A using much less data.

Languages:

SVD_GRAY is available in a MATLAB version.

Related Data and Programs:

SVD_BASIS, a MATLAB program which applies the singular value decomposition (SVD) to a collection of data vectors, extracting dominant modes;

svd_test, a MATLAB program which demonstrates the singular value decomposition (SVD) for a simple example.

SVD_FINGERPRINT, a MATLAB program which reads a file containing a fingerprint image and uses the Singular Value Decomposition (SVD) to compute and display a series of low rank approximations to the image.

SVD_SNOWFALL, a MATLAB program which reads a file containing historical snowfall data and analyzes the data with the Singular Value Decomposition (SVD).

SVD_TRUNCATED, a MATLAB program which demonstrates the computation of the reduced or truncated Singular Value Decomposition (SVD) that is useful for cases when one dimension of the matrix is much smaller than the other.

Reference:

1. Harry Andrews, Claude Patterson,
Outer Product Expansions and Their Uses in Digital Image Processing,
American Mathematical Monthly,
Volume 82, Number 1, January 1975, pages 1-13.
2. David Kahaner, Cleve Moler, Steven Nash,
Numerical Methods and Software,
Prentice Hall, 1989,
ISBN: 0-13-627258-4,
LC: TA345.K34.

Source Code:

• svd_gray.m, accepts the name of a gray scale image, computes the SVD, and calls svd_gray_approximate() to compute low rank approximations.
• svd_gray_approximate.m, uses a given SVD factorization to create an R-rank approximation of a gray scale image.
• timestamp.m, prints the YMDHMS date as a timestamp.