我想知道,如果我可以改变SIFT描述符的维度,如果是这样,我怎么能做到这一点。我知道现在的尺寸是128,我们能不能把它变成128*4或者124/4这样?
更新:我试图改变SIFT_DESCR_WIDTH为2,从4在opencv/modules/nonfree/src/sift.cpp,但它不改变描述符的尺寸,当我打印描述符。size()它打印128。
认为,
如果不改变OpenCV源代码,就不能改变OpenCV中的SIFT尺寸。所以你必须更改源代码并重新编译整个OpenCV或非自由模块。
更改该常量,然后执行&make for OpenCV。
注:实际上,它对您来说不会有太大的变化-检查原始SIFT纸,图8。
您可以尝试SURF描述符,它支持64维,并且计算速度比SIFT快。
在从图像中提取描述符后,可以使用PCA(主成分分析)尝试从128维扩展到64维(或您选择的任何维度)。你正在使用c++,但我使用Python来完成我的OpenCV工作,并使用sklearn.decomposition
(我相信你可以查找类似的c++库)。基本上和压缩很相似。当然,你会失去一些准确性。
见https://en.wikipedia.org/wiki/Principal_component_analysis
当然,针对数据集测试的任何图像也需要对具有相同维度设置的描述符向量运行PCA。