private List <ZdjecieZPozycją> ZnajdźBliskoSiebie() { Graf <ZdjecieZPozycją> o = new Graf <ZdjecieZPozycją>(); o.UstalWielkośćGrafu(ListaZZdjeciami.Count, ListaZZdjeciami.ToArray()); for (int i = 0; i < ListaZZdjeciami.Count; i++) { for (int j = i + 1; j < ListaZZdjeciami.Count; j++) { Rectangle a = ListaZZdjeciami[i].Obszar; Rectangle b = ListaZZdjeciami[j].Obszar; if (Matematyka.Styczność2Obiektów(a.Left, a.Right, b.Left, b.Right) > MaxymalnaDopuszczalnaOdległość || Matematyka.Podobność(a.Height, b.Height) > MinimalnePodobieństwoY) { o.PołączenieDwustrone(ListaZZdjeciami[i], ListaZZdjeciami[j]); } } } int Najwieksze = 0; List <ZdjecieZPozycją> z = null; foreach (List <ZdjecieZPozycją> item in o.ZnajdźObszary()) { if (item.Count > Najwieksze) { Najwieksze = item.Count; z = item; } } return(z); }
private void ZlepiajLitere(Graf <int> item) { List <int> P1, P2; float ŚredniaWielkość = ObliczŚredniąWIelkość(item); item.ZnajdźPołączenia(out P1, out P2); if (P1.Count > 6) { return; } int IlośćMożlwiości = 1 << P1.Count; int Stan = IlośćMożlwiości - 1; float NajwiekszePodobieństwo = int.MaxValue; List <ZdjecieZPozycją> NajlepiejDopasowane = new List <ZdjecieZPozycją>(); for (int i = 0; i < IlośćMożlwiości; i++) { UstawGraf(P1, P2, Stan, i, item); item.CzyśćZaznaczenia(); List <ZdjecieZPozycją> z = new List <ZdjecieZPozycją>(); foreach (var SpójneObszary in item.ZnajdźObszary()) { z.Add(PobierzZdjecie(SpójneObszary)); } double Podobieństwo; if (ŚredniaWielkość == 0) { Podobieństwo = z.Average(d => d.NajbliszePodobieństwo); } else { Podobieństwo = z.Average(d => d.NajbliszePodobieństwo / Matematyka.Podobność(ŚredniaWielkość, d.Obszar.Wielkośc())); } if (Podobieństwo < NajwiekszePodobieństwo) { NajwiekszePodobieństwo = (float)Podobieństwo; NajlepiejDopasowane = z; } Stan = i; } foreach (var item2 in item.Listuj()) { PaczkaGrafu pk = PaczkiDoGrafu[item2]; pk.LinikaDoKrótrejNajlerzy.ListaZZdjeciami.Remove(pk.zp); } foreach (var item2 in NajlepiejDopasowane) { Liniki[0].Add(item2); item2.IlośćSąsiadów = item.Wielkość - 1; } item.Zaznacz(); }