Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过简短、轻快、赤裸和反常检测到零关键点_Python_Opencv_Feature Detection_Opencv Python_Feature Descriptor - Fatal编程技术网

Python 通过简短、轻快、赤裸和反常检测到零关键点

Python 通过简短、轻快、赤裸和反常检测到零关键点,python,opencv,feature-detection,opencv-python,feature-descriptor,Python,Opencv,Feature Detection,Opencv Python,Feature Descriptor,我正在尝试使用简短的、轻快的、阿卡兹的E和畸形的二进制描述符进行特征检测和描述 我正在使用MINIST视觉数据集的28x28图像进行测试,如下所示: 我按以下方式调用了所有方法: 快速: FAST = cv.FastFeatureDetector_create(threshold = 80, nonmaxSuppression = True) BRIEF = cv.xfeatures2d.BriefDescriptor

我正在尝试使用简短的轻快的阿卡兹的E和畸形的二进制描述符进行特征检测和描述

我正在使用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)
简介:

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)
轻快:

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)
阿卡泽:

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)
怪胎:

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:我使用了快速检测器的描述符简短畸形

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

keypoints = FAST.detect(image, None)
keypoints, descriptors = BRIEF.compute(image, keypoints)
请注意,在本例中,我试图找到Keypont并计算简短的描述符,但对于上面描述的所有描述符,我得到以下输出:

print("Keyponts:", keypoints, "\n")

print("Descriptors:", descriptors, "\n")

Keyponts: [] 

Descriptors: None 
注2:我使用了与任何其他640x546大小图像相同的参数,我能够找到关键点并计算描述符。问题是我正在进行搜索,需要使用MINIST可视化数据集

注3:使用其他描述符,如SIFTSURFKAZEORB,我能够找到同一视觉数据集的Keypont和计算描述符

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

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

我正在使用Python 3.6OpenCV 4.1(使用OpenCV_contrib模块)。

原因:
MNIST
图像为28x28像素,如问题中所述

为了找到关键点并计算描述符,像
SIFT
SURF
这样出色的描述符可以在较小的补丁中获得很好的结果,但是,许多描述符(例如
ORB
)在32x32补丁中获得很好的结果

由于
MNIST
的图像较小,因此无法使用描述符
BRIEF
BRISK
AKAZE
FREAK
获得有关
MNIST
的结果

解决方案: 为避免返回没有描述符的关键点,
short
BRISK
AKAZE
FREAK
删除关键点。这样,可以观察到这些描述符不适合
MNIST
数据集中的图像

其他测试: 然而,使用描述符
简短
轻快
阿卡泽
,和
畸形
,可以获得任何其他具有更大斑块(在本实验中为640x546斑块)的图像的结果(使用问题中给出的相同参数)

简介

轻快的:

阿卡泽:

FREAK

这样,可以观察到尺寸为640x546像素的图像具有更显著的特征

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

要了解更多有关检测和描述技术的信息,我建议在GitHub上使用以下存储库:


描述符通常在类似32x32的社区中工作。。。所以,是的,你的图片太小了,在31x31的社区里,简练、轻快、怪异,就像球体一样。然而,ORB描述符与MNIST可视化数据集完美配合。