opencv-python 基于直方图相交法的图像匹配

在之前的文章中,详细的介绍了如何获得一个图像的LBP 特征向量,获得特征的最终目的是进行匹配。

接下来利用直方图相交法来做特征直方图的匹配。

原理:根据直方图统计的重合度来对比两个直方图的相似性。这个对比过程是计算直方图在横轴每个值上相同像素点的数目。假设要对比H1和H2的相似性,可以用以下公式来计算二者之间的距离。

该值还可以再除以其中一个直方图中所有像素的数目来实现标准化,最后得到对的值在(0,1]之间。由于之前得到的LBP 特征都做过归一化了,所以是否进行标准化没有影响。做标准化的公式如下:

opencv-python 基于直方图相交法的图像匹配_第1张图片

只要将模板和测试图片的LBP 特征向量放入对应位置,最后得到对应的相似度。两张图片一致时,得到的分数会更高。

实现:

代码的实现很简单,直接对每个向量的每一个分量进行对比,取较小值进行相加即可。

def hist_match(hist_template,hist_test):
    template_sum=hist_template.sum()
    result=0
    for i in range(hist_template.size):
        if hist_template[i]<=hist_test[i]:
            result=result+hist_template[i]
        else:
            result=result+hist_test[i]
    score=result/template_sum
    return score

效果:

类间测试:

opencv-python 基于直方图相交法的图像匹配_第2张图片

类内测试:

opencv-python 基于直方图相交法的图像匹配_第3张图片

 分析:我认为由于每张图片的色调都很接近,这导致了类间测试和类内测试二者的分数比较接近,可能不太好界定一个值去分别一张被测图片是与模板同类或者与模板不同类(可能与录取到图像的质量有关系)。

 

几天后补充:实际上这种方法稳定性很好,因为所有图片集的颜色都差不多,所以即使是类间样本得到的匹配分数也有0.75左右,但是雷内样本基本稳定在0.8以上!

 

点赞点赞~

 

 

你可能感兴趣的:(opencv-python学习)