2015-10-14 12 views
5

バージョン3.0以降、DenseFeatureDetectorは使用できなくなりました。 OpenCV 3.0の高密度SIFT機能をどのように計算するか教えてください。私はドキュメンテーションでそれを見つけることができませんでした。OpenCV 3.0の高密度SIFT機能の計算

ありがとうございます!

+0

あなたはDAISY機能のようなものを意味していますか?それはopencv 3.0にありますが、外部のcontribパッケージにあります。 – DawidPi

+0

@DawidPi:私はopencv_contribをインストールしてxfeature2dをプロジェクトに含めましたが、DenseFeatureDetectorのようなものはまだ見つかりませんでした。高密度SIFTは、異なるスケールでグリッド上で計算された単純なSIFTフィーチャです。 – Khue

+0

DenseFeatureDetector detectImplの実装はこのようでした。私はあなた自身でこれを行うことができると思いますが、私は数学者でもCV専門家でもないので、私はあなたをもっと助けることができないと思います。 https://github.com/Itseez/opencv/blob/2.4/modules/features2d/src/detectors.cpp#L162 – DawidPi

答えて

2

は、ここでは、OpenCVの3 C++で緻密なSIFTを使用する方法は次のとおり

からコピー
SiftDescriptorExtractor sift; 

vector<KeyPoint> keypoints; // keypoint storage 
Mat descriptors; // descriptor storage 

// manual keypoint grid 

int step = 10; // 10 pixels spacing between kp's 

for (int y=step; y<img.rows-step; y+=step){ 
    for (int x=step; x<img.cols-step; x+=step){ 

     // x,y,radius 
     keypoints.push_back(KeyPoint(float(x), float(y), float(step))); 
    } 
} 

// compute descriptors 

sift.compute(img, keypoints, descriptors); 

http://answers.opencv.org/question/73165/compute-dense-sift-features-in-opencv-30/?answer=73178#post-id-73178

はうまくいくようです

+0

複数の画像から特徴を抽出したい場合... すべての画像のサイズを最初に共通のサイズに変更する必要がありますか? –

+0

ありがとうございました。 (遅れて申し訳ありません) – Khue

5

cv2.KeyPointsのリストをsift.computeに渡すことができます。この例はPythonで書かれていますが、原則を示しています。 Iは画像の画素位置を介して走査によってcv2.KeyPointのリストを作成する:

import skimage.data as skid 
import cv2 
import pylab as plt 

img = skid.lena() 
gray= cv2.cvtColor(img ,cv2.COLOR_BGR2GRAY) 

sift = cv2.xfeatures2d.SIFT_create() 

step_size = 5 
kp = [cv2.KeyPoint(x, y, step_size) for y in range(0, gray.shape[0], step_size) 
            for x in range(0, gray.shape[1], step_size)] 

img=cv2.drawKeypoints(gray,kp, img) 

plt.figure(figsize=(20,10)) 
plt.imshow(img) 
plt.show() 

dense_feat = sift.compute(gray, kp) 
+0

こんにちは、あなたはコントラストを適用する方法を知っていますかこの場合のしきい値? SIFT_create()にcontrastThresholdパラメータを追加しようとしましたが無視されました。 – pomxipum

+0

私は100%確実ではありませんが、自分で実装する必要があるようです。答えは別の質問として投稿するのに十分複雑です。しかし、コントラストはここで計算されているようですhttps://github.com/opencv/opencv_contrib/blob/7238cd27bae5436605d9e32ca0b87f266381a9e0/modules/xfeatures2d/src/sift.cpp#L457 –