// Hough transform

        private void PerformHoughTransform(Image <Gray, Byte> ImageToProcess,
                                           int HoughCircleThreshold, int MinAccumulator, int MaxAccumulator,
                                           double Resolution, double MinDistance,
                                           int MinRadius, int MaxRadius, HoughTransformFlag Mode)
        {
            //Accumulator value
            int currentAccumulator = MinAccumulator;
            //Threshold value
            Gray threshold = new Gray(HoughCircleThreshold);


            //start incrementing the accumilator till we find a proper circle
            while (currentAccumulator < MaxAccumulator)
            {
                Gray accumulator = new Gray(currentAccumulator);

                //apply hough circle
                CircleF[] detectedCircles = ImageToProcess.HoughCircles(threshold, accumulator, Resolution, MinDistance, MinRadius, MaxRadius)[0];
                if (detectedCircles.Length == 1)
                {
                    foreach (CircleF circle in detectedCircles)
                    {
                        switch (Mode)
                        {
                        //Hough Transform for pupil
                        case HoughTransformFlag.Pupil:
                            ImageToProcess.Draw(circle, new Gray(200), 2);
                            ContourDetectedPupilImageColor.Draw(circle, new Bgr(0, 0, 255), 2);
                            PupilCenter.X = (int)circle.Center.X;
                            PupilCenter.Y = (int)circle.Center.Y;
                            break;

                        //For outer Boundary
                        case HoughTransformFlag.IrisOuterBoundary:
                            IrisOuterBoundaryImageColor = ContourDetectedPupilImageColor.Clone();
                            ImageToProcess.Draw(circle, new Gray(200), 2);

                            //Radius of the outer boundary
                            OuterBoundaryRadius = (int)circle.Radius;

                            CvInvoke.cvCircle(IrisOuterBoundaryImageColor, PupilCenter, OuterBoundaryRadius, IrisConstants.WhiteColor, 2, Emgu.CV.CvEnum.LINE_TYPE.CV_AA, 0);
                            break;
                        }
                    }

                    break;
                }

                else if (detectedCircles.Length != 1)
                {
                    currentAccumulator++;
                }
            }
        }
Example #2
0
        // Hough transform
        private void PerformHoughTransform(Image<Gray, Byte> ImageToProcess,
            int HoughCircleThreshold, int MinAccumulator, int MaxAccumulator,
            double Resolution, double MinDistance,
            int MinRadius, int MaxRadius, HoughTransformFlag Mode)
        {
            //Accumulator value
            int currentAccumulator = MinAccumulator;
            //Threshold value
            Gray threshold = new Gray(HoughCircleThreshold);

            //start incrementing the accumilator till we find a proper circle
            while (currentAccumulator < MaxAccumulator)
            {
                Gray accumulator = new Gray(currentAccumulator);

                //apply hough circle
                CircleF[] detectedCircles = ImageToProcess.HoughCircles(threshold, accumulator, Resolution, MinDistance, MinRadius, MaxRadius)[0];
                if (detectedCircles.Length == 1)
                {
                    foreach (CircleF circle in detectedCircles)
                    {
                        switch (Mode)
                        {
                            //Hough Transform for pupil
                            case HoughTransformFlag.Pupil:
                                ImageToProcess.Draw(circle, new Gray(200), 2);
                                ContourDetectedPupilImageColor.Draw(circle, new Bgr(0, 0, 255), 2);
                                PupilCenter.X = (int)circle.Center.X;
                                PupilCenter.Y = (int)circle.Center.Y;
                                break;

                            //For outer Boundary
                            case HoughTransformFlag.IrisOuterBoundary:
                                IrisOuterBoundaryImageColor = ContourDetectedPupilImageColor.Clone();
                                ImageToProcess.Draw(circle, new Gray(200), 2);

                                //Radius of the outer boundary
                                OuterBoundaryRadius = (int)circle.Radius;

                                CvInvoke.cvCircle(IrisOuterBoundaryImageColor, PupilCenter, OuterBoundaryRadius, IrisConstants.WhiteColor, 2, Emgu.CV.CvEnum.LINE_TYPE.CV_AA, 0);
                                break;
                        }
                    }

                    break;
                }

                else if (detectedCircles.Length != 1)
                {
                    currentAccumulator++;
                }

            }
        }