2017-01-20 12 views
0

나는 학생 추적을 시작했습니다. 나는 학생을 위해 thresholding을했지만 여전히 필요한만큼 정확하지는 않습니다. 아래는 제가 바람직하게 윤곽 만 동공을보고 싶습니다하지만 불행히도 나뿐만 아니라 다른 소리를 참조눈동자를위한 임계 값 (아이 추적) - C++가있는 OpenCV

현재 역치 이미지

img

내 현재의 역치 이미지입니다. 아래 코드는

int main(int argc, char** argv) 
{ 
    Mat src, src_gray, src_bw_glint, src_bw_iris, dst, dsti; 
    int threshold_value1 = 130; 
    int threshold_value2 = 30; 
    int const max_BINARY_value = 255; 
    VideoCapture cap(1); // open the default camera 
    if(!cap.isOpened()) // check if we succeeded 
     return -1; 
    Mat frame; 
    vector<vector<Point> > contours; 
    vector<Vec4i> hierarchy; 

    int p = 0; 

    for(;;) 
    { 

     cap >> src; // get a new frame from camera 

     /// Convert it to gray 
     cvtColor(src, src_gray, CV_BGR2GRAY); 

     Mat drawing = Mat::zeros(src_gray.size(), CV_8UC3); 

     /// Reduce the noise so we avoid false circle detection 
     GaussianBlur(src_gray, src_gray, Size(9, 9), 2, 2); 
     namedWindow(" Demo_Gray", CV_WINDOW_AUTOSIZE); 
     imshow(" Demo_Gray", src_gray); 

     //Threshold 
     threshold(src_gray, src_bw_iris, threshold_value2, max_BINARY_value, 1); 

     int morph_size = 5; 
     Mat element = getStructuringElement(MORPH_ELLIPSE, Size(2*morph_size + 1, 2*morph_size+1), Point(morph_size,morph_size)); 
     cout<<element; 

     morphologyEx(src_bw_iris, dst, MORPH_DILATE, element,Point(-1,-1), 1); 
     //imshow("Open Image", dst); 
     morphologyEx(dst, dsti, MORPH_TOPHAT, element,Point(-1,-1), 10); 
     //imshow("TopHAt Image", dsti); 
     morphologyEx(dsti, dsti, MORPH_DILATE, element,Point(-1,-1), 1); 
     imshow("TopHAt Image", dsti); 

     findContours(dsti, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0)); 

     for(int i = 0; i< contours.size(); i++) 
     {    
      //Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255)); 
      Scalar color = Scalar(p, 255, p); 

      drawContours(drawing, contours,i, color, 2, 8, hierarchy, 0, Point()); 
      // circle(drawing, mc[i], 4, color1, -1, 8, 0);     
      imshow("Drawing", drawing);     
     } 

     if (waitKey(1) == 'q') { 
      break; 
     } 

    } 
    return 0; 
} 

내 작품에 가장 적합한 임계 값 접근 방법을 알고 싶습니다. 동공 만 추적합니다. 또한, 제게 알려주십시오. 만약 당신이 생각한다면, 이것은 제가 한 것보다 훨씬 간단하게 만들 수 있습니다.

+0

시도가 각 개체의 속성을 찾아에만 디스크에 가장 유사한 것들에서 탈퇴 – Spektre

+1

이 임계 값을 감소 (예를 들어'set_pixel_area/bounding_box_area' 비율은 4'/PI '에 가까워 야). 제자는 130보다 훨씬 더 어둡습니다. 양자 택일로 : https://pdfs.semanticscholar.org/3260/30b941d44ffe6ec33f1b20b5897c4f198f7b.pdf – Piglet

+1

임계 값을 줄이려면 _HoughCircles_를 사용하십시오. –

답변

0

저는 thresholding이 결과를 향상시킬 것이라고 생각하지 않습니다. , 이진 결과에

  1. 를 큰 원형 구조 요소와 개구부를 적용 : 여기

    내가 할 것 인 것이다. 모든 작은 패턴은 지워질 것이고 큰 (더 많거나 적은) 원형 만 남아있을 것입니다.

  2. 주로 원형 인덱스를 추출하는 형상 인덱스입니다 (a list here 참조).
  3. 더 많은 원형 패턴이 동공이됩니다.