SIFT-GPU关于SaveSIFT函数的改进

本文介绍了SIFT-GPU在SIFT特征提取过程中,SaveSIFT函数导致运行速度较慢的问题。作者通过分析源码,发现C++的stream类保存方式效率较低,改为使用fprintf提高速度。在改进后的代码中,二进制格式保存部分未改动,但整体运行速度提升至原来的10倍。
摘要由CSDN通过智能技术生成

SIFT-GPU是一个高效的进行SIFT特征提取和匹配的工具,是目前我用过的速度最快的工具。网址如下:http://www.cs.unc.edu/~ccwu/siftgpu/#lowesift
我在用SIFT-GPU进行SIFT特征提取的过程中,发现运行的速度比较慢,通过对运行的代码的时间分析,发现主要元凶是保存SIFT特征的函数SaveSIFT占用了大量的时间(包括匹配的时间,save的时间大约在80%以上)。然后分析源码可以看出来它的源码是用C++的stream类进行保存的,我们都知道C语言的fprintf比前面的方法要快很多,因此我改进了其中的代码,是SiftGPU工程下的SiftPyramid.cpp文件中的SaveSIFT函数。
这里我只改了一部分,因为SaveSIFT是可以选择保存为二进制格式文件还是保存为普通的文件的,对于保存为二进制格式的部分我没有改动,有需要的请自己修改,改动的方法是相同的。调整后的代码运行速度大约是原有代码运行速度的10倍。
改进后的代码如下:

void SiftPyramid::SaveSIFT(const char * szFileName)
{
    if (_featureNum <=0) return;
    float * pk = &_keypoint_buffer[0];
    FILE *f = fopen(szFileName, "w");
    cout << szFileName << endl;
    if(GlobalUtil::_BinarySIFT)
    {
        std::ofstream out(szFileName, ios::binary);
        out.write((char* )(&_featureNum), sizeof(int));

        if(GlobalUtil::_DescriptorPPT)
        {
            int dim = 128;
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值