# 图像处理之相似图片识别（直方图应用篇）

33950人阅读 评论(57)

0表示极其不同，1表示极其相似（相同）。

H[124] += 1, 而对于彩色RGB像素来说直方图表达有两种方式，一种是单一直方图，另外一

HG, HB, 假设某一个像素点P的RGB值为(4, 231,129), 则对于的直方图计算为HR[4] += 1,

HG[231] += 1, HB[129] += 1, 如此对每个像素点完成统计以后，RGB彩色直方图数据就生成了。

	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;
}

	/**
* 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;
}

15
1

【直播】机器学习&深度学习系统实战（唐宇迪）
【直播】Kaggle 神器：XGBoost 从基础到实战（冒教授）
【直播回放】深度学习基础与TensorFlow实践（王琛）
【直播】计算机视觉原理及实战（屈教授）
【直播】机器学习之凸优化（马博士）
【直播】机器学习之矩阵（黄博士）
【直播】机器学习之概率与统计推断（冒教授）
【直播】机器学习之数学基础
【直播】TensorFlow实战进阶（智亮）
【直播】深度学习30天系统实训（唐宇迪）

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：2505961次
• 积分：22368
• 等级：
• 排名：第302名
• 原创：251篇
• 转载：1篇
• 译文：2篇
• 评论：1310条
个人说明
独立图像处理开发者
图像处理与对象识别算法外包
OCR与美化类滤镜开发
安卓与IOS图像类应用开发

OpenCV学习群:376281510

学习图像处理技术关注
公众号：【OpenCV学堂】
个人联系方式：
QQ: 57558865
我的图书
博客专栏
 HTML5 Canvas编程 文章：14篇 阅读：244874
 Java数字图像处理与特效 文章：68篇 阅读：940035
最新评论