Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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
SiFT的Opencv特征向量大小_Opencv_Image Processing_Bayesian_Surf - Fatal编程技术网

SiFT的Opencv特征向量大小

SiFT的Opencv特征向量大小,opencv,image-processing,bayesian,surf,Opencv,Image Processing,Bayesian,Surf,我尝试使用标准贝叶斯分类器使用sift进行对象分类。当我计算每个大小可变的图像的描述符时,我得到不同大小的特征向量。例如: Feature Size: [128 x 39] Feature Size: [128 x 54] Feature Size: [128 x 69] Feature Size: [128 x 64] Feature Size: [128 x 14] 至于开发,我使用20个训练图像,因此我有20个标签。我的分类只有三类,包括汽车、书和球。所以我的标签向量大小是[1

我尝试使用标准贝叶斯分类器使用sift进行对象分类。当我计算每个大小可变的图像的描述符时,我得到不同大小的特征向量。例如:

Feature Size: [128 x 39]

Feature Size: [128 x 54] 

Feature Size: [128 x 69]

Feature Size: [128 x 64]

Feature Size: [128 x 14]
至于开发,我使用20个训练图像,因此我有20个标签。我的分类只有三类,包括汽车、书和球。所以我的标签向量大小是[1 x 20]

据我所知,要执行机器学习,特征向量大小和标签向量大小应该相同,因此我应该得到训练数据的向量大小为[_uux20],标签为[1 x 20]

但我的问题是,sift有128维的特征空间,因此每个图像都有不同的特征大小,如我上面所示。如何在不丢失特征的情况下将所有对象转换为相同大小? 或者我可能做得不对,所以请帮我解决这个问题


PS:事实上,我是用弓模型做的,它是有效的,但只是为了我的学习目的,我在这件事上尝试这么做只是出于兴趣,所以欢迎任何提示和建议。谢谢你

你说得对,SIFT描述符是一个128维的特征

为图像中检测到的每个关键点计算SIFT描述符。在计算描述符之前,您可能使用检测器(如Harris、Sift或Surf检测器)来检测感兴趣的点

检测关键点和计算描述符是两个独立的步骤

在程序中打印
特征尺寸:[128 x Y]
时,Y表示当前图像中检测到的关键点数量


通常,使用BOW可以为每个关键点描述符指定BOW中最近簇的标记。根据您的应用程序,您可以做出决定。。。(对场景中是否存在一个对象进行投票,或…

如果您不想使用BOW,可以尝试匹配原始场景中所述的各个筛选功能

其基本思想是将两幅图像相互比较,然后确定它们是否相似。您可以通过比较各个SIFT特征来实现这一点。你决定他们是否匹配。然后,要检查空间位置是否一致,需要检查是否可以将匹配的特征从一个图像转换到另一个图像


有关详细信息,请参见。

谢谢。事实上,我做了一个作业,我用了弓,效果很好。然而,我非常感兴趣,我正在尝试不同的方法来分类图像。我试图在不使用弓模型的情况下进行分类,所以我想知道如何分配训练矩阵。你认为我会把矩阵从[128 x Y]改成[1 x Y]吗。这意味着我只使用了向量的一维。你怎么看?[1 x Y]矩阵毫无意义。实际上,您可以使用每个Y的单个SIFT特征[128 x 1],并将它们与从另一幅图像中提取的SIFT进行比较。对不起,实际上这就是它的意思。。非常感谢。