签到

06月21日
尚未签到

共有回帖数 0

    十万个为什么

    等级:
    SURF(Speeded Up Robust Features)是目前比较火的特征提取算法,可用于图像拼接、目标跟踪、目标识别等。我写了一份 C 实现,使用 64 维特征点描述子,后来用不上了,就先放着吧。本代码在 BSD 许可证下发布,在 OS X 10.8 和 FreeBSD 9.1 下开发,使用 clang 编译通过。

    本代码托管在 bitbucket 的 liyuchong/SURF 下,欢迎随便 fork不方便用比特筒子的可以直接从网盘下:http://pan.baidu.com/share/link?shareid=4153301444&uk=4245098871

    注意 SURF 受专利保护,不可随便用于商业应用。我放弃 SURF 的主要原因就是其专利,改用无专利保护的 BRISK(Binary Robust Invariant Scalable Keypoints)算法。若有兴趣可参考在 ICCV 2011 上 Stefan Leutenegger 等人的论文。
    反白我会说我在等过期么。。。/反白

    主要实现在 src/SURF 目录。
    本实现中,SURF 的计算过程主要分为 3 步:
    1)计算积分图:buildIntergralImage();
    2)提取特征点:extractFeaturePoints();
    3)描述特征点:calculateFeaturePointsDescriptor()。
    分别在 IntegralImage.c、HessianMatrix.c 和 FeaturePointDescriptor.c 中实现。
    更详细的步骤可参考 Herbert Bay 等人的论文,高数没挂的应该都看得懂。

    使用方法:直接调用 SURF() 函数,原型在 SURF.h 中定义:PS: *写在左边的都是异端!!!!烧死!!!(╬゚д゚)
    FeaturePointsVector *SURF(Image *image, const float threshold, const int octaveFilters, const int initSampleCount);
    其中image 为输入图像;
    threshold 为特征点识别阈值;
    octaveFilters 为滤波器数量,一般使用默认值 DEFAULT_OCTAVE_FILTER_COUNT 即可;
    initSampleCount 为初始采样数,一般使用默认值 DEFAULT_INITIAL_SAMPLE_COUNT 即可。
    FeaturePoint *的容器 FeaturePointsVector *,包含所有识别的特征点的 64 维特征向量、特征点坐标、主方向和半径。
    使用范例:
    size_t i;Image *image = decodeFromFile("/tmpfs/test.jpg");
    FeaturePointsVector *features = SURF(image, 0.0001f, DEFAULT_OCTAVE_FILTER_COUNT, DEFAULT_INITIAL_SAMPLE_COUNT);
    /* 你的代码 */
    imageRelease(image);
    for(i = 0; i  SIMPLE_VECTOR_SIZE(features); i++)
    releaseFeaturePoint(SIMPLE_VECTOR_AT(features, i));
    SIMPLE_VECTOR_RELEASE(features);
    注:本代码依赖 jpeg、libtiff。libpng 高版本编译的时候有奇怪的问题,就先用 libpng 1.2 凑合。

    楼主 2016-04-09 17:58 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知