Ejemplo n.º 1
0
        public Dictionary <Point, int> getSectionPixels(Point c, Bitmap orginal, int sectionLeng)
        {
            double angle = localDirectionMap.getDirectionForPixel(c.X, c.Y);

            angle = ImageSupporter.restrictAngle(angle);

            Point p = new Point((int)(c.X - Math.Sin(angle) * sectionLeng + 0.5), (int)(c.Y - Math.Cos(angle) * sectionLeng + 0.5));
            Point k = new Point((int)(c.X + Math.Sin(angle) * sectionLeng + 0.5), (int)(c.Y + Math.Cos(angle) * sectionLeng + 0.5));

            if (ImageSupporter.RadianToDegree(angle) > 80 && ImageSupporter.RadianToDegree(angle) < 100)
            {
                double ck = ImageSupporter.RadianToDegree(angle);
            }
            Dictionary <Point, int> section = new Dictionary <Point, int>();

            foreach (var item in ImageSupporter.EnumerateLineNoDiagonalSteps(p.X, p.Y, k.X, k.Y))
            {
                try
                {
                    section.Add(new Point(item.Item1, item.Item2), orginal.GetPixel(item.Item1, item.Item2).R);
                }
                catch (Exception e)
                {
                }
            }


            return(section);
        }
Ejemplo n.º 2
0
        private void followingDown(Point m)
        {
            double angle = localDirectionMap.getDirectionForPixel(m.X, m.Y);

            angle = ImageSupporter.angletoIIIandIV(angle);

            Point n = new Point((int)(m.X - Math.Cos(angle) * dlugoscSkoku + 0.5), (int)(m.Y + Math.Sin(angle) * dlugoscSkoku + 0.5));



            if (n.X < training.Width && n.X > 0 && n.Y > 0 && n.Y < training.Height)
            {
                //if (orginalBitmap.GetPixel(n.X, n.Y).R < limit && alreadyPassed.GetPixel(n.X, n.Y).B!=128)
                //{
                Dictionary <Point, int> sectionLine = getSectionPixels(n, orginalBitmap, startingSectionLen);

                foreach (var item in sectionLine)
                {
                    training.SetPixel(item.Key.X, item.Key.Y, Color.Red);
                }
                Point        p      = sectionMinimum(sectionLine, alreadyPassed);
                List <Point> points = ImageSupporter.GetLine(m, p);
                bool         flag   = true;
                foreach (var item in points)
                {
                    if (orginalBitmap.GetPixel(item.X, item.Y).R > limit)
                    {
                        flag = false;
                    }
                }



                if (/*orginalBitmap.GetPixel(p.X, p.Y).R< limit*/ flag && alreadyPassed.GetPixel(p.X, p.Y).B != 128)

                //if (orginalBitmap.GetPixel(p.X, p.Y).R < limit && alreadyPassed.GetPixel(p.X, p.Y).B != 128)
                {
                    for (int a = p.X - 1; a < p.X + 2; a++)
                    {
                        for (int b = p.Y - 1; b < p.Y + 2; b++)
                        {
                            try
                            {
                                //   if(a<training.Width&&a>0&&b<training.Height&&b>0)
                                // training.SetPixel(a, b, Color.Blue);
                            }
                            catch (Exception e)
                            {
                            }
                        }
                    }
                    ImageSupporter.matchLine2(alreadyPassed, m, n, standard, 5);
                    ImageSupporter.matchLine2(training, m, n, Color.Pink, 1);
                    if (ImageSupporter.RadianToDegree(
                            Math.Abs(
                                localDirectionMap
                                .getDirectionForPixel(p.X, p.Y) - localDirectionMap.getDirectionForPixel(m.X, m.Y))) > 100)
                    {
                        followingUp(p);
                    }
                    else
                    {
                        followingDown(p);
                    }
                }
                else if (alreadyPassed.GetPixel(p.X, p.Y).B == 128 && flag)
                {
                    List <Point> list = ImageSupporter.GetLine(m, n);


                    Point wsk = p;

                    foreach (Point pi in list)
                    {
                        wsk = pi;
                        int i = orginalBitmap.GetPixel(pi.X, pi.Y).R;
                        if (orginalBitmap.GetPixel(pi.X, pi.Y).B != 128)
                        {
                        }
                        else
                        {
                            break;
                        }
                    }
                    // minucje.Add(new Tuple<Point,double>(wsk, angle));
                    try
                    {
                        for (int a = wsk.X - 1; a < wsk.X + 2; a++)
                        {
                            for (int b = wsk.Y - 1; b < wsk.Y + 2; b++)
                            {
                                // training.SetPixel(a, b, Color.Yellow);
                            }
                        }
                        //int i = orginalBitmap.GetPixel(wsk.X, wsk.Y).R;
                        //training.SetPixel(wsk.X, wsk.Y, Color.Orange);
                    }
                    catch (Exception ec)
                    {
                    }
                }
                //   else if(orginalBitmap.GetPixel(p.X, p.Y).R >= limit)
                else //if( !flag&& alreadyPassed.GetPixel(p.X, p.Y).B != 128)
                {
                    // training.SetPixel(n.X, n.Y, Color.Orange);

                    List <Point> list = ImageSupporter.GetLine(m, n);


                    Point wsk = n;

                    foreach (Point pi in list)
                    {
                        // int i = orginalBitmap.GetPixel(pi.X, pi.Y).R;
                        if (orginalBitmap.GetPixel(pi.X, pi.Y).R < limit)
                        {
                        }
                        else
                        {
                            wsk = pi;
                            break;
                        }
                    }
                    Minutia newMinutia;
                    if (!inverted)
                    {
                        newMinutia = new Minutia(wsk, angle, KindOfMinutia.ZAKONCZENIE);
                    }
                    else
                    {
                        newMinutia = new Minutia(wsk, angle, KindOfMinutia.ROZWIDLENIE);
                    }
                    minucje.Add(newMinutia);
                    ImageSupporter.MatchMinutia2(training, Color.Orange, Color.Purple, newMinutia);
                    try
                    {
                        for (int a = wsk.X - 1; a < wsk.X + 2; a++)
                        {
                            for (int b = wsk.Y - 1; b < wsk.Y + 2; b++)
                            {
                                // training.SetPixel(a, b, Color.Orange);
                            }
                        }
                        //int i = orginalBitmap.GetPixel(wsk.X, wsk.Y).R;
                        //training.SetPixel(wsk.X, wsk.Y, Color.Orange);
                    }
                    catch (Exception ec)
                    {
                    }
                }
            }
        }
Ejemplo n.º 3
0
        private int GetAngle(MinutiaWektor froDatabase, MinutiaWektor scaned)
        {
            int[] ballotDodatni = new int[45];
            int[] ballotUjemny  = new int[45];
            foreach (var d in froDatabase.m) //wektor minucji z bazy danych
            {
                foreach (var n in scaned.m)  //wektor minucji analizowanego odcisku
                {
                    // for (int angle = angleRangeBottom; angle < angleRangeTop; angle += angleJump)
                    //{
                    //if (dd(n.direction + ImageSupporter.DegreeToRadian(angle), d.direction) < LimitRotate)
                    //{
                    //double katPrzesuniecia = dd(n.direction, d.direction);
                    int katPrzesuniecia = (int)(ImageSupporter.RadianToDegree(ddd(n.direction, d.direction)) + 0.5);
                    if (katPrzesuniecia > 0)
                    {
                        if (katPrzesuniecia < 45)
                        {
                            ballotDodatni[katPrzesuniecia]++;
                        }
                    }
                    else
                    {
                        if (Math.Abs(katPrzesuniecia) < 45)
                        {
                            ballotUjemny[katPrzesuniecia]++;
                        }
                    }


                    //int index=(angle - angleRangeBottom) / angleJump;
                    //ballot[index] += 1;
                    //}
                    //}
                }
            }

            int maxDodatni  = 0;
            int katDodatnik = 0;

            for (int i = 0; i < ballotDodatni.Length; i++)
            {
                if (maxDodatni < ballotDodatni[i])
                {
                }
            }

            for (int i = 0; i < ballotUjemny.Length; i++)
            {
            }


            /*  int j = 0;
             * int ang = 0;
             * for(int i=0;i<ballot.Length;i++)
             * {
             *    if(ballot[i]>ang)
             *    {
             *        i = j;
             *        ang = ballot[i];
             *
             *    }
             * }*/

            //return angleRangeBottom + j * angleJump;
            return(0);
        }