예제 #1
0
        internal unsafe void Zlepiaj(int *mapaSpójnychObszarów, SiecNeuronowa.ISiećNeuronowa <string> sieć, Size samLoto, bool *obrazKopis, List <ZdjecieZPozycją> listaZdjęć)
        {
            ZaładujObszary(listaZdjęć);
            var    Rzuty  = PobierzRzutY(obrazKopis, new Rectangle(Point.Empty, samLoto), samLoto.Width);
            double Skaler = 255; Skaler /= Rzuty.Max();
            int    Próg   = (int)(ProgowanieGradientowe.ProgójTablice(Rzuty, (int)(samLoto.Height * SkalerByPominąćKrańce)) * SkalerRóznicyNajkrutszyOdNajduszychLinijek);

            bool[] SprogowaneY = Otsu.ProgójTablice(Rzuty, Próg);
            if (!ProgowanieAdaptacyjne.Sprawdź2Modalność(Otsu.PobierzHistogram256(Matematyka.SkalujTablice(Rzuty, Skaler)), (int)(Skaler * Próg), 1.2f))
            {
                return;
            }
            int[] SumaWRzędach = SumaBool(SprogowaneY, PrzypószczalnaWysokość);
            var   Ekrema       = ZnajdźEktremaNajwieksze(SumaWRzędach, PrzypószczalnaWysokość / 2);

            UsuńStycznePoPierszeństwie(Ekrema, PrzypószczalnaWysokość);
#if DEBUG
            ZapiszLinikiY(samLoto, obrazKopis, SprogowaneY, new HashSet <int>(Ekrema), SumaWRzędach);
#endif
            foreach (var item in Ekrema)
            {
                BadajLinike(mapaSpójnychObszarów, samLoto, obrazKopis, listaZdjęć, item);
            }

            DecydujOPrzynależności();
            List <ZdjecieZPozycją>    Dodawane           = ZnajdźNoweObszary(obrazKopis, sieć, samLoto);
            HashSet <ZdjecieZPozycją> ObszaryDoUsuniecia = ZnajdźDoUsuniecia();
            listaZdjęć.RemoveAll(x => ObszaryDoUsuniecia.Contains(x));
            Dodawane.ForEach(x => x.ZlepionaRzutami = true);
            listaZdjęć.AddRange(Dodawane);
#if DEBUG
            ZlepianieRzutami(samLoto, obrazKopis, Dodawane);
#endif
        }
예제 #2
0
        private unsafe List <ZdjecieZPozycją> ZnajdźNoweObszary(bool *c, SiecNeuronowa.ISiećNeuronowa <string> sieć, Size Wielkość)
        {
            List <ZdjecieZPozycją> z = new List <ZdjecieZPozycją>();

            foreach (var item in ZnalezioneObszary)
            {
                if (item.Count > 0)
                {
                    List <ZdjecieZPozycją> Lisr = new List <ZdjecieZPozycją>();

                    foreach (var item2 in item)
                    {
                        ZdjecieZPozycją zpi;
                        if (ObsógaMapyObszarów.TryGetValue(item2.NarKwadratu, out zpi))
                        {
                            Lisr.Add(zpi);
                        }
                    }
                    if (Lisr.Count > 0)
                    {
                        ZdjecieZPozycją zp = new ZdjecieZPozycją();
                        zp.Obszar = DoKwadratów.StwórzKwadratZawierającyWiele(Lisr.ToArray());
                        zp.ObliczPodobieństwo(c, Wielkość.Width, sieć);
                        zp.Moc = Lisr.Sum(x => x.Moc);
                        z.Add(zp);
                    }
                }
            }
            return(z);
        }
예제 #3
0
        static PodziałLinik()
        {
            Sieć = SiecNeuronowa.SieciRywalizujące <string> .Wczytaj("Loto\\Sieci\\" + StałeGlobalne.NazwaPlikuRywalizującejSieci, Czytnik);

            SiećNeuronowa = new OpakowanieSieci <string>(Network.Load("Loto\\Sieci\\siec.tv"), Sieć.DzienikZamian);
        }
예제 #4
0
 public ZlepianieLinijek(SiecNeuronowa.ISiećNeuronowa <string> s)
 {
     Sieć = s;
 }