Це насправді не буде просто ... Ви можете спробувати повністю працювати зі структурою Graph. Спочатку витягніть із зображення всі підключені пікселі та вставте їх у графік, де сусідні вузли з'єднані ребром. Ви можете відкинути графіки, менші за деяку кількість М-вузлів (щоб виключити маленькі плями, які не стосуються зображення).
В кінці цього процесу у вас буде набір відключених графіків. (Судячи з вашого зображення, це не зовсім Дерева, оскільки там є цикли)
Ви можете знайти крайні точки кожного Графіка (крайні пікселі на периферії кожного Графіка), починаючи з якогось випадкового вузла і роблячи DFS .
В кінці цього процесу у вас буде набір піксельних координат для кожного графіка, що відповідає екстремальним точкам, де швидше утворюються з'єднання.
Тепер ви можете спробувати з'єднати найближчі крайні сусіди точки (з відстані <= 5) просто прямою лінією.
Але, якщо ви хочете взяти до уваги нахил відрізка лінії, який веде до цього крайнього пікселя, ви можете спробувати "підлаштувати лінію" до N пікселів PRIOR, щоб досягти цього крайнього пікселя. Отже, якщо N = 5, то останні 5 пікселів гілки будуть використані при оцінці рядка.
Отже, для кожної найближчої пари сусідів ви також маєте ще одну річ, яку слід використовувати як критерій, щоб оцінити, чи слід з'єднувати два сегменти (тобто екстремальна відстань точки <= 5 пікселів І приблизно рівний нахил лінії).
Щоб звести до мінімуму вплив шуму, який може змусити ваші лінії виглядати зубчастими біля підказок гілки (і, таким чином, спотворювати оцінку нахилу), ви можете спробувати застосувати крок свого спрощення до свого Графіка (це ще один момент (крім DFS вище), де він платить робота зі структурою Graph). Ви можете, наприклад, видалити наступні вузли Графіку, які зробили б лінію "зігнутий" під кутами, більшими, ніж деяке відсічення (про щось складніше див. Тут ). Таким чином ви будете прилаштовувати "простіші" лінії, приблизно до напрямку більшої частини відрізка, утвореного пікселями зображення.
Це, мабуть, призведе до гідних зв’язків для більшості випадків (якщо судити по зображенню, яке ви опублікували), але це все одно залишить вас з деякими складними. Наприклад, як би зв'язаний візерунок переривання у формі Y, коли одна з гілок перервана поблизу точки з'єднання? (тобто у вас "суцільний" вигин, який повинен бути з'єднаний з відрізком лінії, який "змішується" з ним). Можливо, ви могли б переглянути, наскільки поширені такі випадки, і переглянути свої критерії підключення пізніше.
Також, можливо, варто було б вивчити, як ви могли б покращити придбання зображення (збільшити роздільну здатність, наприклад).