Esempio n. 1
0
        public override MtripletsFeature Extract(Bitmap image)
        {
            var minutiae  = MinutiaeExtractor.ExtractFeatures(ImageProvider.AdaptImage(image));
            var mtriplets = new List <MTriplet>();
            var triplets  = new Dictionary <int, int>();

            foreach (var triangle in Delaunay2D.Triangulate(minutiae))
            {
                var idxArr = new[]
                {
                    (short)triangle.A,
                    (short)triangle.B,
                    (short)triangle.C
                };
                var newMTriplet = new MTriplet(idxArr, minutiae);
                var newHash     = newMTriplet.GetHashCode();
                if (!triplets.ContainsKey(newHash))
                {
                    triplets.Add(newHash, 0);
                    mtriplets.Add(newMTriplet);
                }
            }

            mtriplets.TrimExcess();
            return(new MtripletsFeature(mtriplets, minutiae));
        }
Esempio n. 2
0
        public override TicoFeatures Extract(Bitmap image)
        {
            var mtiae  = MinutiaeExtractor.ExtractFeatures(image);
            var dirImg = ImageOrietantionExtractor.ExtractFeatures(image);

            return(new TicoFeatures(mtiae, dirImg));
        }
Esempio n. 3
0
        public override JiangFeatures Extract(Bitmap image)
        {
            var minutiae        = MinutiaeExtractor.ExtractFeatures(image);
            var skeletonImg     = SkeletonImageExtractor.ExtractFeatures(image);
            var descriptorsList = new List <JiangMinutiaDescriptor>();

            if (minutiae.Count <= 3)
            {
                return(new JiangFeatures(descriptorsList));
            }

            var mtiaIdx = new Dictionary <Minutia, int>();

            for (var i = 0; i < minutiae.Count; i++)
            {
                mtiaIdx.Add(minutiae[i], i);
            }
            for (short idx = 0; idx < minutiae.Count; idx++)
            {
                var query   = minutiae[idx];
                var nearest = GetNearest(minutiae, query);
                for (var i = 0; i < nearest.Length - 1; i++)
                {
                    for (var j = i + 1; j < nearest.Length; j++)
                    {
                        var newMTriplet = new JiangMinutiaDescriptor(skeletonImg, minutiae, idx, nearest[i],
                                                                     nearest[j]);
                        descriptorsList.Add(newMTriplet);
                    }
                }
            }
            descriptorsList.TrimExcess();
            return(new JiangFeatures(descriptorsList));
        }
Esempio n. 4
0
        public override MtripletsFeature Extract(Bitmap image)
        {
            var minutiae = MinutiaeExtractor.ExtractFeatures(image);
            var result   = new List <MTriplet>();
            var triplets = new Dictionary <int, int>();

            var nearest  = new short[minutiae.Count, NeighborsCount];
            var distance = new double[minutiae.Count, NeighborsCount];

            // Initializing distances
            for (var i = 0; i < minutiae.Count; i++)
            {
                for (var j = 0; j < NeighborsCount; j++)
                {
                    distance[i, j] = double.MaxValue;
                    nearest[i, j]  = -1;
                }
            }

            // Computing m-triplets
            for (short i = 0; i < minutiae.Count; i++)
            {
                // Updating nearest minutiae
                UpdateNearest(minutiae, i, nearest, distance);

                // Building m-triplets
                for (var j = 0; j < NeighborsCount - 1; j++)
                {
                    for (var k = j + 1; k < NeighborsCount; k++)
                    {
                        if (nearest[i, j] != -1 && nearest[i, k] != -1)
                        {
                            if (i == nearest[i, j] || i == nearest[i, k] || nearest[i, j] == nearest[i, k])
                            {
                                throw new Exception("Wrong mtp");
                            }

                            var newMTriplet = new MTriplet(new[] { i, nearest[i, j], nearest[i, k] }, minutiae);
                            var newHash     = newMTriplet.GetHashCode();
                            if (!triplets.ContainsKey(newHash))
                            {
                                triplets.Add(newHash, 0);
                                result.Add(newMTriplet);
                            }
                        }
                    }
                }
            }
            result.TrimExcess();
            return(new MtripletsFeature(result, minutiae));
        }
Esempio n. 5
0
        public override PartialeFeatures Extract(Bitmap image)
        {
            var minutiae = MinutiaeExtractor.ExtractFeatures(image);
            var result   = new List <MinutiaTriplet>();

            if (minutiae.Count > 3)
            {
                foreach (var triangle in Delaunay2D.Triangulate(minutiae))
                {
                    var idxArr = new[]
                    {
                        (short)triangle.A,
                        (short)triangle.B,
                        (short)triangle.C
                    };
                    var newMTriplet = new MinutiaTriplet(idxArr, minutiae);
                    result.Add(newMTriplet);

                    idxArr = new[]
                    {
                        (short)triangle.A,
                        (short)triangle.C,
                        (short)triangle.B
                    };
                    newMTriplet = new MinutiaTriplet(idxArr, minutiae);
                    result.Add(newMTriplet);

                    idxArr = new[]
                    {
                        (short)triangle.B,
                        (short)triangle.A,
                        (short)triangle.C
                    };
                    newMTriplet = new MinutiaTriplet(idxArr, minutiae);
                    result.Add(newMTriplet);

                    idxArr = new[]
                    {
                        (short)triangle.B,
                        (short)triangle.C,
                        (short)triangle.A
                    };
                    newMTriplet = new MinutiaTriplet(idxArr, minutiae);
                    result.Add(newMTriplet);

                    idxArr = new[]
                    {
                        (short)triangle.C,
                        (short)triangle.A,
                        (short)triangle.B
                    };
                    newMTriplet = new MinutiaTriplet(idxArr, minutiae);
                    result.Add(newMTriplet);

                    idxArr = new[]
                    {
                        (short)triangle.C,
                        (short)triangle.B,
                        (short)triangle.A
                    };
                    newMTriplet = new MinutiaTriplet(idxArr, minutiae);
                    result.Add(newMTriplet);
                }
            }
            result.TrimExcess();
            return(new PartialeFeatures(result, minutiae));
        }