To naprawdę nie będzie proste ... Możesz spróbować całkowicie pracować ze strukturą Graph. Najpierw wyodrębnij wszystkie połączone piksele z obrazu i wstaw je do wykresu, w którym sąsiednie węzły są połączone krawędzią. Możesz odrzucić Wykresy mniejsze niż pewna liczba M węzłów (aby wykluczyć małe plamki, które nie są istotne dla obrazu).
Pod koniec tego procesu będziesz mieć zestaw odłączonych wykresów. (Sądząc z twojego obrazu, nie są to dokładnie Drzewa, ponieważ są tam cykle)
Możesz znaleźć skrajne punkty każdego wykresu (skrajne piksele na obrzeżach każdego wykresu), zaczynając od jakiegoś losowego węzła i wykonując DFS .
Pod koniec tego procesu będziesz mieć zestaw współrzędnych pikseli dla każdego wykresu odpowiadających ekstremalnym punktom, w których połączenia są bardziej prawdopodobne.
Możesz teraz spróbować połączyć najbliższy punkt skrajny sąsiadów (o odległości <= 5) po prostu linią prostą.
Ale jeśli chcesz wziąć pod uwagę nachylenie segmentu linii prowadzącego do tego skrajnego piksela, możesz spróbować „dopasować linię” do N pikseli PRZED osiągnięciem tego ekstremalnego piksela. Jeśli więc N = 5, to do oszacowania linii użyte zostaną ostatnie 5 pikseli gałęzi.
Dlatego dla każdej najbliższej pary sąsiadów masz teraz także inne kryterium do oceny, czy należy połączyć dwa segmenty (tj. Ekstremalna Odległość Punktowa <= 5 pikseli ORAZ w przybliżeniu równe nachylenie linii).
Aby zminimalizować wpływ hałasu, który może sprawić, że twoje linie będą poszarpane w pobliżu wierzchołków gałęzi (a tym samym zniekształcą twoje oszacowanie nachylenia), możesz spróbować zastosować krok uproszczenia do swojego wykresu (jest to kolejny punkt (oprócz DFS powyżej), w którym opłaca się praca ze strukturą wykresu). Możesz na przykład usunąć kolejne węzły wykresu, które spowodowałyby, że linia „wyginałaby się” pod kątami większymi niż niektóre odcięcia (coś bardziej złożonego, patrz tutaj ). W ten sposób dopasujesz „prostsze” linie, mniej więcej w kierunku większej części segmentu utworzonego przez piksele obrazu.
Prawdopodobnie spowoduje to przyzwoite połączenia w większości przypadków (sądząc po opublikowanym obrazie), ale nadal pozostawi Ci kilka trudnych. Na przykład, w jaki sposób połączyć przerwany wzór w kształcie litery „Y”, w którym jedna z gałęzi jest przerwana w pobliżu punktu połączenia? (tzn. masz „ciągłe” zagięcie, które musi być połączone z odcinkiem linii, który „zlewa się” z nim). Być może mógłbyś sprawdzić, jak częste są takie przypadki i później zmienić kryteria połączenia.
Być może warto byłoby zbadać, w jaki sposób można poprawić akwizycję obrazu (na przykład zwiększyć rozdzielczość).