Project_01
Image Deblurring
I Can See Clearly Now


Reference:

  1. James Nagy, Dianne O'Leary,
    Image Deblurring: I Can See Clearly Now,
    Computing in Science and Engineering,
    Volume 5, Number 3, May/June 2003, pages 82-85.
  2. Dianne O'Leary,
    Scientific Computing with Case Studies,
    SIAM, 2008,
    ISBN13: 978-0-898716-66-5,
    LC: QA401.O44.


In our discussions about the SVD, we looked at what happens when a 2x2 matrix A multiplies vectors on the unit circle.

CIRCLE_FORWARD examines what happens when a 2x2 matrix A multiplies vectors on the unit circle.

COMPUTE_SPLUS takes the "S" factor of an SVD decomposition and computes the SPLUS factor used for the pseudoinverse.

PSEUDOINVERSE computes the pseudoinverse of a matrix. It needs the COMPUTE_SPLUS function.


It is possible to use a Kronecker product without actually forming it; this can be crucial when the Kronecker product would require a huge amount of storage.

The following MATLAB file demonstrates the implicit use of a Kronecker product:


The data for the project includes matrices A and B, and a blurred image G. Recall, from the article, that the matrices A and B are used to represent the big matrix K. K is the Kronecker product of A and B. A and B are of size 256x256, but K is much too big to work with. K will be of order (256*256)x(256*256). We want the SVD of K. Luckily, since K is a Kronecker product, its SVD can be computed by working with the smaller factors A and B, and determining factors UA and UB, SA and SB, VA and VB, such that K's SVD is the Kronecker product of these pairs. Without actually forming K or its SVD, we can carry out the work we need to do.

One way to get the data is as a MATLAB "mat" file:

To get the data, start up MATLAB, and issue the command

        load proj1data.mat
      
If you type the command
        whos
      
you will see that you have now loaded variables called A, B and G. To display the blurred image, use the command
        imagesc ( G ), colormap ( gray )
      

The data is also available as an ASCII file. In that case, you must write your own function to transfer the data from the file into your program.

In creating the ASCII file, the matrix A was written first, then B, then G. Each array is of dimension 256x256. The entries are written by rows. There are 4 numeric entries per line of the file, using the "E" or "exponential" format.


You can go up one level to the Computational Science Projects page.


Last revised on 10 February 2009.