2011-10-24 3 views
4

私は画像認識アプリケーションで作業しており、Ferns記述子マッチャーを使用してメソッドを実装しようとしています。Ferns記述子で訓練した後にopencv記述子マッチャーを保存する

私は羊歯構造を訓練し、以下のコード使用してそれらを保存する:

int main(int argc, char** argv) { 


vector<string> trainFilenames; 
readTrainFilenames(modelImagesList, imagesDir, trainFilenames); 

Ptr<GenericDescriptorMatcher> descriptorMatcher = GenericDescriptorMatcher::create("FERN", params_filename); 

SurfFeatureDetector detector(500); 
SurfDescriptorExtractor extractor; 

vector<vector<KeyPoint> > allKeypoints; 
vector<Mat> allTrainImages; 

//TRAIN AND SAVE 
for(unsigned int i = 0; i < trainFilenames.size(); i++){ 

    Mat sceneImage; 
    std::vector<KeyPoint> sceneKeypoints; 

    sceneImage = imread(trainFilenames.at(i), CV_LOAD_IMAGE_GRAYSCALE); 

    detector.detect(sceneImage, sceneKeypoints); 

    allKeypoints.push_back(sceneKeypoints); 
    allTrainImages.push_back(sceneImage); 
} 

std::string sceneImageData = "sceneImagedatamodel.xml"; 
FileStorage fs(sceneImageData, FileStorage::WRITE); 

descriptorMatcher->add(allTrainImages, allKeypoints); 

descriptorMatcher->train(); 
descriptorMatcher->write(fs); 

fs.release(); 

}

をしかし、私は、出力ファイルで入手唯一のものはこれです:

<?xml version="1.0"?> 
<opencv_storage> 
<nclasses>0</nclasses> 
<patchSize>31</patchSize> 
<signatureSize>2147483647</signatureSize> 
<nstructs>50</nstructs> 
<structSize>9</structSize> 
<nviews>1000</nviews> 
<compressionMethod>0</compressionMethod> 
</opencv_storage> 

構造体全体をxmlファイルに保存するのではないでしょうか?

新しいC++インターフェイスでこれをやっている人がいないようです。これらの方法は本当に機能していますか?もしそうなら、あなたはそれをどのように働かせるか考えていますか?

ありがとうございます。

答えて

2

問題が見つかりました。私はソースファイルを見て、実際に分類子を保存している行はコメントアウトされています。ここで

void FernDescriptorMatcher::write(FileStorage& fs) const 
{ 
    fs << "nclasses" << params.nclasses; 
    fs << "patchSize" << params.patchSize; 
    fs << "signatureSize" << params.signatureSize; 
    fs << "nstructs" << params.nstructs; 
    fs << "structSize" << params.structSize; 
    fs << "nviews" << params.nviews; 
    fs << "compressionMethod" << params.compressionMethod; 

// classifier->write(fs); 
} 

は、ソースファイルへのURLです:https://code.ros.org/svn/opencv/trunk/opencv/modules/features2d/src/matchers.cpp

FernClassifierクラスはplanardetect.cppファイルにwrite()メソッドを実装します。私はなぜそれがコメントアウトされているのかわかりません。私はあなたが行のコメントを外して再コンパイルできると思います。