2013-04-21 3 views
1

저는 카메라 피드를 입력으로 사용하고 정적 배경을 가진 비디오 처리 프로젝트를 진행하고 있습니다. opencv의 BackgroundSubtractorMOG처럼 동적 인 백그라운드 생성을 필요로하지 않습니다. 경계 상자 안에 전경 개체를 바인딩하려고합니다. 그래서 그게 내가 한 일이다.비디오 스트림에서 전경 추출하기

cv::absdiff(back_frame,matProcessed,temp);   //back_frame is the background matProcessed is the frame from CAMERA in grayscale 
cv::threshold(temp,temp,20,255,THRESH_BINARY); 

cv::findContours(temp,contours,CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, Point(0, 0)); 
std::vector<Rect> boundRect(contours.size()); 
std::vector< std::vector<Point> > contours_poly(contours.size()); 

int j=0; 
for(int i = 0; i < contours.size(); i++) 
{ 
      if(contourArea(contours[i])>100) 
      { 
       approxPolyDP(Mat(contours[i]), contours_poly[i], 10, true); 
       boundRect[j] = boundingRect(Mat(contours_poly[i])); 
       j++; 
      } 


} 
cv::rect r; 
    for (int i = 0; i < boundRect.size(); i++) 
    { 
     r = boundRect[i]; 

     cv::rectangle(
      frame, 
      cv::Point(r.x, r.y), 
      cv::Point(r.x + r.width, r.y + r.height), 
      CV_RGB(0,255,0) 
     ); 
    } 

그러나 문제는 전경이 올바르게 나오지 않는다는 것이다. 어쨌든 전경 생성을 향상시킬 수 있고 배경 복잡성 및 기타 요인에 관계없이 사각형 경계 상자를 사용하여 전경 개체를 항상 바인딩합니까 ??

답변

0

이렇게하는 데는 여러 가지 간단하고 복잡한 방법이 있습니다. 픽셀 단위의 확률 론적 접근법을 사용하는 것이 좋습니다. 모양에 Markov 모델과 같은 것을 사용하여 결과를 구체화 할 수도 있습니다. this paper을 참조하십시오. 특히 관련 작업 섹션과 전경 개체를 수정하는 마지막 비트를 참조하십시오.