SiftGPU
来源:互联网 发布:阿里云 cdn 备案 编辑:程序博客网 时间:2024/06/10 03:52
点击打开链接
SiftGPU: A GPU Implementation of Scale Invariant Feature Transform (SIFT)
Changchang Wu
University of North Carolina at Chapel Hill
* VisualSFM with integration of SiftGPU and Multicore Bundle Adjustment
* Multicore Bundle Adjustment for GPU and CPU is now available
* Last update on 2/7/2012 (Bugfix: update maximum texture dimension for CUDA-based SiftMatchGPU).
* 4/30/2012, Mac OSX patch to ProgramGLSL.cpp provided by Roy Shilkrot: ProgramGLSL.cpp.patch
SiftGPU is an implementation of SIFT [1] for GPU. SiftGPU processes pixels parallely to build Gaussian pyramids and detect DoG Keypoints. Based on GPU list generation[3], SiftGPU then uses a GPU/CPU mixed method to efficiently build compact keypoint lists. Finally keypoints are processed parallely to get their orientations and descriptors.
SiftGPU is inspired by Andrea Vedaldi's sift++[2] and Sudipta N Sinha et al's GPU-SIFT[4] . Many parameters of sift++ ( for example, number of octaves, number of DOG levels, edge threshold, etc) are also available in SiftGPU. The shader programs are dynamically generated according to the parameters that user specified.
SiftGPU also includes a GPU exhaustive/guided sift matcher SiftMatchGPU. It basically multiplies the descriptor matrix on GPU and finds the closest feature matches on GPU. Both GLSL and CUDA implementations are provided.
SiftGPU requires a decent GPU that has a large graphic memory and supports dynamic branching. GLSL is used by default, and CUDA is provided as an alternative for nVidia graphic cards.
SiftGPU uses GLEW 1.51, DevIL1.77 (can be disabled), GLUT(only by the viewer), and CUDA(optional). You'll need to make sure that your system has all the depending libraries of corresponding versions. To update the libraries, you'll need to replace the header files in SiftGPU\Include\, and the corresponding binaries.
NOTE FOR CUDA : 1. The thread block setting is currently tuned on nVidia GTX 8800. It may not be optimized for other GPUs. 2. The CUDA version is not compiled by default. You need to define CUDA_SIFTGPU_ENABLED to the compiler and recompile the package. For VS2010 users, you can just use SiftGPU_CUDA_Enabled solution.
SiftGPU-V382 (5.0MB; Including code, manual , windows binary and some test images) Want to cite SiftGPU?
VisualSFM: an integrated SFM system based on SiftGPU and Multicore Bundle Adjustment
Mac OSX patch to ProgramGLSL.cpp provided by Roy Shilkrot: ProgramGLSL.cpp.patch
You might be interested in the Matlab Versions mex'd by Adam Chapman and by Parag. K. Mital
* For commercial licensing, please contact Trude Amick (trude_amick@unc.edu, 919-843-7415)
SimpleSIFT.cpp gives some examples of using SiftGPU and SiftMatchGPU.
NOTICE: download V382 or do the follow to fix a minor bug (2/7/2012)
please add "GlobalUtil::_texMaxDimGL = 32768;" after L1373 of ProgramCU.cu
In V370-V381, the maximum texture dimension is not properly updated from hardware.
List of recent changes (complete list, previous versions)
* Really fixed the bug in CUDA-version Fundamental-matrix guided SIFT matching (12/04/2011)
* Automatic reduction of working dimension according to GPU memory cap (8/2011)
* Fixed the orientation GLSL function that may have problem with new nVidia driver (7/2011)
* Modified some GLSL code for ATI and tested on a real ATI card (7/2011)
* Converted the MSVC Solution to Visual Studio V2010 and tested CUDA4 (6/2011)
* Automatic switching from OpenGL to CUDA when OpenGL is not supported (1/2011)
* Dropped the indirect data transfer path CPU->GL->CUDA (1/2011)
Some previous changes
6. Added device selection for Multi-threading (Check the example atMultiThreadSIFT.cpp).
5. Used SSE to speedup the descriptor normalization step for the OpenGL implementation.
4. Added CUDA-based SiftGPU/SiftMatchGPU implementation. See Figure below for the speed.
3. Added OpenGL-based sift matching implementation, check example #7 in manual. (Thanks to Zach)
2. Added function to compute descriptors for user-specified keypoints, check example #6 in manual.
1. Improved speed by %50 compared with V293. Look here for experiment details andexplanations
Below is the evaluation of the speed of V340 on different image sizes. "-fo -1" means using upsampled image. "-glsl" uses GLSL and "-cuda" uses CUDA (The experiment images are all resized from this image) .
System : nVidia 8800GTX, 768MB, Driver 182.08, Windows XP, Intel 3G P4 CPU, 3.5G RAM. (V311 Speed)
Below is the comparision with Lowe's SIFT on box.pgm using the comparison code fromVedaldi's SIFT .
References[1] D. G. Lowe. Distinctive image features from scale-invariant keypoints . International Journal of Computer Vision, November 2004.
[2] A. Vedaldi. sift++, http://vision.ucla.edu/~vedaldi/code/siftpp/siftpp.html.
[3] G. Ziegler, et al. GPU point list generation through histogram pyramids. In Technical Report, June 2006.
[4] Sudipta N Sinha, Jan-Michael Frahm, Marc Pollefeys and Yakup Genc, "GPU-Based Video Feature Tracking and Matching ",
EDGE 2006, workshop on Edge Computing Using New Commodity Architectures, Chapel Hill, May 2006
- SiftGPU
- SiftGPU优化思路整理
- win7 vs2015 编译SiftGPU动态库
- SiftGPU:编译SiftGPU出现问题-无法解析的外部符号 glutInit
- SiftGPU使用GLSL语言, WINDOWS系统编译方法
- 使用SiftGPU对两幅图像进行特征点匹配
- 【转】SiftGPU不自动释放GL context的bug及其修正方法
- SIFT特征提取的GPU实现 SiftGPU: A GPU Implementation of Scale Invariant Feature Transform (SIFT)
- 使用SiftGPU遇到问题:freeglut ERROR: Function <glutDestroyWindow> called without first calling 'glutInit'.
- Redis 配置安装,主从配置安装
- svn软件的安装
- Mysql-proxy安装与测试
- keepdalived+lvs 负载均衡
- 如何查看Linux是32位还是64位,以及发行版本
- SiftGPU
- linux 32位和linux64位有什么区别
- 在linux下如何查看CPU是否支持64位的方法
- Nginx日志记录Cookie 学习笔记
- 计算机视觉方面的代码
- ss
- poj 3373
- 爱学习,爱编程,爱咖啡可乐 爱挑战,爱钻研,爱打游戏 爱晚起,也爱工作到深夜 我擅长技术,崇尚简单和懒惰 我神秘而孤僻,沉默而爱憎分明 Don't Panic! I'm a programmer
- nodejs简单应用五( 提高页面加载速度---304与压缩)