我想了解更多关于KeyPoints的信息,所以有人能告诉我什么是
在OpenCV文档中提到角度是计算关键点的方向(如果不适用则为-1)。我无法想象它是什么。所以任何人都可以说我的意思或带来一个小例子。
在OpenCV文档中提到了八度音程是八度音阶(金字塔层),从中提取了关键点。我无法想象它是什么。所以任何人都可以说我的意思或带来一个小例子。
答案 0 :(得分:4)
如果您真的想了解基础知识,请转到基础知识:
http://www.cs.ubc.ca/~lowe/papers/ijcv04.pdf
这是关于图像特征描述/提取的第一篇也是最具影响力的论文之一。您可能会发现它有点难以接受,但它提供了对复杂问题的良好解释。
答案 1 :(得分:3)
即使我知道关于角度和八度的概念,我想知道float angle
是什么意思,所以我查看OpenCV2.3.1的源代码。
在sift.cpp
inline KeyPoint featureToKeyPoint( const feature& feat )
{
float size = (float)(feat.scl * SIFT::DescriptorParams::GET_DEFAULT_MAGNIFICATION() * 4); // 4==NBP
float angle = (float)(feat.ori * a_180divPI);
return KeyPoint( (float)feat.x, (float)feat.y, size, angle, feat.response, feat.feature_data->octv, feat.class_id );
}
好的,我得到了角度定义,但是feat.ori
和a_180divPI
是什么
后者很容易找到
const double a_180divPI = 180./CV_PI;
前者需要一些努力,经过几种方法的研究后,我得到了
struct feature
{
double x; /**< x coord */
double y; /**< y coord */
double scl; /**< scale of a Lowe-style feature */
double ori; /**< orientation of a Lowe-style feature */
...
};
并根据Lowe的论文(http://www.cs.ubc.ca/~lowe/papers/ijcv04.pdf)通过几个步骤计算feat.ori
,包括计算ori_hist,平滑直方图和add_good_ori_feature。
我不是100%确定ori
的确切含义,但我强烈怀疑OpenCV已将ori
转换为正确的弧形表示,最终结果angle
是正常的意思是天使的范围从-180度到180度。证据是
1) ori = arctan2( dy, dx)
2) bin = cvRound( n * ( ori * CV_PI ) / PI_2 )
3) new_feat->ori = ( ( PI2 * bin ) / n ) - CV_PI;
希望能帮助你
答案 2 :(得分:2)
如果有人不想阅读@sammy提到的Lowe的论文,这里有一些简短的简历:
我建议阅读&#34;学习OpenCV&#34;。它在OpenCV的API方面已经过时,但在那里讨论的理论得到了很好的解释。
答案 3 :(得分:2)
如果有人问这个问题,为什么*ngIf="authService.currentUser?.emailVerified"
为什么会有这么奇怪的值(例如16253184),那是因为它实际上携带着以下信息:
keypoint.octave
字段的最低有效字节中的实际octave
keypoint.octave
字段的第二个最低有效字节中的那个八度的layer
keypoint.octave
被解压缩为变量keypoint.octave
,octave
和layer
(scale
只是1/2 ^ scale
),方法octave
(请参阅OpenCV implementation)。
要直观地了解变量unpackOctave
和octave
,此图像可能会有所帮助:
答案 4 :(得分:1)