//zmienia zadany kąt na kąt od 180 do 360
 public static double angletoIIIandIV(double angle)
 {
     if (ImageSupporter.DegreeToRadian(180) < angle && ImageSupporter.DegreeToRadian(180) > angle)
     {
         angle += ImageSupporter.DegreeToRadian(180);
     }
     return(angle);
 }
Ejemplo n.º 2
0
        private Minutia MapMinutia(Minutia m, ModyficationElement em)//działa poprawnie sprawdzone
        {
            //  em = new ModyficationElement(-10, 5, 30);
            double angle  = ImageSupporter.DegreeToRadian(em.angle);
            int    x      = (int)(Math.Cos(angle) * m.p.X - Math.Sin(angle) * m.p.Y + em.x + 0.5);
            int    y      = (int)(Math.Sin(angle) * m.p.X + Math.Cos(angle) * m.p.Y + em.y + 0.5);
            double angle2 = m.direction + angle;//tutaj nie jestem pewny z kontem

            return(new Minutia(new Point(x, y), angle2, m.kind));
        }
Ejemplo n.º 3
0
        public double ddd(double angleNew, double angleOld)
        {
            if (Math.Abs(angleNew - angleOld) < ImageSupporter.DegreeToRadian(360) - Math.Abs(angleNew - angleOld))
            {
                return(angleNew - angleOld);
            }
            else
            {
                return(ImageSupporter.DegreeToRadian(360) - Math.Abs(angleNew - angleOld));
            }

            //return Math.Min(Math.Abs(angleNew - angleOld), ImageSupporter.DegreeToRadian(360) - Math.Abs(angleNew - angleOld));
        }
Ejemplo n.º 4
0
        public List <Tuple <DatabaseElement, int, ModyficationElement, int> > CheckList(MinutiaWektor wektor)
        {
            List <Tuple <DatabaseElement, int, ModyficationElement, int> > result = new List <Tuple <DatabaseElement, int, ModyficationElement, int> >();
            MinutiaWektorComperer comperer = new MinutiaWektorComperer(10, 10, ImageSupporter.DegreeToRadian(15));

            foreach (var item in mBase)
            {
                Tuple <bool, int, ModyficationElement, int> compereResult = comperer.Compere(item.MinutiaesWektor, wektor);

                if (compereResult.Item1)
                {
                    result.Add(new Tuple <DatabaseElement, int, ModyficationElement, int>(item, compereResult.Item2, compereResult.Item3, compereResult.Item4));
                }
            }



            return(result);
        }
Ejemplo n.º 5
0
 private Tuple <bool, float> Voting(MinutiaWektor froDatabase, MinutiaWektor scaned)
 {
     foreach (var d in froDatabase.m) //wekrot minucji z bazy danych
     {
         foreach (var n in scaned.m)  //wektor minucji analizowanego odcisku
         {
             for (int angle = angleRangeBottom; angle < angleRangeTop; angle += angleJump)
             {
                 // if(dd(ImageSupporter.DegreeToRadian( angle),0)<ImageSupporter.DegreeToRadian(3) && d.p.Equals(n.p))
                 if (dd(n.direction + ImageSupporter.DegreeToRadian(angle), d.direction) < LimitRotate)
                 {
                     Point tmp = getShift(n, d, ImageSupporter.DegreeToRadian(angle));
                     ModyficationElement vote = new ModyficationElement(tmp.X, tmp.Y, angle);
                     Vote(vote);
                 }
             }
         }
     }
     return(new Tuple <bool, float>(false, 0));
 }
Ejemplo n.º 6
0
        //metoda zwracająca bank filtrów gabora dla zadanej bitmapy
        public static List <Bitmap> gaborFilterMyBank(Bitmap bs)
        {
            List <SetValuesForGabor> bank = new List <SetValuesForGabor>();

            bank.Add(new SetValuesForGabor(4, 8, 0.5f, 9.2f, 0));
            bank.Add(new SetValuesForGabor(4, 8, 0.5f, 4.8f, (float)ImageSupporter.DegreeToRadian(15)));
            bank.Add(new SetValuesForGabor(4, 6.5f, 0.5f, 4.3f, (float)ImageSupporter.DegreeToRadian(30)));
            bank.Add(new SetValuesForGabor(4, 7, 0.5f, 4.3f, (float)ImageSupporter.DegreeToRadian(45)));
            bank.Add(new SetValuesForGabor(4, 6.5f, 0.5f, 4.3f, (float)ImageSupporter.DegreeToRadian(60)));
            bank.Add(new SetValuesForGabor(4, 8, 0.5f, 4.8f, (float)ImageSupporter.DegreeToRadian(75)));
            bank.Add(new SetValuesForGabor(4, 7, 0.5f, 4.6f, (float)ImageSupporter.DegreeToRadian(90)));
            bank.Add(new SetValuesForGabor(4, 7.3f, 0.5f, 4.4f, (float)ImageSupporter.DegreeToRadian(105)));
            bank.Add(new SetValuesForGabor(4, 6.2f, 0.5f, 3.7f, (float)ImageSupporter.DegreeToRadian(120)));
            bank.Add(new SetValuesForGabor(4, 7, 0.5f, 4.3f, (float)ImageSupporter.DegreeToRadian(135)));
            bank.Add(new SetValuesForGabor(4, 6.5f, 0.5f, 4.3f, (float)ImageSupporter.DegreeToRadian(150)));
            bank.Add(new SetValuesForGabor(4, 8, 0.5f, 4.8f, (float)ImageSupporter.DegreeToRadian(165)));



            GaborFilter gb     = new GaborFilter();
            Random      random = new Random();
            Bitmap      bx;
            Bitmap      b = (Bitmap)bs.Clone();

            List <Bitmap> gaborBank = new List <Bitmap>();

            bx = ImageSupporter.ColorToGrayscale(b);

            for (int i = 0; i < bank.Count; i++)
            {
                bank[i].SetGaborFilter(gb);
                gaborBank.Add(gb.Apply((Bitmap)bx.Clone()));

                ImageWindow im = new ImageWindow(ImageSupporter.Bitmap2BitmapImage(gaborBank[i]));

                im.Title = gb.Gamma + " " + gb.Lambda + " " + gb.Psi + " " + gb.Sigma + " " + gb.Theta;
                im.Show();
            }

            return(gaborBank);
        }
Ejemplo n.º 7
0
 public double dd(double angleNew, double angleOld)
 {
     return(Math.Min(Math.Abs(angleNew - angleOld), ImageSupporter.DegreeToRadian(360) - Math.Abs(angleNew - angleOld)));
 }