使用向量中的值(特征)来计算 opencv 的余弦相似度

use values(features) in a vector to calculate cosine similarity for opencv

我最近在做一个项目,在这个项目中我提取了一些关于图像的特征,并想使用这些特征找出两张图像之间是否有任何相似之处。 以下是我提取的功能列表:

  1. 纵横比(width/height)
  2. 归一化区域(裁剪的roi区域到输入图像区域)
  3. 裁剪图像的中心
    以及单幅图像的其他特征

现在,我想将这些值输入一个向量,并使用该向量求出余弦相似度。简而言之,使用来自两个图像的向量,并找到它们之间的相似性。 我知道两个向量的叉积是如何工作的,但是
我需要帮助将这些图像存储到矢量和矢量的使用中。任何建议将不胜感激。

哦,不难。

第 1 步:用数字一个接一个地填充特征 (Mat):

Mat feature; // you could use a std::vector, too, but cv::Mat has the 
             // handy dot-product used below already built in.
feature.push_back(aspect_ratio);
feature.push_back(area);
feature.push_back(center.x);
feature.push_back(center.y);
feature.push_back(more_stuff);
...

第 2 步:要比较这些特征,请使用余弦范数:

Mat feature_a, feature_b; // composed like above
double ab = feature_a.dot(feature_b);
double aa = feature_a.dot(feature_a);
double bb = feature_b.dot(feature_b);
return -ab / sqrt(aa*bb);