The purpose of this assignment is to develop a framework for evaluating different noise removal techniques.
Your first task will be to write a "Compare" method that takes two images as input, which calculates the mean square error (MSE) and mean absolute error (MAE) difference between these images. These values can be returned in reference parameters.
You can test this method by using one of the noise generation methods (NoiseUniform, NoiseGaussian, or NoiseImpulse) to add noise to an image. Try a variety of noise parameters and keep track of the MSE and MAE for each case. Hopefully your errors will increase as you add more noise.
Your second task is to write a framework to evaluate two of the noise removal methods in our system, one linear method (Average, Binomial, or Gaussian) and one non-linear method (Median, or OutlierRemoval). These methods all have 1-2 input parameters. Your framework should search to find the combination of parameters for method X which minimizes MSE or MAE for the noise image you start with.
To test this framework, create six noise images using the three noise generation methods above (two of each). Then, calculate the optimal parameters for the linear method you selected. Finally, calculate the optimal parameters for the nonlinear method you selected. Which noise removal technique provided the best MSE and MAE for the test images? What conclusions can you make?
The calculation of MSE and MAE is relatively straightforward and should not cause problems. Searching for optimal parameters is a more challenging task. For integer parameters, you could use a brute force search if the valid parameters range is not too large.
For floating point parameters, the cost of the brute force search is inversely proportional to the step size between successive parameters, so there is a trade off between accuracy and speed. When the function being optimized is relatively smooth, it is possible to use binary search to refine floating point parameters. See what works best for this application.
My standard advice is to develop your code incrementally so you always have something that compiles and runs, even if it is not complete.
Test your program to check that it operates correctly for all of the requirements listed above. Also check for the error handling capabilities of the code. Save your testing output in text files for submission on the program due date.
When you have completed your 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, 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 instructor in the department office. Include a title page which has your name and uaid, and attach your hand written design notes from above.