Создание обрезанного и замаскированного ириса из изображения глаз - PullRequest
0 голосов
/ 17 мая 2019

Я использую c # и opencv, и я хочу сгенерировать приведенный ниже тип изображения из данного изображения глаза.

Требуемый вывод: enter image description here

Я успешно сгенерировалниже изображения, но я не могу найти способ создать то, что мне нужно.

Чего я достиг на данный момент: enter image description here

private void SegmentIris()
{
//Clone the filled contour
        Image<Gray, Byte> InputImageCloneOne = FilledContourForSegmentation.Clone();

        Image<Gray, Byte> InputImageCloneTwo = FilledContourForSegmentation.Clone();
        MCvScalar k = new MCvScalar(255, 255, 255);

        //Draw the circle for mask in white
        CvInvoke.cvCircle(mask, PupilCenter, OuterBoundaryRadius, IrisConstants.WhiteColor, -1, Emgu.CV.CvEnum.LINE_TYPE.CV_AA, 0);

        //Create the optimised circle using pupil center and outer boundary iris -> so that circles appear proper around the iris
        if (IsContourDetectionSatisfactory)
        {
            OptimisedIrisBoundaries = FilledContourForSegmentation.Clone();
            CvInvoke.cvCircle(OptimisedIrisBoundaries, PupilCenter, OuterBoundaryRadius, IrisConstants.WhiteColor, 2, Emgu.CV.CvEnum.LINE_TYPE.CV_AA, 0);
        }
        else
        {
            OptimisedIrisBoundaries = ApproximatedPupilImage.Clone();
            CvInvoke.cvCircle(OptimisedIrisBoundaries, PupilCenter, OuterBoundaryRadius, IrisConstants.WhiteColor, 2, Emgu.CV.CvEnum.LINE_TYPE.CV_AA, 0);
        }

        //now make the mask circle black
        CvInvoke.cvNot(mask, mask);

        //Subtract the input image and filled contour image over the mask created
        CvInvoke.cvSub(InputImage, InputImageCloneOne, InputImageCloneTwo, mask);

        //Put clonetwo to segmented image
        CvInvoke.cvCopy(InputImageCloneTwo, SegmentedIrisImage, new IntPtr(0));

    }
...