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); }
public ZdjecieZPozycją PobierzZdjecie(List <int> Zloczone) { ListaZPorównywaniem <int> l = new ListaZPorównywaniem <int>(Zloczone); if (DzienikZnalezionych.ContainsKey(l)) { return(DzienikZnalezionych[l]); } else { ZdjecieZPozycją z = new ZdjecieZPozycją(); z.Obszar = DoKwadratów.StwórzKwadratZawierającyWiele(PobierzZdjeciaPoIndeksach(Zloczone)); z.Skeljona = Zloczone.Count > 1; z.ObliczPodobieństwo(Obraz, Szerokośc, Sieć); DzienikZnalezionych.Add(l, z); return(z); } }
public void Scal() { List <ZdjecieZPozycją> DoDodania = new List <ZdjecieZPozycją>(); HashSet <ZdjecieZPozycją> DoUsuniecia = new HashSet <ZdjecieZPozycją>(); while (w.Count != 0) { WystepująceWTymSamymMiejscu ostatni = w.Last(); if (ostatni.Count == 1) { w.RemoveAt(w.Count - 1); continue; } ZdjecieZPozycją z = new ZdjecieZPozycją(); z.Obszar = DoKwadratów.StwórzKwadratZawierającyWiele(ostatni.ToArray()); z.ObszarInterpolowany = DoKwadratów.StwórzKwadratZawierającyWieleRec(WeźInterpolowany(ostatni)); z.Skeljona = true; z.ObliczPodobieństwo(Obraz, Szerokość, sieć); if (PrógDoUsuniecia + z.NajbliszePodobieństwo < ostatni.Podobność) { foreach (var item in ostatni) { DoUsuniecia.Add(item); } w.RemoveAll(X => X.Kolizja(ostatni)); DoDodania.Add(z); } else { w.RemoveAt(w.Count - 1); } } LinikaZmieniana.ListaZZdjeciami.RemoveAll(X => DoUsuniecia.Contains(X)); LinikaZmieniana.ListaZZdjeciami.AddRange(DoDodania); LinikaZmieniana.ListaZZdjeciami.Sort(new DoKwadratów.SortowanieWzgledemX()); }
public void UsuńMałe() => DoKwadratów.UsuńOdbiegająceWielkością(ListaZZdjeciami, WspółczynikUsunieciaConst);