Exemplo n.º 1
0
        int FindPupil(out int hMid, out int vMid)
        {
            imageDebugBitmap.ApplyTransform(new Grayscale());
            imageDebugBitmap.ApplyTransform(new Binaryzation(6));

            UpdateProjections();
            ClearBitmapByProjectionValue(verticalProjection.Average(), horizontalProjection.Average());

            int vStart;
            int vEnd;
            var height = GetLongestSegment(verticalProjection, out vStart, out vEnd);

            vMid = (vStart + vEnd) / 2;

            int hStart;
            int hEnd;
            var width = GetLongestSegment(horizontalProjection, out hStart, out hEnd);

            hMid = (hStart + hEnd) / 2;

            int radius = (height + width) / 4;

            if (Math.Abs(width - height) > (width + height) / 4)
            {
                ClearBitmapByProjectionValue(null, horizontalProjection.Where(x => x != 0).Average());
                UpdateProjections();
                ClearNotLongest();
                UpdateProjections();

                height = GetLongestSegment(verticalProjection, out vStart, out vEnd);
                vMid   = (vStart + vEnd) / 2;

                width = GetLongestSegment(horizontalProjection, out hStart, out hEnd);
                hMid  = (hStart + hEnd) / 2;

                radius = (height + width) / 4;
            }

            DrawProjection();

            return(radius);
        }
Exemplo n.º 2
0
        int FindIris(int hPupilMid, int vPupilMid, int pupilR)
        {
            int clipingRadius = 5 * pupilR;

            imageDebugBitmap = ClipImage(imageResult, new Rectangle(hPupilMid - clipingRadius, vPupilMid - clipingRadius, 2 * clipingRadius, 2 * clipingRadius));
            statistics       = new ImageStatistics(imageDebugBitmap);


            //imageDebugBitmap.ApplyTransform(new HistogramEqualization());
            imageDebugBitmap.ApplyTransform(new Binaryzation(1, hPupilMid - pupilR, hPupilMid + pupilR));

            int factor = pupilR / 5;

            imageDebugBitmap.ApplyTransform(new Dilation(factor));
            imageDebugBitmap.ApplyTransform(new Erosion(factor));


            int irisR1 = 0, irisR2 = 0, irisR3 = 0;

            for (int i = 0; i < imageDebugBitmap.Width / 2; i++)
            {
                if (imageDebugBitmap.GetPixel(i, imageDebugBitmap.Height / 2).R != 0)
                {
                    imageDebugBitmap.SetPixel(i, imageDebugBitmap.Height / 2, Color.Red);
                    irisR1++;
                }
                else
                {
                    break;
                }
            }

            for (int i = imageDebugBitmap.Width - 1; i > imageDebugBitmap.Width / 2; i--)
            {
                if (imageDebugBitmap.GetPixel(i, imageDebugBitmap.Height / 2).R != 0)
                {
                    imageDebugBitmap.SetPixel(i, imageDebugBitmap.Height / 2, Color.Red);
                    irisR2++;
                }
                else
                {
                    break;
                }
            }

            for (int i = imageDebugBitmap.Height - 1; i >= imageDebugBitmap.Height / 2; i--)
            {
                if (imageDebugBitmap.GetPixel(imageDebugBitmap.Height / 2, i).R != 0)
                {
                    imageDebugBitmap.SetPixel(imageDebugBitmap.Height / 2, i, Color.Red);
                    irisR3++;
                }
                else
                {
                    break;
                }
            }


            UpdateProjections();
            DrawProjection();

            irisR1 = imageDebugBitmap.Width / 2 - irisR1;
            irisR2 = imageDebugBitmap.Width / 2 - irisR2;
            irisR3 = imageDebugBitmap.Width / 2 - irisR3;

            var radiuses = new int[] { irisR1, irisR2, irisR3 };
            int avg      = (int)radiuses.Average();

            radiuses = radiuses.OrderByDescending(x => Math.Abs(x - avg)).Skip(1).ToArray();

            return((int)radiuses.Average());
        }
Exemplo n.º 3
0
 public static Bitmap ApplyDifferences(this Bitmap original, Bitmap diff)
 {
     return(original.ApplyTransform(diff, GetNormalizedSum));
 }
Exemplo n.º 4
0
 public static Bitmap GetDifferences(this Bitmap source, Bitmap destination)
 {
     return(source.ApplyTransform(destination, GetNormalizedDifference));
 }