Introduction Feature Estimation Keypoint Detection Keypoints + Features. PCL :: Features. Michael Dixon and Radu B. Rusu



Similar documents
PCL Tutorial: The Point Cloud Library By Example. Jeff Delmerico. Vision and Perceptual Machines Lab 106 Davis Hall UB North Campus.

3D Object Recognition in Clutter with the Point Cloud Library

::pcl::registration Registering point clouds using the Point Cloud Library.

A Genetic Algorithm-Evolved 3D Point Cloud Descriptor

A Study on SURF Algorithm and Real-Time Tracking Objects Using Optical Flow

Probabilistic Latent Semantic Analysis (plsa)

Fast Point Feature Histograms (FPFH) for 3D Registration

Image Segmentation and Registration

Recovering Primitives in 3D CAD meshes

IMPLICIT SHAPE MODELS FOR OBJECT DETECTION IN 3D POINT CLOUDS

Fast and Robust Normal Estimation for Point Clouds with Sharp Features

Section 12.6: Directional Derivatives and the Gradient Vector

COS702; Assignment 6. Point Cloud Data Surface Interpolation University of Southern Missisippi Tyler Reese December 3, 2012

PCL - SURFACE RECONSTRUCTION

Recognition. Sanja Fidler CSC420: Intro to Image Understanding 1 / 28

siftservice.com - Turning a Computer Vision algorithm into a World Wide Web Service

Monash University Clayton s School of Information Technology CSE3313 Computer Graphics Sample Exam Questions 2007

Android Ros Application

t t k t t tt t k

Terrain Traversability Analysis using Organized Point Cloud, Superpixel Surface Normals-based segmentation and PCA-based Classification

Classifying Manipulation Primitives from Visual Data

TouchPaper - An Augmented Reality Application with Cloud-Based Image Recognition Service

Point Cloud Data Filtering and Downsampling using Growing Neural Gas

Fast Matching of Binary Features

Automatic georeferencing of imagery from high-resolution, low-altitude, low-cost aerial platforms

Data Mining: Exploring Data. Lecture Notes for Chapter 3. Slides by Tan, Steinbach, Kumar adapted by Michael Hahsler

Data Mining: Exploring Data. Lecture Notes for Chapter 3. Introduction to Data Mining

Iris Sample Data Set. Basic Visualization Techniques: Charts, Graphs and Maps. Summary Statistics. Frequency and Mode

Introduction to Python

New Hash Function Construction for Textual and Geometric Data Retrieval

DATA MINING CLUSTER ANALYSIS: BASIC CONCEPTS

Bases de données avancées Bases de données multimédia

Cluster Analysis: Advanced Concepts

Topographic Change Detection Using CloudCompare Version 1.0

Data Mining Cluster Analysis: Advanced Concepts and Algorithms. Lecture Notes for Chapter 9. Introduction to Data Mining

More Local Structure Information for Make-Model Recognition

Local features and matching. Image classification & object localization

Removing Moving Objects from Point Cloud Scenes

Data Mining: Exploring Data. Lecture Notes for Chapter 3. Introduction to Data Mining

MA 323 Geometric Modelling Course Notes: Day 02 Model Construction Problem

Clustering. Data Mining. Abraham Otero. Data Mining. Agenda

Lecture 2: The SVM classifier

An introduction to Global Illumination. Tomas Akenine-Möller Department of Computer Engineering Chalmers University of Technology

3D Model based Object Class Detection in An Arbitrary View

COM CO P 5318 Da t Da a t Explora Explor t a ion and Analysis y Chapte Chapt r e 3

3D Building Roof Extraction From LiDAR Data

Pemrograman Dasar. Basic Elements Of Java

Jiří Matas. Hough Transform

On Fast Surface Reconstruction Methods for Large and Noisy Point Clouds

Implementation Aspects of OO-Languages

C++ Programming Language

Automatic Building Facade Detection in Mobile Laser Scanner point Clouds

How To Write A Fast Binary Descriptor Based On Brief

Beginning to Program Python

Heat Kernel Signature

Real-Time 3D Reconstruction Using a Kinect Sensor

H.Calculating Normal Vectors

CS 534: Computer Vision 3D Model-based recognition

13. Publishing Component Information to Embedded Software

Review Sheet for Test 1

Comp151. Definitions & Declarations

Data Mining Cluster Analysis: Advanced Concepts and Algorithms. Lecture Notes for Chapter 9. Introduction to Data Mining

Doctor Walt s Tips and Tricks 1

SWIGS: A Swift Guided Sampling Method

Recognizing Cats and Dogs with Shape and Appearance based Models. Group Member: Chu Wang, Landu Jiang

Math 4310 Handout - Quotient Vector Spaces

EXPLORING SPATIAL PATTERNS IN YOUR DATA

Data Exploration Data Visualization

FREJA Win Software for FREJA relay testing system

DAMAGED ROAD TUNNEL LASER SCANNER SURVEY

Support Vector Machine (SVM)

So which is the best?

We can display an object on a monitor screen in three different computer-model forms: Wireframe model Surface Model Solid model

Prentice Hall Connected Mathematics 2, 7th Grade Units 2009

Epipolar Geometry. Readings: See Sections 10.1 and 15.6 of Forsyth and Ponce. Right Image. Left Image. e(p ) Epipolar Lines. e(q ) q R.

Level Set Framework, Signed Distance Function, and Various Tools

Name Class. Date Section. Test Form A Chapter 11. Chapter 11 Test Bank 155

MODERN VOXEL BASED DATA AND GEOMETRY ANALYSIS SOFTWARE TOOLS FOR INDUSTRIAL CT

Segmentation of building models from dense 3D point-clouds

Randomized Trees for Real-Time Keypoint Recognition

Robust NURBS Surface Fitting from Unorganized 3D Point Clouds for Infrastructure As-Built Modeling

Metric Spaces. Chapter 1

A Comparative Study of SIFT and its Variants

The use of computer vision technologies to augment human monitoring of secure computing facilities

The Delicate Art of Flower Classification

Analysis of Multi-Spacecraft Magnetic Field Data

Augmented Reality Tic-Tac-Toe

ECE 122. Engineering Problem Solving with Java

COMPUTER AIDED GEOMETRIC MODELLING OF CYLINDRICAL WORM GEAR DRIVE HAVING ARCHED PROFILE S.

Intensity transformations

Modelling, Extraction and Description of Intrinsic Cues of High Resolution Satellite Images: Independent Component Analysis based approaches

Tracking in flussi video 3D. Ing. Samuele Salti

1 3 4 = 8i + 20j 13k. x + w. y + w

Feature Tracking and Optical Flow

Camera geometry and image alignment

Center: Finding the Median. Median. Spread: Home on the Range. Center: Finding the Median (cont.)

Bildverarbeitung und Mustererkennung Image Processing and Pattern Recognition

Transcription:

PCL :: Features Michael Dixon and Radu B. Rusu July 1, 2011

Outline 1. Introduction 2. Feature Estimation 3. Keypoint Detection 4. Keypoints + Features

Outline 1. Introduction 2. Feature Estimation 3. Keypoint Detection 4. Keypoints + Features

What is a feature? Local Features What is a feature? In vision/perception, the word feature can mean many different things. In PCL, feature estimation means: computing a feature vector based on each points local neighborhood or sometimes, computing a single feature vector for the whole cloud

What is a feature? Local Features Feature vectors can be anything from simple surface normals to the complex feature descriptors need for registration or object detection. Today, we ll look at a couple of examples: Surface normal estimation (NormalEstimation) Point Feature Histogram estimation (PFHEstimation)

Local Features (1-2/5) Surface Normal Estimation. Theoretical Aspects: Basic Ingredients Given a point cloud with x,y,z 3D point coordinates

Local Features (1-2/5) Surface Normal Estimation. Theoretical Aspects: Basic Ingredients Given a point cloud with x,y,z 3D point coordinates Select each point s k-nearest neighbors, fit a local plane, and compute the plane normal

Surface Normal and Curvature Estimation Local Features (3/5) ξ i = C j = k i=1 ξ i (p i p j ) T (p i p j ), p = 1 k k i=1 p i e d 2 i µ 2, p i outlier 1, p i inlier σ p = λ 0 λ 0 +λ 1 +λ 2

NormalEstimation example Estimating surface normals void compute_surface_normals (pcl::pointcloud<pcl::pointxyzrgb>::ptr &points, float normal_radius pcl::pointcloud<pcl::normal>::ptr &normals_out) { pcl::normalestimation<pcl::pointxyzrgb, pcl::normal> norm_est; } // Use a FLANN-based KdTree to perform neighborhood searches norm_est.setsearchmethod (pcl::kdtreeflann<pcl::pointxyzrgb>::ptr (new pcl::kdtreeflann<pcl::pointxyzrgb>)); // Specify the size of the local neighborhood to use when // computing the surface normals norm_est.setradiussearch (normal_radius); // Set the input points norm_est.setinputcloud (points); // Set the search surface (i.e., the points that will be used // when search for the input points neighbors) norm_est.setsearchsurface (points); // Estimate the surface normals and store the result in "normals_out norm_est.compute (*normals_out);

NormalEstimation results $./features_demo../data/robot1.pcd normals

Now let s look at a more complex feature, like... Point Feature Histograms (PFH)

Point Feature Histograms A 3D feature descriptor For every point pair (p s, n s ); (p t, n t ), let u = n s, v = (p t p s ) u, w = u v f 0 = v, n j f 1 = u, p j p i / p j p i f 2 = p j p i f 3 = atan( w, n j, u, n j ) i hist = x 3 x=0 f x d f x max fx min d x

Point Feature Histograms A 3D feature descriptor f 0 = v, n j f 1 = u, p j p i / p j p i f 2 = p j p i f 3 = atan( w, n j, u, n j ) i hist = x 3 x=0 f x d f x max fx min d x

A 3D feature descriptor Point Feature Histograms For every point pair (p s, n s ); (p t, n t ), let u = n s, v = (p t p s ) u, w = u v

Points lying on different geometric primitives Point Feature Histograms

PFHEstimation example PFH is a more complex feature descriptor, but the code is very similar using namespace pcl; // Let s save ourselves some typing void compute_pfh_features (PointCloud<PointXYZRGB>::Ptr &points, PointCloud<Normal>::Ptr &norm float feature_radius, PointCloud<PFHSignature125>::Ptr &descriptors { // Create a PFHEstimation object PFHEstimation<PointXYZRGB, Normal, PFHSignature125> pfh_est; } // Set it to use a FLANN-based KdTree to perform its neighborhood se pfh_est.setsearchmethod (KdTreeFLANN<PointXYZRGB>::Ptr (new KdTreeFLANN<PointXYZRGB>)); // Specify the radius of the PFH feature pfh_est.setradiussearch (feature_radius); // Set the input points and surface normals pfh_est.setinputcloud (points); pfh_est.setinputnormals (normals); // Compute the features pfh_est.compute (*descriptors_out);

PHFEstimation example...actually, we ll get back to this one later. For now, let s move on to keypoints.

Outline 1. Introduction 2. Feature Estimation 3. Keypoint Detection 4. Keypoints + Features

What is a keypoint? Keypoints What is a keypoint? A keypoint (also known as an interest point ) is simply a point that has been identified as a relevant in some way. Whether any given point is considered a keypoint or not depends on the *keypoint detector* in question.

What is a keypoint? Keypoints There s no strict definition for what constitutes a keypoint detector, but a good keypoint detector will find points which have the following properties: Sparseness: Typically, only a small subset of the points in the scene are keypoints Repeatiblity: If a point was determined to be a keypoint in one point cloud, a keypoint should also be found at the corresponding location in a similar point cloud. (Such points are often called "stable".) Distinctiveness: The area surrounding each keypoint should have a unique shape or appearance that can be captured by some feature descriptor

Why find keypoints? Keypoints What are the benefits of keypoints? Some features are expensive to compute, and it would be prohibitive to compute them at every point. Keypoints identify a small number of locations where computing feature descriptors is likely to be most effective. When searching for corresponding points, features computed at non-descriptive points will lead to ambiguous feature corespondences. By ignoring non-keypoints, one can reduce error when matching points.

Keypoint detection in PCL Keypoints There are a couple of keypoint detectors in PCL so far. NARFKeypoint Requires range images Bastian will talk more about this later SIFTKeypoint A 3D adaptation of David Lowe s SIFT keypoint detector Now let s look at an example of how to compute 3D SIFT keypoints

SIFTKeypoints example Computing keypoints on a cloud of PointXYZRGB points using namespace pcl; void detect_keypoints (PointCloud<PointXYZRGB>::Ptr &points, float min_scale, int nr_octaves, int nr_scales_per_octave, float min_contrast, PointCloud<PointWithScale>::Ptr &keypoints_out) { SIFTKeypoint<PointXYZRGB, PointWithScale> sift_detect; } // Use a FLANN-based KdTree to perform neighborhood searches sift_detect.setsearchmethod (KdTreeFLANN<PointXYZRGB>::Ptr (new KdTreeFLANN<PointXYZRGB>)); // Set the detection parameters sift_detect.setscales (min_scale, nr_octaves, nr_scales_per_octave); sift_detect.setminimumcontrast (min_contrast); // Set the input sift_detect.setinputcloud (points); // Detect the keypoints and store them in "keypoints_out" sift_detect.compute (*keypoints_out);

SIFTKeypoint results $./features_demo../data/robot1.pcd keypoints

Outline 1. Introduction 2. Feature Estimation 3. Keypoint Detection 4. Keypoints + Features

Keypoints + features Keypoints and feature descriptors go hand-in-hand. Let s look at how to compute features only at a given set of keypoints.

Keypoints + features (1) Computing feature descriptors for a set of keypoints using namespace pcl; void compute_pfh_features_at_keypoints (PointCloud<PointXYZRGB>::Ptr &points, PointCloud<Normal>::Ptr &normals, PointCloud<PointWithScale>::Ptr &keypoints, float feature_radius, PointCloud<PFHSignature125>::Ptr &descriptors_out) { // Create a PFHEstimation object PFHEstimation<PointXYZRGB, Normal, PFHSignature125> pfh_est; // Set it to use a FLANN-based KdTree to perform its // neighborhood searches pfh_est.setsearchmethod (KdTreeFLANN<PointXYZRGB>::Ptr (new KdTreeFLANN<PointXYZRGB>)); // Specify the radius of the PFH feature pfh_est.setradiussearch (feature_radius); // continued on the next slide...

Keypoints + features (2) } //... continued from the previous slide // Convert the keypoints cloud from PointWithScale to PointXYZRGB // so that it will be compatible with our original point cloud PointCloud<PointXYZRGB>::Ptr keypoints_xyzrgb (new PointCloud<PointXYZRGB>); pcl::copypointcloud (*keypoints, *keypoints_xyzrgb); // Use all of the points for analyzing the local structure of the cl pfh_est.setsearchsurface (points); pfh_est.setinputnormals (normals); // But only compute features at the keypoints pfh_est.setinputcloud (keypoints_xyzrgb); // Compute the features pfh_est.compute (*descriptors_out);

What can you use this for? Here s an example of how you could use features and keypoints to find corresponding points between two point clouds. int correspondences_demo (const char * filename_base) { // Okay, this is a bit longer than our other examples, // so let s read the code in another window. // (See "features_demo.cpp", lines 308-368 ) }

Correspondence results $./features_demo../data/robot correspondences