Histogram equalization and matching

Project goal

You are given a set of images which require enhancement. Some images are dark, while others are light, low contrast, or high contrast. How do you enhance these images?

Project description

There are several techniques for image enhancement. Histogram equalization is a technique for enhancing the visual quality of dark, light, low contrast, and high contrast images. Histogram equalization automatically determines a transformation function which applied on the input image produces an image that has an approximately uniform histogram. An image with a uniform histogram shows a great deal of detail and high dynamic range.

In some application domains, uniform histogram-based image enhancement is not appropriate. In such applications, a user specifies the shape of the histogram that the processed image should have. The method used to generate an output image with the specified histogram from an input image is called histogram specification or histogram matching.

Solution steps

Apply both histogram equalization and histogram specification techniques to enhance the given set of images. Comment on the relative merits and limitations of these two techniques.

Reflecting on the learning experience and teamwork

Reflect on your solution to the problem and the learning experience through this project. Trust building, connectedness, and psychological safety are the foundational elements of teamwork. Reflect on the team dynamic experienced in this project.

Team member contribution/effort assessment

Use the following rubric to rate yourself and your teams members on a scale of 1 to 5 about their individual contribution to the project (a rating of 1 being poor and 5 being outstanding). Also, please provide rationale for each rating.

Self-assessment Assess team member 1 Assess team member 2
Responsibilities/ Performance Rating Rationale Rating Rationale Rating Rationale
Attended classes and group meetings
Initiated communication and interaction with group members
Contributed and committed to the group project
Provided comments and feedback in group work
Demonstrated a positive attitude towards to the project
Any other comments

Rubric for self-assessment and grading

Use the following rubric for self-assessment and peer grading. Also, the instructor will use the same rubric for grading the project. The final grade for the project will be based on scores from the self-assessment, peer-grading and instructor grading.

Good Fair Poor
Conformance to Specifications (40 points) The program works correctly and meets all of the specifications. (40 points). The program works correctly but implements less than 50% of the specifications. (30 points) The program produces incorrect results or does not compile. (10 points)
Data Structures and Algorithms (20 points) Appropriate and efficient data structures and algorithms are used. (20 points) The data structures and algorithms used get the job done but they are neither a natural fit nor efficient. (10 points) Solution is based on brute force approach. No consideration is given to selection of suitable data structures and algorithms. (5 points)
Testing (20 points) Coverage of test cases is comprehensive. Following information is provided for test cases: inputs, expected results, pass/fail, and remarks.(20 points) Coverage of test cases is low. Test case documentation is incomplete. (10 points) Cursory treatment of testing. No documentation of test cases. (5 points)
Coding (10 points) The code is compact without sacrificing readability and understandability. (10 points) The code is fairly compact without sacrificing readability and understandability. (5 points) The code is brute force and unnecessarily long. (2 points)
Readability (5 points) The code is well organized and very easy to follow. (5 points) The code is readable only by someone who knows what it is supposed to be doing. (3 points) The code is poorly organized and very difficult to read. (1 points)
Documentation (5 points) The code is self-documenting and obviates the need for elaborate documentation. It is well written and clearly explains what the code is accomplishing and how. (5 points) The documentation is simply comments embedded in the code with some simple header comments separating functions/methods. (3 points) The documentation is simply comments embedded in the code and does not help the reader understand the code. (2 points)


Back to course home