如何将OpenCV特征描述符规范化为整数?

时间:2011-10-19 16:02:17

标签: opencv normalization feature-detection feature-descriptor

OpenCV SURF实现为图像中找到的每个特征点返回64/128 32位浮点值(描述符)的序列。有没有办法规范化这个浮点值并将它们转换为整数(例如,[0,255])?这将节省重要的空间(每个值1或2个字节,而不是4个)。此外,转换应确保描述符对其他用途仍然有意义,例如聚类。

谢谢!

3 个答案:

答案 0 :(得分:0)

还有其他功能提取器而不是SURF。 BRIEF提取器每个描述符仅使用32个字节。它使用32个无符号字节[0-255]作为其元素。你可以这样创建一个:

Ptr ptrExtractor = DescriptorExtractor::create("BRIEF");

请注意,OpenCV中的许多图像处理例程需要或假设数据存储为浮点数。

答案 1 :(得分:0)

您可以将浮动特征视为普通图像(Mat或cvmat),然后使用cv :: normalize()。另一种选择是使用cv :: norm()来查找描述符值的范围,然后使用cv :: convertTo()来转换为CV_8U。查看OpenCV文档以了解这些功能。

答案 2 :(得分:0)

cv :: SurfFeatureDetector返回的描述符已经规范化。您可以通过返回cv :: Mat的L2 Norm来验证这一点,或参考论文。