SLIDE 1 ì ¡
Planar Augmented Reality
Kameron Kincade
SLIDE 2
What is Augmented Reality?
ì Augment: to make greater or more intense ì Reality: perception of the real world
SLIDE 3 Why Planar Objects?
ì They are Common ì They are Detectable
ì
Calculate 3D points using the pose of the camera
ì
Compare points to see if they lie on a plane
ì They allow for Realistic AR Rendering
SLIDE 4
The Steps
1.) Detect a planar surface 2.) Track the planar surface 3.) Display rendering on the surface
SLIDE 5
The Steps
1.) Detect a planar surface 2.) Track the planar surface 3.) Display rendering on the surface
SLIDE 6
1.) Detecting Planar Surfaces
ì Technique 1: Training Images
SLIDE 7
Looney Tune Detector
SLIDE 8 Using Training Images
- 1. Load in Training Images
- 2. Detect keypoints and descriptors for training images
- 3. Analyze each individual input frame
- Detect its keypoints and descriptors
- 4. Find matches between the training images and current
frame
- 5. Determine if matches are legitimate
SLIDE 9
First Attempt
ì Poor Performance ì Trouble debugging because of lag ì Unable to tell if matcher was working ì SIFT and SURF Problems
SLIDE 10 No SIFT or SURF
ì SIFT – Scale Invariant Feature Transform
ì David Lowe - 1999
ì SURF – Speeded Up Robust Features
ì Herbert Bay – 2006
Due to legal obligations, SIFT and SURF are not packaged with OpenCV4Android
SLIDE 11
SIFT
ì Stores keypoints from reference images into a
database
ì To detect features new images, we identify
candidate locations and then do further investigation
ì Detected features are highly distinctive,
making it likely to find a match in a large database
SLIDE 12 SURF
ì Same basic principles as SIFT ì Distinct locations are marked as “interest
locations”
ì Neighborhood of “interest locations” are
represented as feature vectors
ì The distances between these vectors
determines matches
ì Uses integral images which speed up some of
SLIDE 13
No SIFT or SURF
ì Tried compiling the “non-free” libraries from the C++
source code into library files (.so)
ì Tried using Android NDK to use the native C++
source code
Unsuccessful on both attempts
SLIDE 14
FAST
ì Tried FAST (Features from Accelerated Segment Test)
SLIDE 15
ORB
Oriented FAST and Rotated BRIEF
ì Scale and rotation invariant ì Claimed to be two orders of magnitude faster
than SIFT
This is what I used!
SLIDE 16 Second Attempt
ì Much better performance à THREADS!!! ì Using ORB for feature detection and descriptor
extraction
ì Scale and rotation invariant
SLIDE 17
Looney Tune Detector
How does it work?
SLIDE 18
Load Training Images
SLIDE 19
Analyze Training Images
SLIDE 20
Threads
SLIDE 21
Process Frame
SLIDE 22
Thread Handler
SLIDE 23
Application Overview
ì Load each training image and analyze its keypoints
and descriptors
ì Give each training image its own thread ì When we receive an input frame, calculate its
keypoints and descriptors
ì Have each thread find matches with its training image ì Accept or reject matches to determine detection
SLIDE 24
Improvements
ì Tweak the criteria for determining a good
match
ì Try JNI to import SIFT and SURF to see if
performance is any better
SLIDE 25
Questions?
?