Je viens de commencer à travailler sur le suivi des pupilles. J'ai fait quelques seuillage pour l'élève mais toujours pas aussi précis que nécessaire. Ci-dessous mon image actuelle seuilléeSeuil pour pupille (suivi des yeux) - OpenCV avec C++
actuelle seuillée l'image
Je voudrais voir que de préférence l'élève dans le contour, mais malheureusement, je vois d'autres bruits aussi bien. Ci-dessous est mon code
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;
}
J'aime connaître la meilleure approche de seuillage pour mon travail afin de suivre uniquement la pupille. Aussi, s'il vous plaît faites le moi savoir, si vous pensez, cela pourrait être fait beaucoup plus simple que ce que j'ai fait.
essayer de trouver des propriétés de chaque objet et laisser seulement ceux qui sont les plus semblables à disque (par exemple 'rapport set_pixel_area/bounding_box_area' devrait être proche de' PI/4') – Spektre
diminuer votre seuil. l'élève est beaucoup plus sombre que 130. alternativement: https://pdfs.semanticscholar.org/3260/30b941d44ffe6ec33f1b20b5897c4f198f7b.pdf – Piglet
diminuer votre seuil, essayez d'utiliser _HoughCircles_ –