//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); }
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)); }
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)); }
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); }
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)); }
//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); }
public double dd(double angleNew, double angleOld) { return(Math.Min(Math.Abs(angleNew - angleOld), ImageSupporter.DegreeToRadian(360) - Math.Abs(angleNew - angleOld))); }