最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java基于直方圖應(yīng)用的相似圖片識(shí)別實(shí)例

 更新時(shí)間:2014年09月25日 10:55:12   投稿:shichen2014  
這篇文章主要介紹了Java基于直方圖應(yīng)用的相似圖片識(shí)別實(shí)例,是非常實(shí)用的技巧,多見(jiàn)于圖形里游戲中,需要的朋友可以參考下

本文實(shí)例講述了Java實(shí)現(xiàn)基于直方圖應(yīng)用的相似圖片識(shí)別,是非常實(shí)用的技巧。分享給大家供大家參考。具體分析如下:

一、算法概述:

首先對(duì)源圖像與要篩選的圖像進(jìn)行直方圖數(shù)據(jù)采集,對(duì)采集的各自圖像直方圖進(jìn)行歸一化再使用巴氏系數(shù)算法對(duì)直方圖數(shù)據(jù)進(jìn)行計(jì)算,最終得出圖像相似度值,其值范圍在[0, 1]之間

0表示極其不同,1表示極其相似(相同)。

二、算法步驟詳解:

大致可以分為兩步,根據(jù)源圖像與候選圖像的像素?cái)?shù)據(jù),生成各自直方圖數(shù)據(jù)。第二步:使用第一步輸出的直方圖結(jié)果,運(yùn)用巴氏系數(shù)(Bhattacharyya coefficient)算法,計(jì)算出相似程度值。

第一步:直方圖計(jì)算

直方圖分為灰度直方圖與RGB直方圖,對(duì)于灰度圖像直方圖計(jì)算十分簡(jiǎn)單,只要初始化一個(gè)大小為256的直方圖數(shù)組H,然后根據(jù)像素值完成頻率分布統(tǒng)計(jì),假設(shè)像素值為124,則H[124] += 1, 而對(duì)于彩色RGB像素來(lái)說(shuō)直方圖表達(dá)有兩種方式,一種是單一直方圖,另外一種是三維直方圖,三維直方圖比較簡(jiǎn)單明了,分別對(duì)應(yīng)RGB三種顏色,定義三個(gè)直方圖HR,HG, HB, 假設(shè)某一個(gè)像素點(diǎn)P的RGB值為(4, 231,129), 則對(duì)于的直方圖計(jì)算為HR[4] += 1,HG[231] += 1, HB[129] += 1, 如此對(duì)每個(gè)像素點(diǎn)完成統(tǒng)計(jì)以后,RGB彩色直方圖數(shù)據(jù)就生成了。

而RGB像素的單一直方圖SH表示稍微復(fù)雜點(diǎn),每個(gè)顏色的值范圍為0 ~ 255之間的,假設(shè)可以分為一定范圍等份,當(dāng)8等份時(shí),每個(gè)等份的值范圍為32, 16等份時(shí),每個(gè)等份值范圍為16,當(dāng)4等份時(shí)候,每個(gè)等份值的范圍為64,假設(shè)RGB值為(14, 68, 221), 16等份之后,它對(duì)應(yīng)直方圖索引值(index)分別為: (0, 4, 13), 根據(jù)計(jì)算索引值公式:index = R + G*16 + B*16*16

對(duì)應(yīng)的直方圖index = 0 + 4*16 + 13 * 16 * 16, SH[3392] += 1

如此遍歷所有RGB像素值,完成直方圖數(shù)據(jù)計(jì)算。

第二步:巴氏系數(shù)計(jì)算,計(jì)算公式如下:

其中P, P'分別代表源與候選的圖像直方圖數(shù)據(jù),對(duì)每個(gè)相同i的數(shù)據(jù)點(diǎn)乘積開(kāi)平方以后相加

得出的結(jié)果即為圖像相似度值(巴氏系數(shù)因子值),范圍為0到1之間。

程序效果如下圖所示:

相似度超過(guò)99%以上,極其相似

相似度為:72%, 一般相似

三、程序直方圖計(jì)算源代碼如下:

public void setGreenBinCount(int greenBinCount) { 
  this.greenBins = greenBinCount; 
} 
 
public void setBlueBinCount(int blueBinCount) { 
  this.blueBins = blueBinCount; 
} 
 
public float[] filter(BufferedImage src, BufferedImage dest) { 
  int width = src.getWidth(); 
    int height = src.getHeight(); 
     
    int[] inPixels = new int[width*height]; 
    float[] histogramData = new float[redBins * greenBins * blueBins]; 
    getRGB( src, 0, 0, width, height, inPixels ); 
    int index = 0; 
    int redIdx = 0, greenIdx = 0, blueIdx = 0; 
    int singleIndex = 0; 
    float total = 0; 
    for(int row=0; row<height; row++) { 
    int ta = 0, tr = 0, tg = 0, tb = 0; 
    for(int col=0; col<width; col++) { 
      index = row * width + col; 
      ta = (inPixels[index] >> 24) & 0xff; 
        tr = (inPixels[index] >> 16) & 0xff; 
        tg = (inPixels[index] >> 8) & 0xff; 
        tb = inPixels[index] & 0xff; 
        redIdx = (int)getBinIndex(redBins, tr, 255); 
        greenIdx = (int)getBinIndex(greenBins, tg, 255); 
        blueIdx = (int)getBinIndex(blueBins, tb, 255); 
        singleIndex = redIdx + greenIdx * redBins + blueIdx * redBins * greenBins; 
        histogramData[singleIndex] += 1; 
        total += 1; 
    } 
    } 
     
    // start to normalize the histogram data 
    for (int i = 0; i < histogramData.length; i++) 
    { 
    histogramData[i] = histogramData[i] / total; 
    } 
     
    return histogramData; 
} 

計(jì)算巴氏系數(shù)的代碼如下:

/** 
 * Bhattacharyya Coefficient 
 * http://www.cse.yorku.ca/~kosta/CompVis_Notes/bhattacharyya.pdf 
 * 
 * @return 
 */ 
public double modelMatch() { 
  HistogramFilter hfilter = new HistogramFilter(); 
  float[] sourceData = hfilter.filter(sourceImage, null); 
  float[] candidateData = hfilter.filter(candidateImage, null); 
  double[] mixedData = new double[sourceData.length]; 
  for(int i=0; i<sourceData.length; i++ ) { 
    mixedData[i] = Math.sqrt(sourceData[i] * candidateData[i]); 
  } 
   
  // The values of Bhattacharyya Coefficient ranges from 0 to 1, 
  double similarity = 0; 
  for(int i=0; i<mixedData.length; i++ ) { 
    similarity += mixedData[i]; 
  } 
   
  // The degree of similarity 
  return similarity; 
}

希望本文所述對(duì)大家的Java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Java中List與數(shù)組相互轉(zhuǎn)換實(shí)例分析

    Java中List與數(shù)組相互轉(zhuǎn)換實(shí)例分析

    這篇文章主要介紹了Java中List與數(shù)組相互轉(zhuǎn)換的方法,實(shí)例分析了Java中List與數(shù)組相互轉(zhuǎn)換中容易出現(xiàn)的問(wèn)題與相關(guān)的解決方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-05-05
  • Java調(diào)用DeepSeek實(shí)現(xiàn)多輪對(duì)話功能

    Java調(diào)用DeepSeek實(shí)現(xiàn)多輪對(duì)話功能

    對(duì)于廣大Java開(kāi)發(fā)者而言,DeepSeek這一先進(jìn)的人工智能技術(shù),猶如一把鑰匙,為我們打開(kāi)了提升開(kāi)發(fā)效率與創(chuàng)新能力的新大門(mén),本文給大家介紹了Java調(diào)用DeepSeek實(shí)現(xiàn)多輪對(duì)話功能,需要的朋友可以參考下
    2025-03-03
  • 詳解Java中的sleep()和wait()的區(qū)別

    詳解Java中的sleep()和wait()的區(qū)別

    這篇文章主要介紹了詳解Java中的sleep()和wait()的區(qū)別的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • Java精品項(xiàng)目瑞吉外賣(mài)之后端登錄功能篇

    Java精品項(xiàng)目瑞吉外賣(mài)之后端登錄功能篇

    這篇文章主要為大家詳細(xì)介紹了java精品項(xiàng)目-瑞吉外賣(mài)訂餐系統(tǒng),此項(xiàng)目過(guò)大,分為多章獨(dú)立講解,本篇內(nèi)容為后端登錄功能的實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java Servlet簡(jiǎn)單實(shí)例分享(文件上傳下載demo)

    Java Servlet簡(jiǎn)單實(shí)例分享(文件上傳下載demo)

    下面小編就為大家?guī)?lái)一篇Java Servlet簡(jiǎn)單實(shí)例分享(文件上傳下載demo)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • 基于SpringBoot使用MyBatis插件的問(wèn)題

    基于SpringBoot使用MyBatis插件的問(wèn)題

    MyBatis-Plus并不能為我們解決所有問(wèn)題,例如一些復(fù)雜的SQL,多表聯(lián)查,我們就需要自己去編寫(xiě)代碼和SQL語(yǔ)句,我們?cè)撊绾慰焖俚慕鉀Q這個(gè)問(wèn)題呢,這個(gè)時(shí)候可以使用MyBatisX插件,今天小編給大家?guī)?lái)了SpringBoot使用MyBatis插件問(wèn)題,感興趣的朋友一起看看吧
    2022-03-03
  • java 異常被catch后 將會(huì)繼續(xù)執(zhí)行的操作

    java 異常被catch后 將會(huì)繼續(xù)執(zhí)行的操作

    這篇文章主要介紹了java 異常被catch后 將會(huì)繼續(xù)執(zhí)行的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Java截取url參數(shù)的方法

    Java截取url參數(shù)的方法

    本文給大家?guī)?lái)了java截取url參數(shù),url值得方法,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-08-08
  • java循環(huán)結(jié)構(gòu)、數(shù)組的使用小結(jié)

    java循環(huán)結(jié)構(gòu)、數(shù)組的使用小結(jié)

    這篇文章主要介紹了java循環(huán)結(jié)構(gòu)、數(shù)組的使用小結(jié),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 每日六道java新手入門(mén)面試題,通往自由的道路第二天

    每日六道java新手入門(mén)面試題,通往自由的道路第二天

    這篇文章主要為大家分享了最有價(jià)值的6道java面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,對(duì)hashCode方法的設(shè)計(jì)、垃圾收集的堆和代進(jìn)行剖析,感興趣的小伙伴們可以參考一下
    2021-06-06

最新評(píng)論

微山县| 德庆县| 新乐市| 德化县| 阳信县| 普兰店市| 石渠县| 连州市| 涟源市| 杭州市| 安新县| 定安县| 绥滨县| 新源县| 钦州市| 忻州市| 远安县| 彩票| 宜州市| 固安县| 广州市| 读书| 宣汉县| 邢台市| 谷城县| 永和县| 威远县| 徐汇区| 桓台县| 玛多县| 古田县| 漳平市| 孝昌县| 和平县| 平昌县| 华坪县| 买车| 巩留县| 同心县| 陇川县| 扶绥县|