The goal of this programming assignment is to evaluate five linear and non-linear smoothing techniques to determine the "optimal" method for noise removal. This will be done by adding noise to images, performing smoothing, and calculating the mean squared error (MSE) between the original image and the smoothed-noise image. The combination of method/parameters with the lowest MSE will be declared "optimal".
To perform your experiments, you will add different types of synthetic noise to your input image. The im_short class provides three noise generating functions:
Once you have created several noisy images, you will be comparing the performance of the following five smoothing methods that are part of the im_short class:
In order to determine the "optimal" method for each type of noise, you must write a function that calculates the MSE between two images, and an automated framework to search for the best combination of smoothing parameters for each of the five methods above. To keep things simple, work with symmetric neighborhoods (xdim=ydim).
Before you implement your program to find "optimal" smoothing methods/parameters you should experiment using "menu" program. All of the methods listed above can be invoked using commands of the form "./menu method param1 param2 infile outfile". Use this information to select the noise generation parameters you want to use for each noise method, and to select a range of values to explore for each of the smoothing methods.
In this project, you will probably end up evaluating hundreds of combinations of methods/parameters to select the "optimal" method for each noise image. Save this testing output in tables that can be included in your written report. You may want to read portions of this data into a speadsheet to see if there are patterns in the MSE value as parameters vary.
When you have completed your C++ program, write a short report (less than one page long) describing what the objectives were, what you did, and the status of the program. Does it work properly for all test cases? Are there any known problems? Save this report in a separate text file to be submitted electronically.
In this class, we will be using electronic project submission to make sure that all students hand their programming projects and labs on time, and to perform automatic analysis of all programs that are submitted. When you have completed the tasks above go to the class web site to "submit" your documentation, C++ program, and testing files.
The dates on your electronic submission will be used to verify that you met the due date above. All late projects will receive reduced credit (50% off if less than 24 hours late, no credit if more than 24 hours late), so hand in your best effort on the due date.
You should also PRINT a copy of these files and hand them into your teaching assistant in your next lab. Include a title page which has your name and uaid, and attach your hand written design notes from above.