博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORB Feature
阅读量:4181 次
发布时间:2019-05-26

本文共 3601 字,大约阅读时间需要 12 分钟。

转载自:http://docs.opencv.org/trunk/doc/py_tutorials/py_feature2d/py_orb/py_orb.html

Theory

As an OpenCV enthusiast, the most important thing about the ORB is that it came from “OpenCV Labs”. This algorithm was brought up by Ethan Rublee, Vincent Rabaud, Kurt Konolige and Gary R. Bradski in their paper ORB: An efficient alternative to SIFT or SURF in 2011. As the title says, it is a good alternative to SIFT and SURF in computation cost, matching performance and mainly the patents. Yes, SIFT and SURF are patented and you are supposed to pay them for its use. But ORB is not !!!

ORB is basically a fusion of FAST keypoint detector and BRIEF descriptor with many modifications to enhance the performance. First it use FAST to find keypoints, then apply Harris corner measure to find top N points among them. It also use pyramid to produce multiscale-features. But one problem is that, FAST doesn’t compute the orientation. So what about rotation invariance? Authors came up with following modification.

It computes the intensity weighted centroid of the patch with located corner at center. The direction of the vector from this corner point to centroid gives the orientation. To improve the rotation invariance, moments are computed with x and y which should be in a circular region of radius r, where r is the size of the patch.

Now for descriptors, ORB use BRIEF descriptors. But we have already seen that BRIEF performs poorly with rotation. So what ORB does is to “steer” BRIEF according to the orientation of keypoints. For any feature set of n binary tests at location (x_i, y_i), define a 2 \times n matrix, S which contains the coordinates of these pixels. Then using the orientation of patch, \theta, its rotation matrix is found and rotates the S to get steered(rotated) version S_\theta.

ORB discretize the angle to increments of 2 \pi /30 (12 degrees), and construct a lookup table of precomputed BRIEF patterns. As long as the keypoint orientation \theta is consistent across views, the correct set of points S_\theta will be used to compute its descriptor.

BRIEF has an important property that each bit feature has a large variance and a mean near 0.5. But once it is oriented along keypoint direction, it loses this property and become more distributed. High variance makes a feature more discriminative, since it responds differentially to inputs. Another desirable property is to have the tests uncorrelated, since then each test will contribute to the result. To resolve all these, ORB runs a greedy search among all possible binary tests to find the ones that have both high variance and means close to 0.5, as well as being uncorrelated. The result is called rBRIEF.

For descriptor matching, multi-probe LSH which improves on the traditional LSH, is used. The paper says ORB is much faster than SURF and SIFT and ORB descriptor works better than SURF. ORB is a good choice in low-power devices for panorama stitching etc.

ORB in OpenCV

As usual, we have to create an ORB object with the function, cv2.ORB() or using feature2d common interface. It has a number of optional parameters. Most useful ones are nFeatures which denotes maximum number of features to be retained (by default 500), scoreType which denotes whether Harris score or FAST score to rank the features (by default, Harris score) etc. Another parameter, WTA_K decides number of points that produce each element of the oriented BRIEF descriptor. By default it is two, ie selects two points at a time. In that case, for matching, NORM_HAMMINGdistance is used. If WTA_K is 3 or 4, which takes 3 or 4 points to produce BRIEF descriptor, then matching distance is defined by NORM_HAMMING2.

你可能感兴趣的文章
bash 轉移 zsh (oh-my-zsh) 設定心得
查看>>
ndk 静态库使用集锦
查看>>
ios 使用exosip库连接问题
查看>>
Xcode环境下osip,eXosip, openssl的静态库编译方法(编译出来给IOS使用)
查看>>
armeabi-v7a armeabi arm64-v8a
查看>>
X264码率控制总结1——ABR,CQP,CRF
查看>>
X264码率控制总结2——x264码率控制方法概述
查看>>
vs2015打开VS2010的工程时,无法解析的外部符号 __imp___vsnprintf
查看>>
vs2015 编译obs-studio
查看>>
IOS usleep函数导致线程阻塞
查看>>
简析H264分包组包
查看>>
H.264 视频 RTP 负载格式
查看>>
H.264句法和语法总结(一)句法元素的分层结构
查看>>
H.264句法和语法总结(二)NAL层句法
查看>>
H.264句法和语法总结(三)序列参数集层(SPS)句法
查看>>
H.264句法和语法总结(四)图像参数集语义
查看>>
H.264句法和语法总结(五)片头句法
查看>>
H.264句法和语法总结(六)参考帧队列重排序(reordering)句法
查看>>
H.264句法和语法总结(七)加权预测句法
查看>>
H.264句法和语法总结(八)参考图像序列标记 (marking)操作的语义
查看>>