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 }
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); } }