วิธีเปรียบเทียบภาพสองภาพโดยคำนวณความแตกต่างของค่า RGB ทีละพิกเซล:
- อ่านภาพทั้งสองด้วย
ImageIO.read() - ตรวจสอบขนาดภาพให้เท่ากัน
- ดึงค่า RGB ของแต่ละพิกเซล
- คำนวณผลรวมความแตกต่างของ R, G, B
- คำนวณเปอร์เซ็นต์ความแตกต่าง
สูตร: Average = diff / (width × height × 3) | Percentage = (Average / 255) × 100
ตัวอย่างโค้ด
import java.awt.Color;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.File;
public class CompareImages {
public static void main(String[] args) throws Exception {
BufferedImage img1 = ImageIO.read(new File("D:\\Images\\test1.jpg"));
BufferedImage img2 = ImageIO.read(new File("D:\\Images\\test2.jpg"));
int w1 = img1.getWidth(), w2 = img2.getWidth();
int h1 = img1.getHeight(), h2 = img2.getHeight();
if (w1 != w2 || h1 != h2) {
System.out.println("ภาพทั้งสองต้องมีขนาดเท่ากัน");
return;
}
long diff = 0;
for (int y = 0; y < h1; y++) {
for (int x = 0; x < w1; x++) {
Color c1 = new Color(img1.getRGB(x, y), true);
Color c2 = new Color(img2.getRGB(x, y), true);
diff += Math.abs(c1.getRed() - c2.getRed())
+ Math.abs(c1.getGreen() - c2.getGreen())
+ Math.abs(c1.getBlue() - c2.getBlue());
}
}
double avg = diff / (w1 * h1 * 3.0);
double percent = (avg / 255) * 100;
System.out.println("Difference: " + percent + "%");
}
}
ผลลัพธ์
Difference: 92.54901960784314%