oepncv关于巴氏距离的源码

源码位置:在imgproc模块里的histogram.cpp文件里面
关于巴氏距离源码的计算如下:
else if( method == CV_COMP_BHATTACHARYYA )
    {
    
    
        double s1 = 0, s2 = 0;
        for( node1 = cvInitSparseMatIterator( mat1, &iterator );
             node1 != 0; node1 = cvGetNextSparseNode( &iterator ))
        {
    
    
            double v1 = *(float*)CV_NODE_VAL(mat1,node1);
            uchar* node2_data = cvPtrND( mat2, CV_NODE_IDX(mat1,node1),
                                         0, 0, &node1->hashval );
            s1 += v1;
            if( node2_data )
            {
    
    
                double v2 = *(float*)node2_data;
                result += sqrt(v1 * v2);
            }
        }
        for( node1 = cvInitSparseMatIterator( mat2, &iterator );
             node1 != 0; node1 = cvGetNextSparseNode( &iterator ))
        {
    
    
            double v2 = *(float*)CV_NODE_VAL(mat2,node1);
            s2 += v2;
        }
        s1 *= s2;
        s1 = fabs(s1) > FLT_EPSILON ? 1./sqrt(s1) : 1.;
        result = 1. - result*s1;
        result = sqrt(MAX(result,0.));
    }

由此可见计算两个矩阵的巴氏距离为:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_31336799/article/details/103186475