Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于局部特征匹配的匹配质量评价_Python_Opencv_Image Processing_Pattern Matching_Sift - Fatal编程技术网

Python 基于局部特征匹配的匹配质量评价

Python 基于局部特征匹配的匹配质量评价,python,opencv,image-processing,pattern-matching,sift,Python,Opencv,Image Processing,Pattern Matching,Sift,我正在研究一个系统,它使用局部特征变换算法来识别物体。对于每个数据集,每个对象有两个图像。我的管道工程如下: 从查询数据集中的图像中提取描述符(大小n)并存储描述符 从训练数据集中的图像中提取描述符(大小为m)并存储描述符 将查询描述符与培训描述符匹配 对于每个匹配迭代,应用比率测试来只提取好的特征 存储良好匹配/所有匹配的比率(1.0表示查询中所有匹配的100%与火车完全匹配) 下面是一些代码来说明这个过程。我正在将Python与OpenCV一起用于我的管道 nfeatures=1000#筛选

我正在研究一个系统,它使用局部特征变换算法来识别物体。对于每个数据集,每个对象有两个图像。我的管道工程如下:

  • 从查询数据集中的图像中提取描述符(大小n)并存储描述符
  • 从训练数据集中的图像中提取描述符(大小为m)并存储描述符
  • 将查询描述符与培训描述符匹配
  • 对于每个匹配迭代,应用比率测试来只提取好的特征
  • 存储良好匹配/所有匹配的比率(1.0表示查询中所有匹配的100%与火车完全匹配)
  • 下面是一些代码来说明这个过程。我正在将Python与OpenCV一起用于我的管道

    nfeatures=1000#筛选使用nfeatures=1000创建的对象
    query_descs=np.zero((nfeatures,128,len(query_files)),dtype=np.uint8)#SIFT描述符的长度为128字节
    列描述=np.0((n特征,128,len(列文件)))
    对于i,枚举中的文件(查询文件):#查询文件列表
    img=cv2.imread(文件,0)#读取灰度
    kpts,desc=筛选、检测和计算(img,无)
    查询_descs[:,:,i]=desc
    对于i,枚举中的文件(列文件):#查询文件列表
    img=cv2.imread(文件,0)
    kpts,desc=筛选、检测和计算(img,无)
    列车描述[:,:,i]=描述
    分数=np.0((len(查询文件),len(训练文件))
    对于范围内的i(分数.shape[0]):
    对于范围内的j(分数形状[1]):
    matches=matcher.knnMatch(查询描述[:,:,i],序列描述[:,:,j],k=2)
    好=0
    对于匹配中的m,n:
    如果m.距离<阈值*n.距离:
    良好+=1
    分数[i,j]=良好/非特征
    
    结果是一个大小为nxm的矩阵,通常每行包含一个强大的最大值。该最大值原则上应该是正确的对象/图像

    我的问题是,我不需要知道哪些功能匹配得最好,但只有当它匹配得很好时才需要知道,如果是这样,则增加变量
    good

    通常如何执行两幅图像的质量匹配?使用
    matcher.matchKnn()
    似乎可以执行更多的匹配,我希望减少所有不必要的操作以获得最佳性能