gpt4 book ai didi

java - 如何使用基于均方误差的基于像素的图像比较度量来比较 java 中的图像集?

转载 作者:行者123 更新时间:2023-11-29 06:35:41 24 4
gpt4 key购买 nike

在我的项目中,我有一组图像。我需要比较它们。将一幅图像中的每个像素与数据集中所有其他图像中同一位置的像素进行比较。在对图像空间中的所有像素应用均方误差计算后,一组不同的像素被识别出来,这些像素代表图像中具有不同颜色值的像素。我已经比较了两个图像的相似像素并将其存储在一个文件中。但是不能对 12 个图像执行此操作。'代码'

import java.io.*;
import java.awt.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
class spe
{
public static void main(String args[])
throws IOException
{
long start = System.currentTimeMillis();
int q=0;
File file1 = new File("filename.txt");

/* if file doesnt exists, then create it
if (!file.exists()) {
file.createNewFile();
}*/
FileWriter fw = new FileWriter(file1.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);

File file= new File("2000.png");
BufferedImage image = ImageIO.read(file);
int width = image.getWidth(null);
int height = image.getHeight(null);
int[][] clr= new int[width][height];
File files= new File("2002.png");
BufferedImage images = ImageIO.read(files);
int widthe = images.getWidth(null);
int heighte = images.getHeight(null);
int[][] clre= new int[widthe][heighte];
int smw=0;
int smh=0;
int p=0;
//CALUCLATING THE SMALLEST VALUE AMONG WIDTH AND HEIGHT
if(width>widthe)
{
smw =widthe;
}
else
{
smw=width;
}
if(height>heighte)
{
smh=heighte;
}
else
{
smh=height;
}
//CHECKING NUMBER OF PIXELS SIMILARITY
for(int a=0;a<smw;a++)
{
for(int b=0;b<smh;b++)
{
clre[a][b]=images.getRGB(a,b);
clr[a][b]=image.getRGB(a,b);
if(clr[a][b]==clre[a][b])
{
p=p+1;
bw.write("\t");
bw.write(Integer.toString(a));
bw.write("\t");
bw.write(Integer.toString(b));
bw.write("\n");
}
else
q=q+1;
}
}

float w,h=0;
if(width>widthe)
{
w=width;
}
else
{
w=widthe;
}
if(height>heighte)
{
h = height;
}
else
{
h = heighte;
}
float s = (smw*smh);
//CALUCLATING PERCENTAGE
float x =(100*p)/s;

System.out.println("THE PERCENTAGE SIMILARITY IS APPROXIMATELY ="+x+"%");
long stop = System.currentTimeMillis();
System.out.println("TIME TAKEN IS ="+(stop-start));
System.out.println("NO OF PIXEL GETS VARIED:="+q);
System.out.println("NO OF PIXEL GETS MATCHED:="+p);
}
}

最佳答案

现在您的代码将始终比较文件 2000.png 和 2002.png。首先将您的比较代码重构为一个方法:

CompareResult compare(BufferedImage  img1,BufferedImage  img2) { ... }

声明一个类 CompareResult 以将结果信息分组到一个消息中:

class CompareResult {
long pixMatched;
long pixVar;
...
}

然后从命令行获取图像文件列表并将它们相互压缩:

for(int i=0;i<args.length();i++) {
BufferedImage img1 = ImageIO.read(args[i]);
for (int j=i+1;j<args.length();j++) {
BufferedImage img2 = ImageIO.read(args[j]);
CompareResult r = compare(img1,img2);
printInfo(r);
}
}

关于java - 如何使用基于均方误差的基于像素的图像比较度量来比较 java 中的图像集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21179019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com