【发布时间】:2020-08-09 05:48:19
【问题描述】:
我正在尝试使用 BRIEF、BRISK、AKAZE 和 FREAK 进行特征检测和描述二进制描述符。
我正在使用 MINIST 视觉数据集的 28x28 图像进行测试,如下所示:
我通过以下方式调用所有方法:
快速:
FAST = cv.FastFeatureDetector_create(threshold = 80,
nonmaxSuppression = True)
简介:
BRIEF = cv.xfeatures2d.BriefDescriptorExtractor_create(bytes = 16,
use_orientation = False)
轻快:
BRISK = cv.BRISK_create(thresh = 30,
octaves = 0,
patternScale = 1.0)
AKAZE:
AKAZE = cv.AKAZE_create(descriptor_type = cv.AKAZE_DESCRIPTOR_MLDB,
descriptor_size = 0,
descriptor_channels = 3,
threshold = 0.001,
nOctaves = 4,
nOctaveLayers = 4,
diffusivity = cv.KAZE_DIFF_PM_G2)
怪胎:
FREAK = cv.xfeatures2d.FREAK_create(orientationNormalized = True,
scaleNormalized = True,
patternScale = 22.0,
nOctaves = 4)
注意 1:我将描述符 BRIEF 和 FREAK 与 FAST 检测器一起使用。
我找到了关键点并计算了描述符,如下所示:
keypoints = FAST.detect(image, None)
keypoints, descriptors = BRIEF.compute(image, keypoints)
请注意,在此示例中,我试图找到 Keyponts 并计算 BRIEF 描述符,但对于上述 ALL 描述符,我得到以下输出:
print("Keyponts:", keypoints, "\n")
print("Descriptors:", descriptors, "\n")
Keyponts: []
Descriptors: None
注意 2: 我使用了与任何其他 640x546 尺寸图像相同的参数,并且能够找到关键点并计算描述符。问题是我正在搜索需要使用 MINIST 视觉数据集的地方。
注意 3: 使用其他描述符,例如 SIFT、SURF、KAZE 和 ORB 我能够为同一个可视数据集找到 Keyponts 并计算描述符。
我已经多次更改ALL描述符的参数,但不幸的是我无法在可视数据集MNIST中找到关键点并使用它们计算描述符。我想知道是否有正确的方法来选择这些参数,或者有什么我可以做的。
我认为在尺寸为 28x28 (?) 的小图像 (?) 中使用这些描述符查找关键点和计算机描述符存在问题。
我正在使用 Python 3.6 和 OpenCV 4.1(带有 opencv_contrib 模块)。
【问题讨论】:
-
通常描述符适用于 32x32 之类的邻域...所以是的,您的图像太小了
-
BRIEF、BRISK 和 FREAK 在 31x31 的社区以及 ORB 中工作。然而,ORB 描述符与 MNIST 视觉数据集完美配合。
标签: python opencv feature-detection opencv-python feature-descriptor