java 圖片相似度算法


 

 利用直方圖原理實現圖像內容相似度比較  ,作為筆記記錄在隨筆中。

 public  class  PhotoDigest {
     public  static  void  main(String[] args)  throws  Exception {
         float  percent = compare(getData( "/Users/sun/Downloads/1.jpg" ),
                 getData( "/Users/sun/Downloads/2.jpg" ));
         if  (percent ==  0 ) {
             System.out.println( "無法比較" );
         else  {
             System.out.println( "兩張圖片的相似度為:"  + percent +  "%" );
         }
     }
 
     public  static  int [] getData(String name) {
         try  {
             BufferedImage img = ImageIO.read( new  File(name));
             BufferedImage slt =  new  BufferedImage( 100 100 ,
                     BufferedImage.TYPE_INT_RGB);
             slt.getGraphics().drawImage(img,  0 0 100 100 null );
             // ImageIO.write(slt,"jpeg",new File("slt.jpg"));
             int [] data =  new  int [ 256 ];
             for  ( int  x =  0 ; x < slt.getWidth(); x++) {
                 for  ( int  y =  0 ; y < slt.getHeight(); y++) {
                     int  rgb = slt.getRGB(x, y);
                     Color myColor =  new  Color(rgb);
                     int  r = myColor.getRed();
                     int  g = myColor.getGreen();
                     int  b = myColor.getBlue();
                     data[(r + g + b) /  3 ]++;
                 }
             }
             // data 就是所謂圖形學當中的直方圖的概念
             return  data;
         catch  (Exception exception) {
             System.out.println( "有文件沒有找到,請檢查文件是否存在或路徑是否正確" );
             return  null ;
         }
     }
 
     public  static  float  compare( int [] s,  int [] t) {
         try  {
             float  result = 0F;
             for  ( int  i =  0 ; i <  256 ; i++) {
                 int  abs = Math.abs(s[i] - t[i]);
                 int  max = Math.max(s[i], t[i]);
                 result += ( 1  - (( float ) abs / (max ==  0  1  : max)));
             }
             return  (result /  256 ) *  100 ;
         catch  (Exception exception) {
             return  0 ;
         }
     }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM