42-505/705 Variational Image Processing

Carnegie Mellon University - Fall 2004
Professor Omar Ghattas

42-705 | setup | sundance | tutorial


42-505/705 Variational Image Processing


Course Info


News

12/12: A new version of the nonlinear solver has been uploaded. Copy this new version, nlsolver2.cpp, to your working directory. The line search in nlsolver2.cpp has been augmented and now it uses the objective functional as the default merit function. Only the line search part has been modified. We suggest that you build your code on top of nlsolver2.cpp. Email me (Alex) if you have problems.

12/2: The nonlinear solver code nlsolver.cpp is available. Download, compile, link, and run the code to see how it works. Check the comments on assignment #4 below on how to set up your homework solution. Send me (Alex) your questions if you find something is not working properly.

10/13: Variations on the minimum surface code that Omar and Alex demoed in class are available. They include ms.cpp, in which Sundance determines the gradient equation and Newton steps by finding first and second variations; ms-h.cpp in which Sundance determines the Newton step but we hand code the gradient; ms-hh.cpp, in which we hand everything; and ms-hh-picard.cpp, where we code a Picard step (i.e. an approximate Newton step based on modifying the Hessian).

9/22: The minimum surface code we have seen in class is available following this link.

9/15: The code that implements the Galerkin approximation is available. When we run this code with the same beta values used in the energy minimization code (see sep/8 note above) we obtain the same final images. That is, Ritz and Galerkin methods give the same result for this problem. You can visually compare the images obtained by both methods. Email me (Alex) if you have problems.

9/8: The Sundance code shown in class to perform energy minimization is available here. Once you have concluded the setup part, you can download this code to your working directory and experiment with different values of the parameter beta and target images. The set of images obtained for different beta values shown in class is available following this link. In this case, the target image size is 65 x 65 pixels, and it corresponds to a 64 x 64 mesh (remember: a M x N regular mesh has (M+1) x (N+1) vertices, and if the mesh is made up of triangular elements, it has M x N x 2 triangles; each pixel on the image corresponds to a unique vertex of the mesh). Email me (Alex) if you have problems.


Assignments

  1. hw1.pdf is now available. Visit the Sundance examples page and check the heat2D.cpp code to find out how to compute the L2 norm of the error. For the energy and H1 norms you will need to call the integral() method for their equivalent expressions.

  2. hw2.pdf is now available.

  3. hw3.pdf is now available. There are two sets of images you will need. The first case is the four circles image; both the original image circles.png and the noisy image circles-noisy.png can be found here. The second case is the Lena image. You can find the original image lena.png and noisy images corresponding to seven different levels of added noise in image directory (the noisy images are identified as "lenaXX.png", where XX refers to percent added noise). The Lena images are 200x200 pixels, so your finite element mesh size will be 199x199. Note also that if you use the image read/write utilities that Alex wrote, you should read in the .pnm versions of the images (also available in the image directory) rather than the .png versions. Finally, you can grab Alex's image read/write utilities from the top part of the galerkin.cpp code.

  4. hw4.pdf is available. The following codes are available to download (send me - Alex - an email if you have problems/questions):

    You might want to try your segmentation code in a smaller, simpler image before jumping to the brain image. The image balls.pnm, available in the images directory, may be a good candidate.