2013-05-28 3 views
7

BOW 모델과 SVM을 사용하여 이미지 분류 프로젝트를 개발 중입니다. SVM 예측 확률을 알아보고 싶지만 opencv svm에는 그러한 함수가 없습니다. 이 일을 할 수있는 방법이 있습니까? 나는 n-class SVM에서 예측 확률을 찾고 싶다.OPencv SVM 예측 확률

답변

3

아니요 CvSVM에서는이 작업을 수행 할 수 없습니다. OpenCV의 SVM 구현은 매우 오래된 버전의 libsvm을 기반으로합니다. libsvm의 최신 버전을 다운로드하여 대신 사용하십시오. 물론 데이터 형식을 변환하는 래퍼를 작성해야합니다. http://www.csie.ntu.edu.tw/~cjlin/libsvm/

+2

다른 방법으로,이 결정은 확률을 얻을 수있는 후 처리 단계로 자신을 값에 플랫이 확장 구현할 수 : 작업은 당신이 여기를 전달하는 것이 :)

소스를 부탁드립니다. –

+2

2015 년 4 월에 여전히이 방법을 사용 하시겠습니까? – Poyan

-1

당신은 혼란 행렬을 만들려고 시도 할 수 있습니다. 이것은 각 이미지가 모든 클래스에 속할 확률을 말해줍니다. 경우에 당신이 그것을 할 수 있도록

map<string,map<string,int> > confusion_matrix; // confusionMatrix[classA][classB] = number_of_times_A_voted_for_B; 
map<string,CvSVM> classes_classifiers; //This we created earlier 

vector<string> files; //load up with images 
vector<string> classes; //load up with the respective classes 

for(..loop over a directory?..) { 
Mat img = imread(files[i]),resposne_hist; 

vector<KeyPoint> keypoints; 
detector->detect(img,keypoints); 
bowide->compute(img, keypoints, response_hist); 

float minf = FLT_MAX; string minclass; 
for (map<string,CvSVM>::iterator it = classes_classifiers.begin(); it !=  classes_classifiers.end(); ++it) { 
    float res = (*it).second.predict(response_hist,true); 
    if (res < minf) { 
    minf = res; 
    minclass = (*it).first; 
    } 
} 
confusion_matrix[minclass][classes[i]]++; 
} 

나는, 아직 테스트하지 않았다 Confusion Matrix

그리고 여기가 불완전하지만 당신은 당신에게 몇 가지 아이디어를 제공 할 수 있습니다, 내가 발견 조각을 a-simple-object-classifier-with-bag-of-words

+1

나는 동의하지 않을 것이다. Confusion Matrix 확률은 진실로 주어진 빈번한 접근입니다. 혼란 행렬은 보이지 않는 이미지에는 쓸모가 없습니다. –