Histogram intersection(直方图交叉核,Pyramid Match Kernel)

本文介绍了Histogram Intersection方法,该方法源自《The Pyramid Match Kernel: Discriminative Classification with Sets of Image Features》一文,用于特征构成的直方图间的相似度匹配。文章通过具体的例子解释了如何设置不同宽度的直方图,并利用交集计算相似度。
部署运行你感兴趣的模型镜像

看关于LBP人脸识别的论文时提到了Histogram intersection这个方法,方法最初来自The Pyramid Match Kernel:Discriminative Classification with Sets of Image Features这篇论文,用来对特征构成的直方图进行相似度匹配,下面介绍下原理。

假设图像或其他数据的特征可以构成直方图,根据直方图间距的不同可以得到多种类型的直方图:

论文里是这么设置的,假设H0(x)里每个直方图宽度为a,那么​H1(x)为2a,以此类推。举个例子,假设有某计算机学院男生身高范围在160cm-200cm,H0(x)宽度可以设置为2cm,那H0(x)里会有20个直方图;类推H1(x)宽度则为4cm,H1(x)会有10个直方图。

两个数据集的相似度可以用下式来匹配:


y和z分别代表不同的数据集,比如给了两个学院男生身高,想看下这两个学院是不是同一个学院(例子不恰当,凑合着用吧^_^),用上式他们的相似度就好了。其中w代表权重,论文里将wi设置为1/(2^i),N代表每两层之间的新匹配的数目,可以通过下式计算:

上式里面的L可以通过下式计算:

附图解释什么意思。


(a)里的y和z代表两种数据分布,三幅图代表三层金字塔,每一层里有间距相等的虚线,意思和我之前说的2cm,4cm的宽度一样。可以看到红点蓝点的位置是固定的,但是根据直方图宽度的不同可以划到不同的直方图里,如(b)所示。(c)图就是L的计算结果,是通过(b)里两种直方图取交集得来的,不过直方图的高度忽略不计,只计算交集后的数目,(c)图每个图的下方都给出了交集数目,比如x0=2,x1=4,x2=3(原图里是5,是不是错了?)。

L得到了,就算N就是通过,也就是通过Ni=Li-Li-1得到(看公式是能取负数的,比如上图里的N0=2,N1=2,N2=-1)。

由于wi之前设置为1/(2^i)了,所以


算法就是这样了,但是感觉不适合Extended LBP,因为等价模式取值不多,经不起这么多的直方图宽度变化,倒是比较适合原生的LBP方法。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

直方图交叉核是一种用于比较两个直方图相似性的方法,其基本思想是通过计算两个直方图中对应 bin 的最小值之和来衡量它们的相似性。这种核函数在图像处理和计算机视觉领域有广泛应用[^1]。 以下是直方图交叉核在 C 语言中的实现示例代码: ```c #include <stdio.h> #include <stdlib.h> // 计算直方图交叉核 double histogramIntersectionKernel(double *hist1, double *hist2, int bins) { double kernelValue = 0.0; for (int i = 0; i < bins; ++i) { kernelValue += (hist1[i] < hist2[i]) ? hist1[i] : hist2[i]; } return kernelValue; } int main() { // 示例直方图数据 int bins = 5; double hist1[] = {10, 20, 30, 40, 50}; double hist2[] = {5, 15, 25, 35, 45}; // 计算直方图交叉核 double result = histogramIntersectionKernel(hist1, hist2, bins); // 输出结果 printf("Histogram Intersection Kernel Value: %.2f\n", result); return 0; } ``` ### 代码说明 - 函数 `histogramIntersectionKernel` 接收两个直方图数组 `hist1` 和 `hist2` 以及它们的 bin 数量 `bins`。 - 通过遍历每个 bin,计算两个直方图对应 bin 值的最小值,并累加得到最终的核值。 - 示例数据为两个简单的直方图,分别包含 5 个 bin,每个 bin 的值分别为 `[10, 20, 30, 40, 50]` 和 `[5, 15, 25, 35, 45]`。 直方图交叉核的实现依赖于高效的内存操作和循环优化,这正是 C 语言擅长的领域[^1]。 ### 直方图交叉核的应用 直方图交叉核常用于图像检索、目标检测等任务中,通过比较图像的直方图特征来评估相似性。它反向投影类似,都是基于直方图模型进行特征匹配的方法[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值