// 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++; } } }
// 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++; } } }