{"id":18267787,"url":"https://github.com/alicevision/popsift","last_synced_at":"2025-04-05T18:09:47.392Z","repository":{"id":32784348,"uuid":"36376397","full_name":"alicevision/popsift","owner":"alicevision","description":"PopSift is an implementation of the SIFT algorithm in CUDA.","archived":false,"fork":false,"pushed_at":"2023-07-05T10:11:11.000Z","size":42902,"stargazers_count":411,"open_issues_count":16,"forks_count":110,"subscribers_count":48,"default_branch":"develop","last_synced_at":"2024-05-01T11:39:07.428Z","etag":null,"topics":["computer-vision","cuda","feature-extraction","gpu","image-processing","sift"],"latest_commit_sha":null,"homepage":"https://popsift.readthedocs.io","language":"Cuda","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alicevision.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":"CONTRIBUTING.md","funding":null,"license":"COPYING.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2015-05-27T15:26:58.000Z","updated_at":"2024-04-25T07:56:40.000Z","dependencies_parsed_at":"2024-01-13T03:28:05.589Z","dependency_job_id":"8946bff6-d8d5-49f0-b873-206802bca7c2","html_url":"https://github.com/alicevision/popsift","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alicevision%2Fpopsift","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alicevision%2Fpopsift/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alicevision%2Fpopsift/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alicevision%2Fpopsift/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alicevision","download_url":"https://codeload.github.com/alicevision/popsift/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247378149,"owners_count":20929297,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["computer-vision","cuda","feature-extraction","gpu","image-processing","sift"],"created_at":"2024-11-05T11:28:52.447Z","updated_at":"2025-04-05T18:09:47.374Z","avatar_url":"https://github.com/alicevision.png","language":"Cuda","funding_links":[],"categories":["Instance Matching"],"sub_categories":[],"readme":"\n# PopSift\n\n[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/3728/badge)](https://bestpractices.coreinfrastructure.org/projects/3728) \n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/64f9192b53df46b483e7cf5be7e2dddd)](https://app.codacy.com/gh/alicevision/popsift/dashboard?utm_source=gh\u0026utm_medium=referral\u0026utm_content=\u0026utm_campaign=Badge_grade)\n\nPopSift is an open-source implementation of the SIFT algorithm in CUDA.\nPopSift tries to stick as closely as possible to David Lowe's famous paper [1], while extracting features from an image in real-time at least on an NVidia GTX 980 Ti GPU.\n\nCheck out the [documentation](https://popsift.readthedocs.io/) for more info.\n\n## HW requirements\n\nPopSift compiles and works with NVidia cards of compute capability \u003e= 3.0 (including the GT 650M), but the code is developed with the compute capability 5.2 card GTX 980 Ti in mind.\n\nCUDA SDK 11 does no longer support compute capability 3.0. 3.5 is still supported with deprecation warning.\n\n## Dependencies\n\nPopSift depends on:\n\n* Host compiler that supports C++14 for CUDA SDK \u003e= 9.0 and C++11 for CUDA SDK 8\n\n* CUDA \u003e= 8.0\n\nOptionally, for the provided applications:\n\n* Boost \u003e= 1.71 (required components {atomic, chrono, date-time, system, thread}-dev)\n\n* DevIL (libdevil-dev) can be used to load a broader range of image formats, otherwise only pgm is supported.\n\n## Build\n\nIn order to build the library you can run:\n\n```\nmkdir build \u0026\u0026 cd build\ncmake ..\nmake\nmake install\n```\n\nSome build options are available:\n\n* `PopSift_BUILD_EXAMPLES` (default: `ON`) enable building the applications that showcase the use of the library.\n\n* `BUILD_SHARED_LIBS` (default: `ON`) controls the type of library to build (`ON` for shared libraries, `OFF` for static)\n\n## Usage\n\nThe main artifact created is `libpopsift`.\nIf enabled, the test application `popsift-demo` is created as well.\nCalling `popsift-demo` without parameters shows the options.\n\n### Using PopSift as third party\n\nTo integrate PopSift into other software, link with `libpopsift`.\nIf your are using CMake for building your project you can easily add PopSift to your project.\nOnce you have built and installed PopSift in a directory (say, `\u003cprefix\u003e`), in your `CMakeLists.txt` file just add the dependency\n\n```cmake\n# Find the package from the PopSiftConfig.cmake\n# in \u003cprefix\u003e/lib/cmake/PopSift/. Under the namespace PopSift::\n# it exposes the target popsift that allows you to compile\n# and link with the library\nfind_package(PopSift CONFIG REQUIRED)\n...\n# suppose you want to try it out in a executable\nadd_executable(poptest yourfile.cpp)\n# add link to the library\ntarget_link_libraries(poptest PUBLIC PopSift::popsift)\n```\n\nThen, in order to build just pass the location of `PopSiftConfig.cmake` from the cmake command line:\n\n```bash\ncmake .. -DPopSift_DIR=\u003cprefix\u003e/lib/cmake/PopSift/\n```\n\n### Calling the API\n\nThe caller must create a `popart::Config` struct (documented in `src/sift/sift_conf.h`) to control the behaviour of the PopSift, and instantiate an object of class `PopSift` (found in `src/sift/popsift.h`).\n\nAfter this, images can be enqueued for SIFT extraction using (`enqueue()`).\nA valid input is a single plane of grayscale values located in host memory.\nThey can passed as a pointer to unsigned char, with a value range from 0 to 255, or as a pointer to float, with a value range from 0.0f to 1.0f.\n\nOnly host memory limits the number of images that can be enqueued.\nThe `enqueue` function returns a pointer to a `SiftJob` immediately and performs the feature extraction asynchronously.\nThe memory of the image passed to enqueue remains the caller's responsibility. Calling `SiftJob::get` on the returned job blocks until features are extracted, and returns them.\n\nFeatures offer iterators that iterate over objects of type `Feature`.\nBoth classes are documented in `sift_extremum.h`.\nEach feature represents a feature point in the coordinate system of the input image, providing X and Y coordinates and scale (sigma), as well as several alternative descriptors for the feature point (according to Lowe, 15% of the feature points should be expected to have 2 or more descriptors).\n\nIn an alternate, deprecated, blocking API, `init()` must be called to pass image width and height to PopSift, followed by a call to `executed()` that takes image data and returns the extracted features. `execute()` is synchronous and blocking.\n\nAs far as we know, no implementation that is faster than PopSift at the time of PopSift's release comes under a license that allows commercial use and sticks close to the original paper at the same time as well.\nPopSift can be configured at runtime to use constants that affect it behaviours.\nIn particular, users can choose to generate results very similar to VLFeat or results that are closer (but not as close) to the SIFT implementation of the OpenCV extras.\nWe acknowledge that there is at least one SIFT implementation that is vastly faster, but it makes considerable sacrifices in terms of accuracy and compatibility.\n\n## Continuous integration:\n\n* ![Continuous Integration](https://github.com/alicevision/popsift/workflows/Continuous%20Integration/badge.svg?branch=master) master branch on Linux.\n\n* ![Continuous Integration](https://github.com/alicevision/popsift/workflows/Continuous%20Integration/badge.svg?branch=develop) develop branch on Linux.\n\n* [![Build status](https://ci.appveyor.com/api/projects/status/rsm5269hs288c2ji/branch/develop?svg=true)](https://ci.appveyor.com/project/AliceVision/popsift/branch/develop) develop branch on Windows.\n\n## License\n\nPopSift is licensed under [MPL v2 license](COPYING.md).\nSIFT was patented in the United States from 1999-03-08 to 2020-03-28. See the [patent link](https://patents.google.com/patent/US6711293B1/en) for more information.\nPopSift license only concerns the PopSift source code and does not release users of this code from any requirements that may arise from patents.\n\n\n## Cite Us\n\nIf you use PopSift for your publication, please cite us as:\n```bibtex\n@inproceedings{Griwodz2018Popsift,\n\t author = {Griwodz, Carsten and Calvet, Lilian and Halvorsen, P{\\aa}l},\n\t title = {Popsift: A Faithful SIFT Implementation for Real-time Applications},\n\t booktitle = {Proceedings of the 9th {ACM} Multimedia Systems Conference},\n\t series = {MMSys '18},\n\t year = {2018},\n\t isbn = {978-1-4503-5192-8},\n\t location = {Amsterdam, Netherlands},\n\t pages = {415--420},\n\t numpages = {6},\n\t doi = {10.1145/3204949.3208136},\n\t acmid = {3208136},\n\t publisher = {ACM},\n\t address = {New York, NY, USA},\n}\n```\n\n\n## Acknowledgements\n\nPopSift was developed within the project [POPART](https://alicevision.org/popart), which has been funded by the [European Commission in the Horizon 2020](https://cordis.europa.eu/project/id/644874) framework.\n\n___\n\n[1]: Lowe, D. G. (2004). Distinctive Image Features from Scale-Invariant Keypoints. International Journal of Computer Vision, 60(2), 91–110. doi:10.1023/B:VISI.0000029664.99615.94\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falicevision%2Fpopsift","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falicevision%2Fpopsift","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falicevision%2Fpopsift/lists"}