图像相似度检测算法

1 利用直方图进行相似度检测

1.1 直方图概念

对颜色特征的表达方式有许多种,我们采用直方图进行特征描述。常见的直方图有两种:统计直方图,累积直方图。我们将分别实验两种直方图在图像聚类和检索中的性能。

1.1.1 统计直方图

为利用图像的特征描述图像,可借助特征的统计直方图。图像特征的统计直方图实际是一个1-D的离散函数,即:
h(rk)=nk. 其中k=0,1,…L-1
归一化直方图
P(rk)=nk/N.
上式中rk代表图像的特征取值,L是特征可取值个数,是图像中具有特征值为rk的像素的个数,N是图像像素的总数。
一般rk表示第k级灰度,nk是图像中灰度级为rk的像素个数。
e.g. 3bit图像,8个灰度级。
图像相似度检测算法_第1张图片

1.1.2 累计直方图

图像特征统计的累积直方图也是一个1-D的离散函数,即:
P(rk)=这里写图片描述nk/N. 其中k=0,1,2,…,L-1
上式的各个参数含义同前,与上图对应的累积直方图见下:
图像相似度检测算法_第2张图片

1.2 直方图相似性度量

得到图像特征的统计直方图后,不同图像之间的特征匹配可借助计算直方图间的相似度量来进行,以下介绍几种常见的直方图的相似度量方法:

1.2.1 直方图相交距离

H()分别为两幅图像某一特征的统计直方图,则两图像之间的匹配值P(Q, D)可借助直方图相交来实现,即:

这里写图片描述

1.2.2 欧氏距离

直方图间的距离可使用一般的欧式距离函数这里写图片描述来衡量:

这里写图片描述

1.2.3

我们可以实验多种相似性度量准则,研究它们之间的差异,找出对于某类图像,那种相似性度量能更加准确的描述两幅图像之间的相似程度。

1.3 缺点

1、直方图反映的是图像像素灰度值的概率分布,比如灰度值为200的像素有多少个,但是对于这些像素原来的位置在直方图中并没有体现,所以图像的骨架,也就是图像内部到底存在什么样的物体,形状是什么,每一块的灰度分布式什么样的这些在直方图信息中是被省略掉得。那么造成的一个问题就是,比如一个上黑下白的图像和上白下黑的图像其直方图分布是一模一样的,其相似度为100%。

2、两幅图像之间的距离度量,采用的是巴氏距离或者归一化相关系数,这种用分析数学向量的方法去分析图像本身就是一个很不好的办法。

3、就信息量的道理来说,采用一个数值来判断两幅图像的相似程度本身就是一个信息压缩的过程,那么两个256个元素的向量(假定直方图有256个bin条)的距离用一个数值表示那么肯定就会存在不准确性。

1.4 实验代码

 I=imread('6.tif');
 J=imread('06.tif');
 [CountI]=imhist(I);
 [CountJ]=imhist(J);

 %% 巴氏距离 =0时最匹配  =1时完全不匹配%
 SumI=sum(CountI);
 SumJ=sum(CountJ);
 Sumup = sqrt(Count1.*Count2);
 SumDown = sqrt(Sum1*Sum2);
 Sumup = sum(Sumup);
 HistDist=sqrt(1-Sumup/SumDown)

 %% 欧式距离 =0时最匹配%
 HistDist=sqrt(sum((CountI-CountJ).*(CountI-CountJ)))

 %% 直方图相交距离 =1时最匹配 越小则越不匹配%
 HistDist=sum(min(CountI,CountJ))/sum(CountI)

 %% 图片和直方图显示%
 figure(1);
 subplot(2,2,1);imshow(I);
 subplot(2,2,2);imshow(J);
 subplot(2,2,3);imhist(I);
 subplot(2,2,4);imhist(J);

结果:

巴氏距离HistDist = 0
欧氏距离HistDist = 1.5759e+04
直方图相交距离HistDist = 0.7209

图像相似度检测算法_第3张图片

你可能感兴趣的:(图像相似度检测算法)