首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何统计匹配的特征数?

如何统计匹配的特征数?
EN

Stack Overflow用户
提问于 2020-07-17 17:29:01
回答 3查看 129关注 0票数 0

我使用了这个FLANN特征匹配。我还尝试了使用ORB和BRISK描述符。它显示了结果。现在,我如何计算匹配的特征数量?我试过print(len(matches),但它给了我1589。我不认为它是1589年的照片。

代码语言:javascript
复制
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt

img1 = cv.imread('trainImage1.png', 0)
img2 = cv.imread('trainImage2.png', 0)

brisk = cv.BRISK_create(60, 2, 2)

kp1, des1 = brisk.detectAndCompute(img1, None)
kp2, des2 = brisk.detectAndCompute(img2, None)

FLANN_INDEX_LSH = 6
index_params = dict(algorithm=FLANN_INDEX_LSH, table_number=6, key_size=12, multi_probe_level=1)
search_params = dict(checks=50)

flann = cv.FlannBasedMatcher(index_params, search_params)

matches = flann.knnMatch(des1, des2, k=2)

matchesMask = [[0, 0] for i in range(len(matches))]

for i, (m, n) in enumerate(matches):
    if m.distance < 0.7*n.distance:
        matchesMask[i] = [1, 0]

draw_params = dict(matchColor=(0, 255, 0), singlePointColor=(255, 0, 0), matchesMask=matchesMask, flags=cv.DrawMatchesFlags_DEFAULT)

img3 = cv.drawMatchesKnn(img1, kp1, img2, kp2, matches, None, **draw_params)

print(len(matches))

plt.imshow(img3,), plt.show()

Feature Matching Result

有谁能帮帮我吗?

EN

回答 3

Stack Overflow用户

发布于 2020-07-17 17:42:00

当你想绘制匹配点时,你需要给出空数组作为matchesMask。

代码语言:javascript
复制
draw_params = dict(matchColor=(0, 255, 0), singlePointColor=(255, 0, 0), matchesMask=[], flags=cv.DrawMatchesFlags_DEFAULT)
票数 0
EN

Stack Overflow用户

发布于 2020-07-19 23:54:37

这些算法存在误差。这就是为什么你必须过滤结果的原因。一种通用的过滤器是大小过滤器。这意味着您将忽略小于或大于某个大小的匹配项。这些最大值和最小值取决于您的情况。匹配的大小、比例和位置是另一个过滤器。

票数 0
EN

Stack Overflow用户

发布于 2021-03-19 18:22:40

我认为匹配的数量是真正的1589个。结果在你的图片中,只画了几个匹配。

尝试将你的第一个训练图像与实际上彼此不相关的随机图像进行比较。如果数量减少,那么matches实际上显示了matches对象的数量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62951152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档