コード例 #1
0
ファイル: MTK.cs プロジェクト: joshuashercliffe/medNet
        private double Eval(Tico2003Features query, Tico2003Features template, List <MinutiaPair> matchingPair)
        {
            if (matchingPair == null)
            {
                return(0);
            }

            var qCenterMtia = matchingPair[matchingPair.Count - 1].QueryMtia;
            var tCenterMtia = matchingPair[matchingPair.Count - 1].TemplateMtia;

            // Computing query bounding region
            var qPolygon = GetBounds(query);

            qPolygon =
                (new PolygonMapper(qCenterMtia, tCenterMtia)).Map(qPolygon);
            var qBoundingRegion = new FingerprintRegion(qPolygon);
            // Computing template bounding region
            var tPolygon        = GetBounds(template);
            var tBoundingRegion = new FingerprintRegion(tPolygon);

            // Mapping query minutiae
            var mtiaMapper = new MtiaMapper(qCenterMtia, tCenterMtia);
            var qMtiae     = new List <Minutia>(query.Minutiae.Count);

            for (int i = 0; i < query.Minutiae.Count; i++)
            {
                var mtia = query.Minutiae[i];
                qMtiae.Add(mtiaMapper.Map(mtia));
            }

            int qCount = 0;

            for (int i = 0; i < qMtiae.Count; i++)
            {
                var mtia = qMtiae[i];
                if (tBoundingRegion.Contains(mtia))
                {
                    qCount++;
                }
            }
            int tCount = 0;

            foreach (var mtia in template.Minutiae)
            {
                if (qBoundingRegion.Contains(mtia))
                {
                    tCount++;
                }
            }

            double sum = 0;

            foreach (var mtiaPair in matchingPair)
            {
                sum += mtiaPair.MatchingValue;
            }

            return(qCount >= MtiaCountThr && tCount >= MtiaCountThr ? 1.0 * sum * sum / (qCount * tCount) : 0);
        }
コード例 #2
0
        private double Eval(Qi2005Features query, Qi2005Features template, List <MinutiaPair> matchingPair, double[,] simArr)
        {
            var qIndex = new Dictionary <Minutia, int>(query.Minutiae.Count);

            for (int i = 0; i < query.Minutiae.Count; i++)
            {
                qIndex.Add(query.Minutiae[i], i);
            }
            var tIndex = new Dictionary <Minutia, int>(template.Minutiae.Count);

            for (int i = 0; i < template.Minutiae.Count; i++)
            {
                tIndex.Add(template.Minutiae[i], i);
            }

            var qCenterMtia = matchingPair[matchingPair.Count - 1].QueryMtia;
            var tCenterMtia = matchingPair[matchingPair.Count - 1].TemplateMtia;

            // Computing query bounding region
            var qPolygon = GetBounds(query);

            qPolygon =
                (new PolygonMapper(qCenterMtia, tCenterMtia)).Map(qPolygon);
            var qBoundingRegion = new FingerprintRegion(qPolygon);
            // Computing template bounding region
            var tPolygon        = GetBounds(template);
            var tBoundingRegion = new FingerprintRegion(tPolygon);

            // Mapping query minutiae
            var mtiaMapper = new MtiaMapper(qCenterMtia, tCenterMtia);
            var qMtiae     = new List <Minutia>(query.Minutiae.Count);

            for (int i = 0; i < query.Minutiae.Count; i++)
            {
                var mtia = query.Minutiae[i];
                qMtiae.Add(mtiaMapper.Map(mtia));
            }

            int qCount = 0;

            for (int i = 0; i < qMtiae.Count; i++)
            {
                var mtia = qMtiae[i];
                if (tBoundingRegion.Contains(mtia))
                {
                    qCount++;
                }
            }
            int tCount = 0;

            foreach (var mtia in template.Minutiae)
            {
                if (qBoundingRegion.Contains(mtia))
                {
                    tCount++;
                }
            }

            double sum = 0;

            foreach (var mtiaPair in matchingPair)
            {
                int i = qIndex[mtiaPair.QueryMtia];
                int j = tIndex[mtiaPair.TemplateMtia];
                sum += simArr[i, j];
            }

            return(qCount >= 6 && tCount >= 6 ? 1.0 * sum / Math.Max(qCount, tCount) : 0);
        }