2013-04-24 108 views
4

我使用篩入OpenCV的編碼算法從images.My代碼獲取描述符和關鍵點是SIFT算法中的奇怪八度值?

Ptr<IplImage> image; 
    vector<KeyPoint> keypoints; 
    OutputArray des; 

    Feature2D *descriptor_type = new SIFT() 
    Mat image_mat(image); 
    (*descriptor_type)(image_mat,noArray(),keypoints,des,false); 

在這裏我可以得到圖像的關鍵點在矢量<關鍵點>。之後,我希望得到每個KeyPoint的Octave以獲得更多細節。但是當我爲每個圖像關注每個關鍵點八度值時,似乎很奇怪,我想確認它們是否正確。

for(int i=0;i<keypoints.size();i++) 
{ 
    cout<< (keypoints[i].octave) <<endl; 
} 

9765375 
9765375 
2621951 
8323583 
13763071 
6488575 
12845567 
721407 
3604991 
12321279 
9568767 
7406079 
8585727 
4653567 
7799295 
7799295 
5112319 
10486271 
9961983 
6226431 
1245951 

如果我改變SIFT算法SURF算法,它會是好的,似乎是正確的。

0 
0 
0 
0 
0 
0 
1 
0 
0 
0 
0 
1 
1 
1 
0 
1 
1 
1 
0 
0 
1 
0 

所以我想問一下SIFT算法中Octave值的計算在opencv中是否正確?

+0

http://code.opencv.org/issues/2987 – Amro 2017-08-01 05:39:56

回答

6

剛剛碰到this link

這似乎是過篩octave值通過 「修補」 關鍵點需要:

keyPoint.octave = keyPoint.octave & 0xFF;