2016-06-28 238 views
0

我想比较两个图像文件的某些相等性标准。两幅图像的图像比较

是否有任何工具可以比较两个图像文件达到一定比例? 如果我们传递2张图片,它应该能够判断图片是否匹配大约'x'%

+0

你正在使用Java还是使用JavaScript? – Timo

+0

我有两个范围,我可以选择处理它在客户端即Java脚本或服务器端在Java中。 – sunder

+0

[这个图书馆做你所问:https://huddle.github.io/Resemble.js/](https://huddle.github.io/Resemble.js/) –

回答

2

这可能不是您正在寻找的内容,但实际上编写图像操作和分析代码可以非常有用。这是用Java编写的:

//Image percentage match 
public float getPercentMatch(String imageFile1, String imageFile2) { 

//Set how close a pixel has to be for a match, pixel deviation 
int pd = 3; 

    try { 
    //get height, width and image from first file 
    File input1 = new File(imageFile1); 
    image1 = ImageIO.read(input1); 
    width1 = image1.getWidth(); 
    height1 = image1.getHeight(); 

    //Do the same for the second one 
    File input2 = new File(imageFile2); 
    image2 = ImageIO.read(input2); 
    width2 = image2.getWidth(); 
    height2 = image2.getHeight(); 

    int matchCount = 0; 

    //Make sure they're the same height. You could also choose to use the 
    //smaller picture for dimensions 
    if (height1 != height2 || width1 != width2) {return 0.0;} 


    //Iterate over each pixel 
    for(int i=0; i<height1; i++){ 

     for(int j=0; j<width1; j++){ 

      //Get RGB values for each image at certain pixel 
      Color c1 = new Color(image1.getRGB(j, i)); 
      Color c2 = new Color(image2.getRGB(j, i)); 

      // If the colors are close enough based on deviation value... 
      if ( (Math.abs(c1.getRed() - c2.getRed()) < pd) && 
        (Math.abs(c1.getGreen() - c2.getGreen()) < pd) && 
        (Math.abs(c1.getBlue() - c2.getBlue()) < pd)) { 
       //...it's a match, so increment the match count 
       matchCount++; 
      } 
     } 
    } 
    return matchCount/(height1 * width1); 

    } catch (Exception e) {} 
}