【问题标题】:Zero keypoints detected with BRIEF, BRISK, AKAZE and FREAK使用 Brief、BRISK、AKAZE 和 FREAK 检测到零关键点
【发布时间】:2020-08-09 05:48:19
【问题描述】:

我正在尝试使用 BRIEFBRISKAKAZE 和 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:我将描述符 BRIEFFREAKFAST 检测器一起使用。

我找到了关键点并计算了描述符,如下所示:

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: 使用其他描述符,例如 SIFTSURFKAZEORB 我能够为同一个可视数据集找到 Keyponts 并计算描述符。

我已经多次更改ALL描述符的参数,但不幸的是我无法在可视数据集MNIST中找到关键点并使用它们计算描述符。我想知道是否有正确的方法来选择这些参数,或者有什么我可以做的。

我认为在尺寸为 28x28 (?) 的小图像 (?) 中使用这些描述符查找关键点和计算机描述符存在问题。

我正在使用 Python 3.6OpenCV 4.1(带有 opencv_contrib 模块)。

【问题讨论】:

  • 通常描述符适用于 32x32 之类的邻域...所以是的,您的图像太小了
  • BRIEF、BRISK 和 FREAK 在 31x31 的社区以及 ORB 中工作。然而,ORB 描述符与 MNIST 视觉数据集完美配合。

标签: python opencv feature-detection opencv-python feature-descriptor


【解决方案1】:

原因:

MNIST 图像为 28x28 像素,如问题中所述。

为了找到关键点和计算描述符,SIFTSURF 等显着描述符可以在更小的补丁中获得很好的结果,但许多描述符(例如 ORB)在 32x32 补丁中获得了很好的结果。

使用描述符BRIEFBRISKAKAZEFREAK 无法在MNIST 上获得结果,因为MNIST 具有小图像。

解决方案:

为避免返回没有描述符的关键点,BRIEFBRISKAKAZEFREAK 删除关键点。有了这个,可以观察到这些描述符不适合MNIST 数据集中存在的图像。

其他测试:

但是,使用描述符 BRIEFBRISKAKAZEFREAK,可以使用任何其他具有更大补丁的图像(使用问题中提供的相同参数)获得结果(在本实验中为 640x546 补丁)。

BRIEF:

BRISK:

AKAZE:

FREAK:

这样,可以观察到大小为 640x546 像素的图像具有更显着的特征。

我希望这个答案可以帮助其他有同样问题的人。

要了解有关检测和描述技术的更多信息,我推荐 GitHub 上的以下存储库:

【讨论】:

    猜你喜欢
    • 2012-09-06
    • 2021-09-01
    • 2021-09-02
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 2012-09-11
    • 2016-02-12
    相关资源
    最近更新 更多