GithubHelp home page GithubHelp logo

lukevanin / siftmetal Goto Github PK

View Code? Open in Web Editor NEW
13.0 4.0 6.0 11.35 MB

GPU accelerated SIFT detector for Apple devices using Metal.

Swift 84.54% Metal 12.82% C++ 1.29% C 1.25% Objective-C 0.10%
apple gpu metal sift swift vision

siftmetal's Introduction

SIFTMetal

Luke Van In, 2023

An implementation of the Scale Invariant Feature Transform (SIFT) algorithm, for Apple devices, written in Swift using Metal compute.

SIFT is described in the paper "Distinctive Image Features from Scale-Invariant Keypoints" by David Lowe published in 2004[1].

This implementation is based on the source code from the "Anatomy of the SIFT Method" by Ives Ray-Otero and Mauricio Delbracio published in the Image Processing Online (IPOL) journal in 2014[2], and source code by Rob Whess[3].

The scale-invariant feature transform (SIFT) is a computer vision algorithm to detect, describe, and match local features in images, invented by David Lowe in 1999. Applications include object recognition, robotic mapping and navigation, image stitching, 3D modeling, gesture recognition, video tracking, individual identification of wildlife and match moving.[4]

A novel Approximate K Nearest Neighbors algorithm is provided for matching SIFT descriptors, using a trie data structure. The complexity of the algorithm is:

  • Initial construction and update is linear O(n) complexity.
  • Nearest neighbor search is O(1) complexity.

SIFT keypoints of objects are first extracted from a set of reference images[1] and stored in a database. An object is recognized in a new image by individually comparing each feature from the new image to this database and finding candidate matching features based on Euclidean distance of their feature vectors. From the full set of matches, subsets of keypoints that agree on the object and its location, scale, and orientation in the new image are identified to filter out good matches. The determination of consistent clusters is performed rapidly by using an efficient hash table implementation of the generalised Hough transform. Each cluster of 3 or more features that agree on an object and its pose is then subject to further detailed model verification and subsequently outliers are discarded. Finally the probability that a particular set of features indicates the presence of an object is computed, given the accuracy of fit and number of probable false matches. Object matches that pass all these tests can be identified as correct with high confidence.[2] [1]: https://www.cs.ubc.ca/~lowe/papers/ijcv04.pdf "Distinctive Image Features from Scale-Invariant Keypoints", Lowe, International Journal of Computer Vision, 2004 [2]: https://github.com/robwhess/opensift OpenSIFT, Whess, GitHub, 2012 [3]: http://www.ipol.im/pub/art/2014/82/article.pdf "Anatomy of the SIFT Method", Rey-Otero & Delbracio, IPOL, 2014 [4]: https://en.wikipedia.org/wiki/Scale-invariant_feature_transform Scale-invariant feature transform, Wikipedia

siftmetal's People

Contributors

lukevanin avatar

Stargazers

 avatar Riccardo Persello avatar 曹明伟,Mingwei Cao avatar Liang Mi avatar Etern1ty avatar Light avatar wholesomemoon avatar Michael Chaschin avatar Jaysen Marais avatar  avatar Greg Cockroft avatar Andy Qua avatar John Scott avatar

Watchers

 avatar Light avatar Nhan Tran avatar  avatar

siftmetal's Issues

About the LICENSE

Hello, first of all, thank you for opening this wonderful code.
I'm considering about using this feature/descriptor module(both extraction and matching) in my iOS project. However I first need to check the LICENSE of this repository before testing the module's performance and adding it as a dependency framework. So I'd be grateful if you could let me know whether you have any plans of specifying the LICENSE explicitly in the repository.
Thank you for your kind work again.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.