C++ cv::flann::knnSearch返回的距离单位是多少?
我正在搜索C++ cv::flann::knnSearch返回的距离单位是多少?,c++,opencv,knn,flann,C++,Opencv,Knn,Flann,我正在搜索k冲浪描述符的n近邻。我通过在描述符矩阵上创建cv::flann::index对象来计算最近邻 cv::flann::Index index(desc,cv::flann::KDTreeIndexParams(4));//cv::Mat desc: holds all the descriptors index.knnSearch(centralDescriptor,indicesNN,distsNN,10); 在此之后,我必须将每个最近邻的返回距离与中心特征点的大小进行比较。现在
k
冲浪描述符的n
近邻。我通过在描述符矩阵上创建cv::flann::index
对象来计算最近邻
cv::flann::Index index(desc,cv::flann::KDTreeIndexParams(4));//cv::Mat desc: holds all the descriptors
index.knnSearch(centralDescriptor,indicesNN,distsNN,10);
在此之后,我必须将每个最近邻的返回距离与中心特征点的大小进行比较。现在的问题是,中心特征点的大小存储在其相应的cv::KeyPoint
中,cv::KeyPoint::size
的单位是像素,其中距离都是浮点,小于零
问题:如何将cv::flann::knnSearch
返回的距离转换为像素,或将cv::KeyPoint::size
转换为距离单位?
我很抱歉这个问题的措辞不好,我的英语不是很好。你不能
cv::flann::knnSearch返回冲浪空间中的距离,换句话说,它是图像块之间的相似性(即,此角看起来更像此角,而不是此斑点)。关键点之间的距离只是像素距离(就像使用显示器上的标尺-以英寸为单位的距离)。我认为knnSearch返回的是标准化距离,因为冲浪描述符是标准化的。事实上,如果显示KNN搜索距离,它们都在0和1之间。那么现在的问题是,如何将标准化距离与正常距离或大小进行比较?请定义“正常距离或大小”的含义。以像素为单位的正常距离或大小。冲浪关键点的大小是以像素为单位的,至少我是这么认为的。再说一遍,冲浪匹配与大小和像素没有任何共同之处。完全我想,你把冲浪的两种含义混为一谈了。第一个-你的-是“图像中以半径和中心坐标为中心的圆”。第二个-knn匹配使用的是“对应圆的描述符”。当你们作为一个人比较两张照片时,你们说的是内容的相似性(这两张照片都是猫的,还是不是),而不是照片的物理尺寸。与knn匹配的情况相同。