Exemple #1
0
        public async Task <FingerprintModel> CompareImages(Image input)
        {
            BFMatcher      bF      = new BFMatcher(DistanceType.Hamming);
            VectorOfDMatch matches = new VectorOfDMatch();

            var descriptorToCompare =
                FingerprintDescriptor(
                    BitConvert.GetMatFromImage(input)
                    );

            var AllFingerPrints = await _fingerPrintData.GetAll();

            foreach (FingerprintModel fingerprintDatabase in AllFingerPrints)
            {
                var descriptorDatabase =
                    FingerprintDescriptor(
                        BitConvert.GetMatFromImage(
                            fingerprintDatabase.GetFingerPrintImage()
                            )
                        );
                //Here you put the firgerPrint's Mat you want to compare.
                bF.Match(descriptorToCompare, descriptorDatabase, matches);

                //Algorithm to Compare fingerprints
                //Calculate score
                float score = 0;
                foreach (MDMatch match in matches.ToArray())
                {
                    score += match.Distance;
                }
                float score_threshold = 33;
                if (score / matches.ToArray().Length < score_threshold)
                {
                    return(fingerprintDatabase);
                }
                else
                {
                    continue;
                }
            }
            return(null);
        }
Exemple #2
0
        /// <summary>
        /// Performs images matching.
        /// </summary>
        /// <param name="features1">First image features</param>
        /// <param name="features2">Second image features</param>
        /// <returns>Found matches</returns>
        public virtual MatchesInfo Apply(
            ImageFeatures features1, ImageFeatures features2)
        {
            ThrowIfDisposed();

            if (features1 == null)
            {
                throw new ArgumentNullException(nameof(features1));
            }
            if (features2 == null)
            {
                throw new ArgumentNullException(nameof(features2));
            }
            if (features1.Descriptors == null)
            {
                throw new ArgumentException($"{nameof(features1)}.Descriptors == null", nameof(features1));
            }
            if (features2.Descriptors == null)
            {
                throw new ArgumentException($"{nameof(features2)}.Descriptors == null", nameof(features1));
            }
            features1.Descriptors.ThrowIfDisposed();
            features2.Descriptors.ThrowIfDisposed();

            using var keypointsVec1 = new VectorOfKeyPoint(features1.Keypoints);
            using var keypointsVec2 = new VectorOfKeyPoint(features2.Keypoints);
            var features1Cpp = new WImageFeatures
            {
                ImgIdx      = features1.ImgIdx,
                ImgSize     = features1.ImgSize,
                Keypoints   = keypointsVec1.CvPtr,
                Descriptors = features1.Descriptors.CvPtr,
            };
            var features2Cpp = new WImageFeatures
            {
                ImgIdx      = features2.ImgIdx,
                ImgSize     = features2.ImgSize,
                Keypoints   = keypointsVec2.CvPtr,
                Descriptors = features2.Descriptors.CvPtr,
            };

            using var matchesVec     = new VectorOfDMatch();
            using var inliersMaskVec = new VectorOfByte();
            var h = new Mat();

            NativeMethods.HandleException(
                NativeMethods.stitching_FeaturesMatcher_apply(
                    ptr,
                    ref features1Cpp,
                    ref features2Cpp,
                    out var srcImgIdx,
                    out var dstImgIdx,
                    matchesVec.CvPtr,
                    inliersMaskVec.CvPtr,
                    out var numInliers,
                    h.CvPtr,
                    out var confidence));

            GC.KeepAlive(this);

            return(new MatchesInfo(
                       srcImgIdx, dstImgIdx, matchesVec.ToArray(), inliersMaskVec.ToArray(),
                       numInliers, h, confidence));
        }
Exemple #3
0
        /// <summary>
        /// Find one best match for each query descriptor (if mask is empty).
        /// </summary>
        /// <param name="queryDescriptors"></param>
        /// <param name="masks"></param>
        /// <returns></returns>
        public DMatch[] Match(Mat queryDescriptors, Mat[] masks = null)
        {
            ThrowIfDisposed();
            if (queryDescriptors == null)
                throw new ArgumentNullException("queryDescriptors");

            var masksPtrs = new IntPtr[0];
            if (masks != null)
            {
                masksPtrs = EnumerableEx.SelectPtrs(masks);
            }

            using (var matchesVec = new VectorOfDMatch())
            {
                NativeMethods.features2d_DescriptorMatcher_match2(
                    ptr, queryDescriptors.CvPtr, matchesVec.CvPtr, masksPtrs, masksPtrs.Length);
                return matchesVec.ToArray();
            }
        }
Exemple #4
0
 /// <summary>
 /// Find one best match for each query descriptor (if mask is empty).
 /// </summary>
 /// <param name="queryDescriptors"></param>
 /// <param name="trainDescriptors"></param>
 /// <param name="mask"></param>
 /// <returns></returns>
 public DMatch[] Match(Mat queryDescriptors, Mat trainDescriptors, Mat mask = null)
 {
     ThrowIfDisposed();
     if (queryDescriptors == null)
         throw new ArgumentNullException("queryDescriptors");
     if (trainDescriptors == null)
         throw new ArgumentNullException("trainDescriptors");
     using (var matchesVec = new VectorOfDMatch())
     {
         NativeMethods.features2d_DescriptorMatcher_match1(
             ptr, queryDescriptors.CvPtr, trainDescriptors.CvPtr,
             matchesVec.CvPtr, Cv2.ToPtr(mask));
         return matchesVec.ToArray();
     }
 }
Exemple #5
0
 /// <summary>
 /// 
 /// </summary>
 /// <returns></returns>
 public DMatch[] ReadDMatches()
 {
     using (var valueVector = new VectorOfDMatch())
     {
         NativeMethods.core_FileNode_read_vectorOfDMatch(ptr, valueVector.CvPtr);
         return valueVector.ToArray();
     }
 }