Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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();
            }
        }
Exemplo n.º 5
0
 static LotoWynik()
 {
     if (WynikLotoWzór == null)
     {
         WynikLotoWzór = MałeUproszczenia.WczytajXML <LinikaWzgledna>("Loto\\Liniki\\WynikLoto.linika");
         WynikLotoWzór.PrzygotujSzablon();
     }
 }
Exemplo n.º 6
0
 private void button4_Click(object sender, EventArgs e)
 {
     if (openFileDialog1.ShowDialog() == DialogResult.OK)
     {
         DomyślnaLinika = MałeUproszczenia.WczytajXML <LinikaWzgledna>(openFileDialog1.FileName);
         ZaznaczLinike(DomyślnaLinika);
     }
 }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
 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];
 }
Exemplo n.º 9
0
        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;
            }
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        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));
        }
Exemplo n.º 12
0
        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);
                }
            }
        }
Exemplo n.º 13
0
        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;
        }
Exemplo n.º 14
0
        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);
        }