示例#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 void BadajLinike(int *mapaSpójnychObszarów, Size samLoto, bool *obrazKopis, List <ZdjecieZPozycją> listaZdjęć, int item)
        {
            var Rzut = PobierzRzutX(obrazKopis, new Rectangle(0, item - PrzypószczalnaWysokość, samLoto.Width, PrzypószczalnaWysokość), samLoto.Width);
            int Próg = ProgowanieGradientowe.ProgójTablice(Rzut, Rzut.Length);

            bool[] SprogowaneY  = Otsu.ProgójTablice(Rzut, Próg);
            int[]  SumaWRzędach = SumaBool(SprogowaneY, PrzypószczalnaWysokość);
            var    Ekrema       = ZnajdźEktremaNajwieksze(SumaWRzędach, PrzypuszczalnaSzerokość * 0);

            UsuńStycznePoWartościach(SumaWRzędach, Ekrema, PrzypuszczalnaSzerokość);
            foreach (var item2 in Ekrema)
            {
                ZbudujLitere(item - PrzypószczalnaWysokość, item2 - PrzypuszczalnaSzerokość, mapaSpójnychObszarów, samLoto);
            }
        }