Related Articles
Image Processing in Java | Set 14 ( Comparison of two images )
• Last Updated : 22 Jun, 2017

We strongly recommend to refer below posts as a prerequisite of this.

In this article we will learn how to compare two given images (must be of same dimensions) and print the percentage of difference between them.

Algorithm:

Step 1 – Check if dimensions of both the image match.
Step 2 – Get the RGB values of both images.
Step 3 – Calculate the difference in two corresponding pixel of three color components.
Step 4 – Repeat Step 2-3 for each pixel of the images.
Step 5 – Calculate the percentage by dividing the sum of differences with:

• Number of pixels, to obtain the average difference per pixel
• 3, to obtain the average difference per color component
• 255, to obtain a value between 0.0 and 1.0 which can be converted into a percent value

Implementation:

 `// Java Program to compare two images ` `import` `java.awt.image.BufferedImage; ` `import` `javax.imageio.ImageIO; ` `import` `java.io.File; ` `import` `java.io.IOException; ` ` `  `class` `ImageComparision ` `{ ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``BufferedImage imgA = ``null``; ` `        ``BufferedImage imgB = ``null``; ` ` `  `        ``try` `        ``{ ` `            ``File fileA = ``new` `File(``"/home / pratik /"``+ ` `                             ``" Desktop / image1.jpg"``); ` `            ``File fileB = ``new` `File(``"/home / pratik /"``+ ` `                             ``" Desktop / image2.jpg"``); ` ` `  `            ``imgA = ImageIO.read(fileA); ` `            ``imgB = ImageIO.read(fileB); ` `        ``} ` `        ``catch` `(IOException e) ` `        ``{ ` `            ``System.out.println(e); ` `        ``} ` `        ``int` `width1 = imgA.getWidth(); ` `        ``int` `width2 = imgB.getWidth(); ` `        ``int` `height1 = imgA.getHeight(); ` `        ``int` `height2 = imgB.getHeight(); ` ` `  `        ``if` `((width1 != width2) || (height1 != height2)) ` `            ``System.out.println(``"Error: Images dimensions"``+ ` `                                             ``" mismatch"``); ` `        ``else` `        ``{ ` `            ``long` `difference = ``0``; ` `            ``for` `(``int` `y = ``0``; y < height1; y++) ` `            ``{ ` `                ``for` `(``int` `x = ``0``; x < width1; x++) ` `                ``{ ` `                    ``int` `rgbA = imgA.getRGB(x, y); ` `                    ``int` `rgbB = imgB.getRGB(x, y); ` `                    ``int` `redA = (rgbA >> ``16``) & ``0xff``; ` `                    ``int` `greenA = (rgbA >> ``8``) & ``0xff``; ` `                    ``int` `blueA = (rgbA) & ``0xff``; ` `                    ``int` `redB = (rgbB >> ``16``) & ``0xff``; ` `                    ``int` `greenB = (rgbB >> ``8``) & ``0xff``; ` `                    ``int` `blueB = (rgbB) & ``0xff``; ` `                    ``difference += Math.abs(redA - redB); ` `                    ``difference += Math.abs(greenA - greenB); ` `                    ``difference += Math.abs(blueA - blueB); ` `                ``} ` `            ``} ` ` `  `            ``// Total number of red pixels = width * height ` `            ``// Total number of blue pixels = width * height ` `            ``// Total number of green pixels = width * height ` `            ``// So total number of pixels = width * height * 3 ` `            ``double` `total_pixels = width1 * height1 * ``3``; ` ` `  `            ``// Normalizing the value of different pixels ` `            ``// for accuracy(average pixels per color ` `            ``// component) ` `            ``double` `avg_different_pixels = difference / ` `                                          ``total_pixels; ` ` `  `            ``// There are 255 values of pixels in total ` `            ``double` `percentage = (avg_different_pixels / ` `                                            ``255``) * ``100``; ` ` `  `            ``System.out.println(``"Difference Percentage-->"` `+ ` `                                                ``percentage); ` `        ``} ` `    ``} ` `} `

NOTE:Code will not run on online ide since it requires image in drive.

Output:

Input images:  Output : Difference Percentage–>2.843600130405922

Input images:  Output : Difference Percentage–>6.471412648669786

Input images:  Output : Difference Percentage–>0.0

This article is contributed by Pratik Agarwal. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.