Write a program in Java that compares any 2 images and shows the differences visually. Remember that Working Software is the main value, so something simple that works is generally better than a complex unfinished solution.
- Implementation should use only standard core language and platform features, no 3rd party libraries and plagiarized code is permitted.
- Pixels (with the same coordinates in two images) can be visually similar, but have different values of RGB. We should only consider 2 pixels to be "different" if the difference between them is more than 10%.
- The output of the comparison should be a copy of one of the images image with differences outlined with red rectangles as shown below.
- We need to see your own code. No third party libraries and borrowed code is allowed.
- Target completion time is 2 hours, but you may choose to use up to 4 hours. Submissions sent after 4 hours will be disqualified. Note that in addition to quality, time is also factored into scoring the task. The closer you get to 2 hours the higher is the score.
- It should be possible to exclude certain parts of the image from comparison, for example a clock or dynamically generated number. They will be provided by the caller as a list of rectangles to exclude.
- Provide some sort of UI either as a web page or GUI that allows the user to select the images and view differences as an overlay on either of the images.
- Source code.
- Binary version of the algorithm that runs and produces output of comparison. No build should be required.
- Output image showing the result of comparison.
- Use javax.imageio.ImageIO to read/write images.
- Consider java.awt.image.BufferedImage#createGraphics() to draw on in-memory images.