在虹膜的opencv中使用霍夫圆函数查找分钟圆 [英] To find minute circles using hough circle function in opencv for iris

查看:122
本文介绍了在虹膜的opencv中使用霍夫圆函数查找分钟圆的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要使用opencv2中可用的HoughCircle函数来检测眼图的虹膜.因此,

I need to detect the iris of the eye picture I have using HoughCircle function thats available in opencv2. So ,

// Read the image
       src = imread("D:/001R_3.png");
       if( !src.data )
       { return -1; }

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

       /// Reduce the noise so we avoid false circle detection
      GaussianBlur( src_gray, src_gray, Size(9, 9), 2, 2 );

       /////////////
       /// Generate grad_x and grad_y
        Mat grad_x, grad_y;
        Mat abs_grad_x, abs_grad_y;

       Sobel( src_gray, grad_x, ddepth, 1, 0, 3, scale, delta, BORDER_DEFAULT );
         convertScaleAbs( grad_x, abs_grad_x );

     /// Gradient Y
       //Scharr( src_gray, grad_y, ddepth, 0, 1, scale, delta, BORDER_DEFAULT );
        Sobel( src_gray, grad_y, ddepth, 0, 1, 3, scale, delta, BORDER_DEFAULT );
       convertScaleAbs( grad_y, abs_grad_y );

     /// Total Gradient (approximate)
        addWeighted( abs_grad_x, 0.5, abs_grad_y, 0.5, 0, grad );
      ///////////////
       vector<Vec3f> circles;

        /// Apply the Hough Transform to find the circles
       HoughCircles( grad, circles, CV_HOUGH_GRADIENT, 1, grad.rows/8, 200, 100,0,0 );

        /// Draw the circles detected
            for( size_t i = 0; i < circles.size(); i++ )
              {
      Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
          cout<<center;
           int radius = cvRound(circles[i][2]);
            // circle center
           cout<<radius;
          circle(src, center, 3, Scalar(0,255,0), -1, 8, 0 );
          // circle outline
          circle(src, center, radius, Scalar(0,0,255), 3, 8, 0 );
           }

          /// Show your results
            namedWindow( "Hough Circle Transform Demo", CV_WINDOW_AUTOSIZE );
            imshow( "Hough Circle Transform Demo",src );
               }

这是我的代码,仅检测到眼睛的外部,因为我希望检测到瞳孔和虹膜边界,而这没有发生,我引用了链接

So here is my code, only the outer portion of the eye is detected where as i want the pupil and the iris boundary to be detected and thats not happening , I referred the link OpenCV: Using Hough Circle Transformation to detect iris but it doesn't work that way. Instead of canny edge detector have used sobel. Suggestions please.

推荐答案

霍夫变换的第五个参数是minDist,即圆之间的最小距离(以像素为单位).您已将此参数设置为图像中的行数除以8,这意味着将不会返回任何重叠的圆(例如您的眼睛的瞳孔和虹膜),因为它们太靠近了.

The fifth parameter of the Hough transform is the minDist, or minimum distance (in pixels) between circles. You have this parameter set to the number of rows in the image divided by 8, which means that any overlapping circles (such as the pupil and iris of your eye) will not be returned because they are too close together.

我将这个数字设置为变量,而不是对其进行硬编码,然后尝试使用一组更小的数字,直到找到有用的东西为止.

I'd set this number as a variable instead of hard-coding it, and experiment with a set of much smaller numbers until you find something that works.

这篇关于在虹膜的opencv中使用霍夫圆函数查找分钟圆的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆