在我的项目中,我有一组图像.我需要比较它们.将来自一个图像的每个像素与数据集中所有其他图像中的相同位置处的像素进行比较.在对图像空间中的所有像素应用均方误差计算之后,识别一组不同的像素,其表示图像中具有变化的颜色值的像素.我已经比较并存储了两个图像的文件中的相似像素.但是对于12个图像不能这样做.'code'
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);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用Catalano Framework来完成.有几种比较图像的指标,包括均方误差.
例:
FastBitmap original = new FastBitmap(bufferedImage1);
FastBitmap reconstructed = new FastBitmap(bufferedImage2);
ObjectiveFidelity o = new ObjectiveFidelity(original, reconstructed);
// Error total
int error = o.getTotalError();
//Mean Square Error
double mse = o.getMSE();
//Signal Noise Ratio
double snr = o.getSNR();
//Peak Signal Noise Ratio
double psnr = o.getPSNR();
Run Code Online (Sandbox Code Playgroud)
所有这些指标都基于以下书籍:计算机成像:数字图像分析和处理 - Scott E Umbaugh.
下一版本(1.3)将包含衍生SNR.
| 归档时间: |
|
| 查看次数: |
19576 次 |
| 最近记录: |