我在课堂上到处都能features2D
看到术语query
和train
. 例如matches
have trainIdx
and queryIdx
, and Matchers
havetrain()
方法。
我知道单词train
和query
英文的定义,但我无法理解这个属性或方法的含义。
PS我明白,这是一个非常愚蠢的问题,但也许是因为英语不是我的母语。
我在课堂上到处都能features2D
看到术语query
和train
. 例如matches
have trainIdx
and queryIdx
, and Matchers
havetrain()
方法。
我知道单词train
和query
英文的定义,但我无法理解这个属性或方法的含义。
PS我明白,这是一个非常愚蠢的问题,但也许是因为英语不是我的母语。
为了完成sansuiso的回答,我想选择这些名称的原因应该是在某些应用程序中我们事先有一组图像(训练图像),例如在您的办公室内拍摄的10张图像。可以提取特征并且可以为这些图像计算特征描述符。并在运行时将图像提供给系统以查询经过训练的数据库。因此查询图像是指该图像。我真的不喜欢他们命名这些参数的方式。如果您有一对立体图像并且想要匹配特征,这些名称没有意义,但您必须选择一个约定,即始终将左侧图像称为查询图像,将右侧图像称为训练图像。我在计算机视觉方面获得了博士学位,OpenCV 中的一些命名约定对我来说似乎真的很混乱/愚蠢。
train
:此函数构建分类器内部状态以使其可操作。例如,考虑训练一个 SVM,或者从参考数据构建一个 kd-tree。也许你很困惑,因为这一步在文献中通常被称为学习。
query
是找到一组点的最近邻居的动作,并且通过扩展它还指您想要最近邻居的整个点集。回想一下,您可以在同一个函数调用中询问 1 个点的邻居,或一大堆(通过将特征点堆叠在矩阵中)。
trainIdx
并queryIdx
分别参考参考/查询集中一品脱的索引,即您向匹配器询问离trainIdx
其他点(存储在该位置)最近的点(存储在该queryIdx
位置)。当然trainIdx
是函数调用后才知道的。如果您的点存储在矩阵中,则索引将是所考虑特征的行。
我以一种非常幼稚但有用的方式理解“查询”和“训练”: “训练”:对数据或图像进行预处理以获得数据库 “查询”:将在我们训练的数据库中查询的输入数据或图像前。希望它对你也有帮助。