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); }
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()); }
public static Bitmap ApplyDifferences(this Bitmap original, Bitmap diff) { return(original.ApplyTransform(diff, GetNormalizedSum)); }
public static Bitmap GetDifferences(this Bitmap source, Bitmap destination) { return(source.ApplyTransform(destination, GetNormalizedDifference)); }