使用 BRIEF、BRISK、AKAZE 和 FREAK 检测到零个关键点
Zero keypoints detected with BRIEF, BRISK, AKAZE and FREAK
我正在尝试使用 BRIEF、BRISK、AKAZ[=82= 进行特征检测和描述]E 和 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 = 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)
请注意,在此示例中,我试图找到关键点并计算 BRIEF 描述符,但对于 ALL 描述符以上,我得到以下输出:
print("Keyponts:", keypoints, "\n")
print("Descriptors:", descriptors, "\n")
Keyponts: []
Descriptors: None
注意 2: 我使用与任何其他 640x546 尺寸图像相同的参数,我能够找到关键点并计算描述符。问题是我正在搜索需要使用 MINIST 可视化数据集的地方。
注意 3: 与其他描述符如 SIFT、SURF、KAZE 和 ORB 我能够为同一视觉数据集找到关键点并计算描述符。
我已经多次更改 ALL 描述符的参数,但不幸的是我无法在视觉数据集中找到关键点并用它们计算描述符 MNIST 。我想知道是否有正确的方法来选择这些参数,或者我是否可以做些什么。
我认为在大小为 28x28 (?)[=82 的小图像 (?) 中使用这些描述符查找关键点和计算机描述符存在问题=].
我正在使用 Python 3.6 和 OpenCV 4.1(使用 opencv_contrib 个模块)。
原因:
MNIST
图片为 28x28 像素,如问题中所述。
为了找到关键点和计算描述符,像 SIFT
和 SURF
这样的卓越描述符可以在更小的补丁中获得很好的结果,但许多描述符(例如 ORB
)在更小的补丁中获得很好的结果一个 32x32 的补丁。
无法使用描述符 BRIEF
、BRISK
、AKAZE
和 FREAK
在 MNIST
上获得结果,因为 MNIST
有小图片。
解决方案:
为了避免 return 没有描述符的关键点,BRIEF
、BRISK
、AKAZE
和 FREAK
删除了关键点。有了这个,可以观察到这些描述符不适合 MNIST
数据集中存在的图像。
其他测试:
但是,使用描述符 BRIEF
、BRISK
、AKAZE
和 FREAK
,可以获得结果(使用问题中提供的相同参数) 与具有更大补丁的任何其他图像(在本实验中为 640x546 补丁)。
BRIEF
:
BRISK
:
AKAZE
:
FREAK
:
由此,可以观察到640x546像素大小的图像具有更显着的特征。
我希望这个答案能帮助其他有同样问题的人。
要了解有关检测和描述技术的更多信息,我推荐 GitHub 上的以下存储库:
我正在尝试使用 BRIEF、BRISK、AKAZ[=82= 进行特征检测和描述]E 和 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 = 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)
请注意,在此示例中,我试图找到关键点并计算 BRIEF 描述符,但对于 ALL 描述符以上,我得到以下输出:
print("Keyponts:", keypoints, "\n")
print("Descriptors:", descriptors, "\n")
Keyponts: []
Descriptors: None
注意 2: 我使用与任何其他 640x546 尺寸图像相同的参数,我能够找到关键点并计算描述符。问题是我正在搜索需要使用 MINIST 可视化数据集的地方。
注意 3: 与其他描述符如 SIFT、SURF、KAZE 和 ORB 我能够为同一视觉数据集找到关键点并计算描述符。
我已经多次更改 ALL 描述符的参数,但不幸的是我无法在视觉数据集中找到关键点并用它们计算描述符 MNIST 。我想知道是否有正确的方法来选择这些参数,或者我是否可以做些什么。
我认为在大小为 28x28 (?)[=82 的小图像 (?) 中使用这些描述符查找关键点和计算机描述符存在问题=].
我正在使用 Python 3.6 和 OpenCV 4.1(使用 opencv_contrib 个模块)。
原因:
MNIST
图片为 28x28 像素,如问题中所述。
为了找到关键点和计算描述符,像 SIFT
和 SURF
这样的卓越描述符可以在更小的补丁中获得很好的结果,但许多描述符(例如 ORB
)在更小的补丁中获得很好的结果一个 32x32 的补丁。
无法使用描述符 BRIEF
、BRISK
、AKAZE
和 FREAK
在 MNIST
上获得结果,因为 MNIST
有小图片。
解决方案:
为了避免 return 没有描述符的关键点,BRIEF
、BRISK
、AKAZE
和 FREAK
删除了关键点。有了这个,可以观察到这些描述符不适合 MNIST
数据集中存在的图像。
其他测试:
但是,使用描述符 BRIEF
、BRISK
、AKAZE
和 FREAK
,可以获得结果(使用问题中提供的相同参数) 与具有更大补丁的任何其他图像(在本实验中为 640x546 补丁)。
BRIEF
:
BRISK
:
AKAZE
:
FREAK
:
由此,可以观察到640x546像素大小的图像具有更显着的特征。
我希望这个答案能帮助其他有同样问题的人。
要了解有关检测和描述技术的更多信息,我推荐 GitHub 上的以下存储库: