共有回帖数 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 回复
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈 |
关于直线 |
版权声明 |
会员须知