public LinikaWzgledna PobierzLinikeWzgledną() { int M = MinimumInterpolowane(); LinikaWzgledna lkw = new LinikaWzgledna(); lkw.Y = M; foreach (var item in ListaZZdjeciami) { if (item != null || item.Text == "") { ObszarWzgledny obw = new ObszarWzgledny(); obw.ZajmowanyObszar = item.ObszarInterpolowany; obw.ZajmowanyObszar.Y -= M; if (string.IsNullOrEmpty(item.Text)) { obw.Obszar = item; obw.DodajSybol(item.Tag as string); } else { obw.DodajListeSyboli(item.Text.Split('|')); } lkw.CześciLinijek.Add(obw); } } return(lkw); }
public ObszarWzgledny[] ZNajdźDopoasowanie(LinikaWzgledna lk, float MaksymalnaOdległość) { ObszarWzgledny[] ZNalezione = new ObszarWzgledny[CześciLinijek.Count]; lk.SkalujDo(this); int Index = 0; foreach (var item in CześciLinijek) { float OdległośćMin = float.MaxValue; ObszarWzgledny Wartość = null; foreach (var item2 in lk.CześciLinijek) { float Odległość = Math.Abs(item2.ZajmowanyObszar.X - item.ZajmowanyObszar.X); if (Odległość < OdległośćMin) { OdległośćMin = Odległość; Wartość = item2; } } if (OdległośćMin < MaksymalnaOdległość) { ZNalezione[Index++] = Wartość; } } return(ZNalezione); }
public override unsafe void Znajdź(ZdjecieZPozycją Logo, Linika[] lab2, bool *Binaryn, int DługośćWiersza) { LinikaWzgledna[] LinikiWzgledne = LinikaWzgledna.PobierzLinikiWzgledne(lab2); base.ZnajdźDateLosowania(Logo, LinikiWzgledne, Binaryn); float NajlepszyWynik = 0; string[] NajlepszyString = null; foreach (var item in LinikiWzgledne) { if (item.Y > Logo.Obszar.Bottom + Logo.Obszar.Height * 0.6 && (item.Y < base.MiejsceDaty())) { float Podobieństwo = WynikLotoWzór.PodobieństwoIteracyjne(item, 80, (int)ProstokątNaObrazie.IlośćPikseliSQRT); if (Podobieństwo > MinimalnePodobieństwoWyniku) { item.DopasujProporcje(Binaryn, DługośćWiersza); Numery.Add(item.NajlepszeDopasowanieDoLiniki.UstalOdpowiednie(item, StałeGlobalne.DopuszalneOdalenieOdWzorca, RozpoznawanieKuponu.DzienikZamian, WspółczynikUsunieci)); } if (Podobieństwo > NajlepszyWynik) { NajlepszyWynik = Podobieństwo; item.DopasujProporcje(Binaryn, DługośćWiersza); NajlepszyString = item.NajlepszeDopasowanieDoLiniki.UstalOdpowiednie(item, StałeGlobalne.DopuszalneOdalenieOdWzorca, RozpoznawanieKuponu.DzienikZamian, WspółczynikUsunieci); } } } if (Numery.Count == 0) { Numery.Add(NajlepszyString); } }
private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { if (listBox1.SelectedIndex < 0) { return; } Linika Zaznaczony = LinikiWObrazie[listBox1.SelectedIndex]; label1.Text = $"średnia to {Zaznaczony.ŚredniaY}"; label2.Text = $"średnia min to {Zaznaczony.SredniPoczątekY}"; label3.Text = $"średnia max to {Zaznaczony.SredniKoniecY}"; if (Podobieństwa.Count != 0) { label4.Text = $"Podobieństwo to {Podobieństwa[listBox1.SelectedIndex]}"; LinikaWzgledna LinikaZnaleziona = Zaznaczony.PobierzLinikeWzgledną(); ObszarWzgledny[] a = DomyślnaLinika.ZNajdźDopoasowanie(LinikaZnaleziona, StałeGlobalne.DopuszalneOdalenieOdWzorca); label5.Text = "Wynik dla wiersza " + MałeUproszczenia.ZłoczStringi(DomyślnaLinika.UstalOdpowiednie(a, RozpoznawanieKuponu.DzienikZamian), ","); Size R = DoKwadratów.SortowanieWielkości <ZdjecieZPozycją> .ŚredniaWielkośćSrednichWartości(Zaznaczony.ListaZZdjeciami); float F = R.Width; F /= R.Height; label6.Text = "proporcje X/Y" + F.ToString(); } }
static LotoWynik() { if (WynikLotoWzór == null) { WynikLotoWzór = MałeUproszczenia.WczytajXML <LinikaWzgledna>("Loto\\Liniki\\WynikLoto.linika"); WynikLotoWzór.PrzygotujSzablon(); } }
private void button4_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() == DialogResult.OK) { DomyślnaLinika = MałeUproszczenia.WczytajXML <LinikaWzgledna>(openFileDialog1.FileName); ZaznaczLinike(DomyślnaLinika); } }
public object Clone() { LinikaWzgledna lk = (LinikaWzgledna)MemberwiseClone(); List <ObszarWzgledny> z = new List <ObszarWzgledny>(); foreach (var item in lk.CześciLinijek) { z.Add((ObszarWzgledny)item.Clone()); } lk.CześciLinijek = z; return(lk); }
public InteligentneRozpoznawanieWzorca(LinikaWzgledna linikaWzgledna, LinikaWzgledna lk, ObszarWzgledny[] tb, int v) { linikaWzgledna.PrzygotujSzablon(); this.Szablon = linikaWzgledna; this.Linika = lk; this.NajlepszyKomplet = tb; this.MaksymalnyDystans = v; OdległośćDlaNiepoprawnych = MaksymalnyDystans + ObszarWzgledny.SkalerIlorazuOdległościDoBrakuPodobieństwaZeWzorcem * 20; IlośćWarstw = Szablon.CześciLinijek.Count; DłógośćLiniki = lk.CześciLinijek.Count; UsuńNakładająceSię(); SprawdźBlokadeIWyznaczDystans(); Wczytaj(); TabelaBlokad = new float[IlośćWarstw, DłógośćLiniki]; }
private void SkalujDo(LinikaWzgledna linikaWzgledna) { ObszarWzgledny PierwszyWzorca = linikaWzgledna.CześciLinijek.First(); ObszarWzgledny OstatniWzorca = linikaWzgledna.CześciLinijek.Last(); int MaxWzorca = OstatniWzorca.ZajmowanyObszar.X + OstatniWzorca.ZajmowanyObszar.Width, MinWzorca = PierwszyWzorca.ZajmowanyObszar.X, WielkośćWzorca = MaxWzorca - MinWzorca; ObszarWzgledny Pierwszy = CześciLinijek.First(); ObszarWzgledny Ostatni = CześciLinijek.Last(); int Max = Ostatni.ZajmowanyObszar.X + Ostatni.ZajmowanyObszar.Width, Min = Pierwszy.ZajmowanyObszar.X, Wielkość = Max - Min; float Skaler = WielkośćWzorca / ((float)Wielkość); foreach (var item in CześciLinijek) { item.ZajmowanyObszar.X = (int)(Skaler * (item.ZajmowanyObszar.X - Min)) + MinWzorca; } }
public float WynaczPodobieństwo(LinikaWzgledna lk) { float PodobieństwoLinijek = 0; int MinWPetli = 0; foreach (var item in CześciLinijek) { float MaksymalnePodobieństwo = 0; //foreach (var item2 in lk.CześciLinijek) //{ // if (item.SymbolePasujące.Contains(item2.Pierwszy())) // { // float Podobieństwo = Matematyka.Podobieństwo(item2.ZajmowanyObszar, item.ZajmowanyObszar); // if (Podobieństwo > MaksymalnePodobieństwo) MaksymalnePodobieństwo = Podobieństwo; // } //} for (int i = MinWPetli; i < lk.CześciLinijek.Count; i++) { ObszarWzgledny item2 = lk.CześciLinijek[i]; if (item.ZajmowanyObszar.X > item2.ZajmowanyObszar.Right) { MinWPetli = i + 1; continue; } if (item.ZajmowanyObszar.Right < item2.ZajmowanyObszar.X) { break; } if (item.SprawdźSybol(item2.Pierwszy())) { float Podobieństwo = Matematyka.Podobieństwo(item2.ZajmowanyObszar, item.ZajmowanyObszar); #if DEBUG if (Podobieństwo > 1) { throw new NotImplementedException("podobieństwo jest zbyt wielkie"); } #endif if (Podobieństwo > MaksymalnePodobieństwo) { MaksymalnePodobieństwo = Podobieństwo; } } } PodobieństwoLinijek += MaksymalnePodobieństwo; } return(PodobieństwoLinijek); }
public string[] UstalOdpowiednie(LinikaWzgledna lk, float MaksymalnaOdległość, Dictionary <string, int> TabelaZamian, float WspółczynikUsuniecia = 0) { if (lk.CześciLinijek.Count == 0) { return(new string[CześciLinijek.Count]); } if (WspółczynikUsuniecia != 0) { lk.CześciLinijek.UsuńOdbiegająceWielkością(WspółczynikUsuniecia); } ObszarWzgledny[] Tb = ZNajdźDopoasowanie(lk, MaksymalnaOdległość); InteligentneRozpoznawanieWzorca ik = new InteligentneRozpoznawanieWzorca(this, lk, Tb, 340); Tb = ik.DopasujWzorzec(); return(UstalOdpowiednie(Tb, TabelaZamian)); }
private void button3_Click(object sender, EventArgs e) { if (listBox1.SelectedIndex == -1) { return; } Linika lk = LinikiWObrazie[listBox1.SelectedIndex]; LinikaWzgledna LinikaWzgledna = lk.PobierzLinikeWzgledną(); XmlSerializer xs = new XmlSerializer(typeof(LinikaWzgledna)); if (saveFileDialog1.ShowDialog() == DialogResult.OK) { using (FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create)) { xs.Serialize(fs, LinikaWzgledna); } } }
private void ZaznaczLinike(LinikaWzgledna LkW) { Podobieństwa.Clear(); LinikaWzgledna LinikaZnaleziona = null; float PodobieństwoMax = 0; for (int i = 0; i < listBox1.Items.Count; i++) { LinikaWzgledna TaLinika = LinikiWObrazie[i].PobierzLinikeWzgledną(); float Podobieństwo = LkW.PodobieństwoIteracyjne(TaLinika, 80, (int)ProstokątNaObrazie.IlośćPikseliSQRT); Podobieństwa.Add(Podobieństwo); if (Podobieństwo > PodobieństwoMax) { PodobieństwoMax = Podobieństwo; LinikaZnaleziona = TaLinika; listBox1.SelectedIndex = i; } } ObszarWzgledny[] a; }
public float PodobieństwoIteracyjne(LinikaWzgledna lk, int IlośćIteracji, int Szerokość) { int IlośćTransformacji = 5; int IlośćTransformacji2 = IlośćTransformacji * 2; int[] NajlepszaTabelaWPoprzedniejIteracji = new int[IlośćTransformacji]; float NajlepszePodobieństw = WynaczPodobieństwo(lk); if (lk.SiłaNajlepszegoDopasowania < NajlepszePodobieństw) { lk.NajlepszeDopasowanieDoLiniki = this; lk.SiłaNajlepszegoDopasowania = NajlepszePodobieństw; } HashSet <ListaZPorównywaniem <int> > TransformacjieKtórebyły = new HashSet <ListaZPorównywaniem <int> >(); TransformacjieKtórebyły.Add(new ListaZPorównywaniem <int>(NajlepszaTabelaWPoprzedniejIteracji));//dodanie Wektora początkowego int[,] TabelaPrzesónieć = PobierzTabelePrzesónieć(IlośćTransformacji); for (int i = 0; i < IlośćIteracji; i++) { LinikaWzgledna Najlepsza = null; float NajleprzaWynikWIteracjiIteracji = int.MinValue; int[] NajleprzeWIteracji = null; for (int j = 0; j < IlośćTransformacji2; j++) { int[] Przeglądana = WyznaczTąTabele(NajlepszaTabelaWPoprzedniejIteracji, TabelaPrzesónieć, j); if (TransformacjieKtórebyły.Contains(new ListaZPorównywaniem <int>(Przeglądana))) { continue; } LinikaWzgledna KopiaLiniki = (LinikaWzgledna)this.Clone(); KopiaLiniki.ObrócenieX(Szerokość, WspółczikObróceń * Przeglądana[0]); KopiaLiniki.ObrócenieY(Szerokość, WspółczikObróceń * Przeglądana[1]); KopiaLiniki.PrzesóniecieX(WspółczynikPrzesónieć * Przeglądana[2]); KopiaLiniki.PrzesóniecieY(WspółczynikPrzesónieć * Przeglądana[3]); KopiaLiniki.Zwiekszenie(WspółczynikPrzesónieć * Przeglądana[4]); float PodobieństwoWPrzypadku = KopiaLiniki.WynaczPodobieństwo(lk); if (PodobieństwoWPrzypadku > NajleprzaWynikWIteracjiIteracji) { NajleprzaWynikWIteracjiIteracji = PodobieństwoWPrzypadku; NajleprzeWIteracji = Przeglądana; Najlepsza = KopiaLiniki; } } if (NajleprzaWynikWIteracjiIteracji == int.MinValue) { NajlepszaTabelaWPoprzedniejIteracji = new int[IlośćTransformacji]; continue; } TransformacjieKtórebyły.Add(new ListaZPorównywaniem <int>(NajleprzeWIteracji)); NajlepszaTabelaWPoprzedniejIteracji = NajleprzeWIteracji; if (NajleprzaWynikWIteracjiIteracji > NajlepszePodobieństw) { NajlepszePodobieństw = NajleprzaWynikWIteracjiIteracji; if (lk.SiłaNajlepszegoDopasowania < NajlepszePodobieństw) { lk.NajlepszeDopasowanieDoLiniki = Najlepsza; lk.SiłaNajlepszegoDopasowania = NajlepszePodobieństw; } } } return(NajlepszePodobieństw); }