图像相似度(直方图匹配/欧几里德距离)

时间:2014-03-03 16:37:34

标签: opencv histogram rgb

我已经搜索了好几天,但我似乎无法知道从哪里开始。我试图通过它们的颜色比较基本图像和其他10个图像,并且我可以使用欧几里德或直方图匹配而不使用opencv函数。我只试过欧几里德距离。我想要做的是获得image1和image2中每个像素的距离。我显示了距离,我得到了很高的价值。我的代码中有什么问题?请帮忙。 :)

for(p=0;p<height;p++) // row 
{

    for(p2=0;p2<inputHeight;p2++) // row 
    {                       
        for(u2=0;u2<inputWidth;u2++) // col 
        { 
            r2 = inputData[p2*inputStep+u2*inputChannels+2]; 
            g2 = inputData[p2*inputStep+u2*inputChannels+1]; 
            b2 = inputData[p2*inputStep+u2*inputChannels+0];     
        } 
    }                               
    for(p=0;p<height;p++) // row 
    {
        for(u=0;u<width;u++) // col 
        { 
            r = data[p*step+u*channels+2]; 
            g = data[p*step+u*channels+1]; 
            b = data[p*step+u*channels+0];     
        }
    }

    euclidean=(euclidean+sqrt(pow(b2-b,2) + pow(g2-g, 2) + pow(r2-r,2))); 
}

1 个答案:

答案 0 :(得分:0)

当您将所有像素的欧几里德距离相加时,您的程序往往会获得非常高的值:

euclidean=(euclidean+sqrt(pow(b2-b,2) + pow(g2-g, 2) + pow(r2-r,2))); 

我建议你这样做:

  1. 计算图像的颜色直方图(矢量特征)。

  2. 计算这些直方图之间的相关系数,作为图像的差异。