2012-12-03 41 views
14

Tôi có một thư mục hình ảnh của một chiếc xe từ mọi góc độ. Tôi muốn sử dụng túi của các từ tiếp cận để đào tạo hệ thống trong việc nhận ra chiếc xe. Sau khi đào tạo xong, tôi muốn rằng nếu một hình ảnh của chiếc xe đó được cho nó sẽ có thể nhận ra nó.Làm thế nào để đào tạo và dự đoán sử dụng túi từ?

Tôi đã cố gắng tìm hiểu hàm BOW trong opencv để thực hiện công việc này và đã đạt đến cấp độ mà tôi không biết phải làm gì bây giờ và một số hướng dẫn sẽ được đánh giá cao.

Đây là mã của tôi mà tôi sử dụng để làm cho túi chữ:

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); 

này được tất cả dựa trên BOW documentation.

Tôi nghĩ ở giai đoạn này hệ thống của tôi được đào tạo. và bước tiếp theo là dự đoán.

đây là nơi tôi không biết phải làm gì. Nếu tôi sử dụng SVM hoặc NormalBayesClassifier, cả hai đều sử dụng thuật ngữ đào tạo và dự đoán.

Làm cách nào để dự đoán và đào tạo sau này? Bất kỳ sự hướng dẫn sẽ được nhiều đánh giá cao. Làm cách nào để kết nối việc đào tạo trình phân loại với hàm `bowDE`` của tôi?

+1

Bạn đã quyết định các giá trị cho TermCriteria và dictionarySize, tc, retries, flags như thế nào? – definera

Trả lời

15

Bước tiếp theo của bạn là trích xuất túi mô tả từ thực tế. Bạn có thể thực hiện việc này bằng cách sử dụng hàm compute từ BOWImgDescriptorExtractor. Một cái gì đó như

bowDE.compute(img, keypoints, bow_descriptor); 

Sử dụng chức năng này bạn tạo bộ mô tả mà bạn sẽ thu thập thành ma trận làm đầu vào cho các chức năng của trình phân loại. Có thể this hướng dẫn có thể hướng dẫn bạn một chút.

Một điều nữa tôi muốn đề cập là, để phân loại, bạn thường cần ít nhất 2 lớp. Vì vậy, bạn cũng cần một số hình ảnh không chứa ô tô để đào tạo một trình phân loại.

Các vấn đề liên quan