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#筛选
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()
似乎可以执行更多的匹配,我希望减少所有不必要的操作以获得最佳性能