Java 使用MSE 计算2张图片的相似度
时间: 2024-03-27 07:37:16 浏览: 14
在 Java 中,可以使用 Mean Squared Error (MSE) 来计算两张图片的相似度。MSE 值越小,表示两张图片越相似。
下面是计算 MSE 值的 Java 代码:
```java
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImageSimilarity {
public static void main(String[] args) {
try {
BufferedImage img1 = ImageIO.read(new File("image1.jpg"));
BufferedImage img2 = ImageIO.read(new File("image2.jpg"));
double mse = calculateMSE(img1, img2);
System.out.println("MSE: " + mse);
} catch (IOException e) {
e.printStackTrace();
}
}
private static double calculateMSE(BufferedImage img1, BufferedImage img2) {
if (img1.getWidth() != img2.getWidth() || img1.getHeight() != img2.getHeight()) {
throw new IllegalArgumentException("Images must have the same dimensions!");
}
int height = img1.getHeight();
int width = img1.getWidth();
double mse = 0;
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
Color c1 = new Color(img1.getRGB(x, y));
Color c2 = new Color(img2.getRGB(x, y));
int r1 = c1.getRed();
int g1 = c1.getGreen();
int b1 = c1.getBlue();
int r2 = c2.getRed();
int g2 = c2.getGreen();
int b2 = c2.getBlue();
double pixelMSE = Math.pow(r1 - r2, 2) + Math.pow(g1 - g2, 2) + Math.pow(b1 - b2, 2);
mse += pixelMSE / (height * width);
}
}
return mse;
}
}
```
在上述代码中,`calculateMSE` 方法用于计算两张图片的 MSE 值。该方法首先检查两张图片的尺寸是否相同,然后遍历每个像素,计算每个像素的 MSE 值,最后求和并除以像素总数得到最终的 MSE 值。
你可以将 "image1.jpg" 和 "image2.jpg" 替换为你想要比较的两张图片的文件路径。