2012-06-03 34 views
2

我使用教程中的SURF程序來檢測視頻幀中的對象。但是可以檢測所有關鍵點和描述符。我如何改變程序來檢測只有特定的對象?如何使用SURF和C檢測視頻中的對象?

CvSeq *imageKeypoints = 0, *imageDescriptors = 0; 
int i; 


CvSURFParams params = cvSURFParams(500, 1); 
cvExtractSURF(image, 0, &imageKeypoints, &imageDescriptors, storage, params); 
printf("Image Descriptors: %d\n", imageDescriptors->total); 


for(i = 0; i < imageKeypoints->total; i++) 
{ 
CvSURFPoint* r = (CvSURFPoint*)cvGetSeqElem(imageKeypoints, i); 
CvPoint center; 
int radius; 
center.x = cvRound(r->pt.x); 
center.y = cvRound(r->pt.y); 
radius = cvRound(r->size*1.2/9.*2); 
cvCircle(frame, center, radius, red_color[0], 1, 8, 0); 
} 

回答

3

該算法被用來檢測所有健壯的關鍵點。您必須使用這種算法檢測特定對象的唯一方法是獲取要檢測的對象的圖片(稱爲標記),以便能夠將標記中的關鍵點與圖像中的關鍵點進行比較。 匹配意味着在amrker和圖像中很常見。

您理解方法是很重要的:

1 - 你必須與要檢測圖像的標記。您可以使用SURF,FAST,SIFT或其他算法來檢測關鍵點。這是脫機的,你只是在開始時才這樣做。

2 - 您開始從視頻獲取幀,並且您使用SURF爲每個幀檢測視頻中的關鍵點。

3 - 這裏是真正的處理部分,您可以在標記中「匹配」點和圖像中的點。如果你沒有得到匹配的對象,它不在圖像中。

看看這個example

+0

這是可能的實時系統,如道路標誌檢測系統? – Thar1988

+0

當然,是的。但是你必須要看看與所有符號匹配需要多長時間。也許這個任務有更簡單的更好的方法。 –

+0

你有什麼方法可以爲這個道路標誌檢測系統建議嗎? – Thar1988