З'єднувальні кромки, виявлені детектором кромки


14

У мене є бінарне зображення, отримане від рентгенівського детектора краю. Краї непомітно виявлені в центрі, і мені потрібно з'єднати їх. З'єднання ребер залежить від орієнтації та сусідства. Мені потрібно підключити вершини, якщо вони нижче порогового значення (скажімо, менше 5 піксельних відстаней). Якщо мої майже лінійні риси добре орієнтовані, цей поріг слід послабити. (Це найкращий випадок.) зображення

Я спробував перетворення Хоф, але це не вийшло у мене, оскільки у мене немає прямих ліній. Дилатація та ерозія також не є гарними; вони роблять зображення сором’янішими.

Я намагаюся підходити спочатку виявляти вершини та вузли (в MATLAB з bwmorph), а потім робити листя як окрему особливість. Робиться це так:

  1. Скануючи у вікні 3х3, шукайте сусідів.
  2. Пройдіть повний підключений об'єкт.
  3. Спробуйте підігнати лінію (а може бути і квадратичний многочлен).
  4. Перевірте функцію за характеристикою, чи варто підключення чи ні.

Реалізація не є однозначною, оскільки частина прийняття рішень, де потрібно підключати вершини, є складним.


Я знайшов цікаве рішення, як знайти гілки. MATLAB може легко надати розташування вузлам. MATLAB також може мітити підключені функції. Таким чином, ви можете вибрати одну підключену функцію. Знайдіть вузли. Встановіть ці вузли на 0. В основному відключіть прикмету та позначте їх ще раз. У вас будуть гілки на деревах. Це вимагало менше ручного програмування, і результати здаються прекрасними. Якийсь вхід?
Нареш

Що стосується частини підключення, зараз я думаю про пошук великих функцій і вважаю їх більш надійними. Тоді, якщо вони прямі, (перевірте якість фітнесу), перетворіть їх у полярні координати та шукайте околиці, як перетворення Хоуга. Для великих функцій радіус пошуку великий (пропорційний розміру). Я реалізую цей код. Результати в дорозі. Коментарі pls.
Нареш

Відповіді:


4

Це може бути не повним рішенням, але дасть вам гарне керівництво.

В основному, які ключові критерії сказати, що краї відповідають? Цей "локальний" градієнт краю збігається і певною мірою відстані є розумними в порівнянні з тим, наскільки довгий край є безперервним.

Якщо у вас є геометричні краї, як довгі прямі лінії, Хоф відразу зробить дуже безшовну роботу. Але це не працює, коли ребра довільної кривої. У цьому випадку ви все ще можете вважати криву як приблизно шматок розумних константних сегментів (досить добре у вашому випадку), отже, вам слід прийняти Hough локально. тобто ви можете сфотографувати невелику частину зображення (скажімо, блок), обчислити Хоф і визначити деякі піки. Виходячи з цього, ви можете визначити, що де-хогінг створює значущий пробіл, якщо так, збережіть його чи рухайтеся далі.

Після заповнення менших зазорів ви можете збільшити ті ж самі, щоб отримати більший розмір. піків буде більше, але ви можете вибрати менше.


дякую Діпане, я теж подумав про це. Це буде дорого коштувати, але я можу отримати деяку інформацію. Але іноді трансформація Хогу також не дає мені з'єднаних ліній. Хафф піклується лише про ідеальні прямі лінії. І не піклується про підключення пікселів. Він просто підходить до прямої лінії на 3 і більше випадкових пікселів. Я кодую свою гіпотезу. Я опублікую результати тут для подальшого обговорення. Naresh
Naresh

θ

4

Це насправді не буде просто ... Ви можете спробувати повністю працювати зі структурою Graph. Спочатку витягніть із зображення всі підключені пікселі та вставте їх у графік, де сусідні вузли з'єднані ребром. Ви можете відкинути графіки, менші за деяку кількість М-вузлів (щоб виключити маленькі плями, які не стосуються зображення).

В кінці цього процесу у вас буде набір відключених графіків. (Судячи з вашого зображення, це не зовсім Дерева, оскільки там є цикли)

Ви можете знайти крайні точки кожного Графіка (крайні пікселі на периферії кожного Графіка), починаючи з якогось випадкового вузла і роблячи DFS .

В кінці цього процесу у вас буде набір піксельних координат для кожного графіка, що відповідає екстремальним точкам, де швидше утворюються з'єднання.

Тепер ви можете спробувати з'єднати найближчі крайні сусіди точки (з відстані <= 5) просто прямою лінією.

Але, якщо ви хочете взяти до уваги нахил відрізка лінії, який веде до цього крайнього пікселя, ви можете спробувати "підлаштувати лінію" до N пікселів PRIOR, щоб досягти цього крайнього пікселя. Отже, якщо N = 5, то останні 5 пікселів гілки будуть використані при оцінці рядка.

Отже, для кожної найближчої пари сусідів ви також маєте ще одну річ, яку слід використовувати як критерій, щоб оцінити, чи слід з'єднувати два сегменти (тобто екстремальна відстань точки <= 5 пікселів І приблизно рівний нахил лінії).

Щоб звести до мінімуму вплив шуму, який може змусити ваші лінії виглядати зубчастими біля підказок гілки (і, таким чином, спотворювати оцінку нахилу), ви можете спробувати застосувати крок свого спрощення до свого Графіка (це ще один момент (крім DFS вище), де він платить робота зі структурою Graph). Ви можете, наприклад, видалити наступні вузли Графіку, які зробили б лінію "зігнутий" під кутами, більшими, ніж деяке відсічення (про щось складніше див. Тут ). Таким чином ви будете прилаштовувати "простіші" лінії, приблизно до напрямку більшої частини відрізка, утвореного пікселями зображення.

Це, мабуть, призведе до гідних зв’язків для більшості випадків (якщо судити по зображенню, яке ви опублікували), але це все одно залишить вас з деякими складними. Наприклад, як би зв'язаний візерунок переривання у формі Y, коли одна з гілок перервана поблизу точки з'єднання? (тобто у вас "суцільний" вигин, який повинен бути з'єднаний з відрізком лінії, який "змішується" з ним). Можливо, ви могли б переглянути, наскільки поширені такі випадки, і переглянути свої критерії підключення пізніше.

Також, можливо, варто було б вивчити, як ви могли б покращити придбання зображення (збільшити роздільну здатність, наприклад).


Дякую за хорошу відповідь. Так, ваше спостереження правильне. Це не дерево, тому краще скласти графік. Це також допоможе мені знайти цикли. Справа в тому, що MATLAB реалізував графік у вікні інструментів біоінфо, який, я не можу припустити, більшість людей матиме. Найбільше, що я можу піти, це поле інструментів для обробки зображень. Дуглас-П’юкер - це теж те, що я вважав. Але порадившись з експертом з ГІС, я зрозумів, що це може зробити складнішими речі, і я можу отримати лінії, що перетинаються. Крім того, мені також потрібно переглянути різні сегменти рядків у графі, оскільки мені потрібно 10 пікселів для створення лінії, і я можу вже мати роздвоєння.
Нареш
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.