2012-12-03 12 views
14

Mam folder obrazów samochodu pod każdym kątem. Chcę użyć worka słów, aby wyszkolić system w rozpoznawaniu samochodu. Po zakończeniu treningu chcę, aby obraz tego samochodu był możliwy do rozpoznania.Jak trenować i przewidywać przy użyciu worka słów?

Próbowałem nauczyć się funkcji BOW w opencv, aby wykonać tę pracę i osiągnąłem poziom, na którym nie wiem, co teraz zrobić, a pewne wskazówki będą mile widziane.

Tu jest mój kod, który używany do worka słów:

Ptr<FeatureDetector> features = FeatureDetector::create("SIFT"); 
    Ptr<DescriptorExtractor> descriptors = DescriptorExtractor::create("SIFT"); 
    Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("FlannBased"); 

    //defining terms for bowkmeans trainer 
    TermCriteria tc(MAX_ITER + EPS, 10, 0.001); 
    int dictionarySize = 1000; 
    int retries = 1; 
    int flags = KMEANS_PP_CENTERS; 
    BOWKMeansTrainer bowTrainer(dictionarySize, tc, retries, flags); 

    BOWImgDescriptorExtractor bowDE(descriptors, matcher); 

    //training data now 
    Mat features; 
    Mat img = imread("c:\\1.jpg", 0); 
    Mat img2 = imread("c:\\2.jpg", 0); 
    vector<KeyPoint> keypoints, keypoints2; 
    features->detect(img, keypoints); 
    features->detect(img2,keypoints2); 
    descriptor->compute(img, keypoints, features); 
    Mat features2; 
    descripto->compute(img2, keypoints2, features2); 
    bowTrainer.add(features); 
    bowTrainer.add(features2); 

    Mat dictionary = bowTrainer.cluster(); 
    bowDE.setVocabulary(dictionary); 

To wszystko jest oparte na BOW documentation.

Myślę, że na tym etapie mój system jest przeszkolony. a następnym krokiem jest przewidywanie.

to jest miejsce, w którym nie wiem, co robić. Jeśli używam SVM lub NormalBayesClassifier, oba używają terminów train i predict.

Jak mogę to przewidzieć i wytrenować? wszelkie wskazówki będą mile widziane. Jak połączyć szkolenie klasyfikatora z moją funkcją `bowDE`?

+1

Jak zadecydowałeś o wartości TermCriteria i dictionarySize, tc, reting, flags? – definera

Odpowiedz

15

Następnym krokiem jest wyodrębnienie rzeczywistej torebki deskryptorów słów. Możesz to zrobić za pomocą funkcji compute z BOWImgDescriptorExtractor. Coś jak

bowDE.compute(img, keypoints, bow_descriptor); 

Za pomocą tej funkcji możesz tworzyć wskaźniki, które następnie zbierają do matrycy, która służy jako wejście dla funkcji klasyfikatora. Może samouczek this może Cię trochę poprowadzić.

Inną rzeczą, o której chciałbym wspomnieć, jest to, że do klasyfikacji zazwyczaj potrzebujesz co najmniej 2 klasy. Potrzebne są więc również zdjęcia, które nie zawierają samochodów do trenowania klasyfikatora.

Powiązane problemy