为什么KeyPoint"探测器"和"提取器"是不同的操作?

dyn*_*mic 3 opencv surf sift

基本上你首先做的是:

SurfFeatureDetector surf(400);
surf.detect(image1, keypoints1);
Run Code Online (Sandbox Code Playgroud)

然后是:

surfDesc.compute(image1, keypoints1, descriptors1);
Run Code Online (Sandbox Code Playgroud)

为什么检测和计算是2种不同的操作?
检测后进行计算不会产生冗余循环?

我发现自己.compute在我的申请中是最贵的.

.detect 
Run Code Online (Sandbox Code Playgroud)

完成0.2秒

.compute
Run Code Online (Sandbox Code Playgroud)

需要约1秒.有没有办法加快.compute

Jav*_*ock 9

关键点的检测只是选择图像中被认为是"好特征"的点的过程.

提取这些关键点的描述符是一个完全不同的过程,它编码该特征的属性,如与邻居等对比,因此可以与来自不同图像,不同sclae和方向的其他关键点进行比较.

描述关键点的方式对于成功匹配至关重要,这确实是关键因素.您描述关键点的方式也是匹配速度的决定因素.例如,您可以将其描述为float或二进制secuence.