我对 SiftDescriptorExtractor 工作的最后一部分有疑问,
我正在执行以下操作:
SiftDescriptorExtractor extractor;
Mat descriptors_object;
extractor.compute( img_object, keypoints_object, descriptors_object );
现在我想检查一个 descriptors_object Mat 对象的元素:
std::cout<< descriptors_object.row(1) << std::endl;
输出看起来像:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 32, 15, 0, 0, 0, 0, 0, 0, 73, 33, 11, 0, 0, 0, 0, 0, 0, 5, 114, 1, 0, 0, 0, 0, 51, 154, 20, 0, 0, 0, 0, 0, 154, 154, 1, 2, 1, 0, 0, 0, 154, 148, 18, 1, 0, 0, 0, 0, 0, 2, 154, 61, 0, 0, 0, 0, 5, 60, 154, 30, 0, 0, 0, 0, 34, 70, 6, 15, 3, 2, 1, 0, 14, 16, 2, 0, 0, 0, 0, 0, 0, 0, 154, 84, 0, 0, 0, 0, 0, 0, 154, 64, 0, 0, 0, 0, 0, 0, 6, 6, 1, 0, 1, 0, 0, 0]
但在Lowe 论文中指出:
因此,我们通过将单位特征向量中的值阈值化到每个不大于0.2,然后重新归一化到单位长度来减少大梯度幅度的影响。这意味着匹配大梯度的大小不再那么重要,并且方向的分布更加重要。使用包含相同 3D 对象的不同照明的图像通过实验确定 0.2 的值。
因此,特征向量中的数字不应大于 0.2 值。
问题是,这些值是如何在 Mat 对象中转换的?