Якщо ви чомусь обмежилися використанням морфологічних операцій, ви можете розглянути можливість використання "схеми голосування" орієнтованих операцій закриття.
Одна з проблем морфологічних операцій полягає в тому, що вони насправді не враховують спрямованість. Для центрального пікселя такий мікрорайон
1 0 0
1 1 0
0 1 1
насправді нічим не відрізняється від сусідства, як це
0 1 0
1 1 0
1 1 0
Це може спричинити проблеми, оскільки дилатація та ерозія не мають прямої упередженості, коли ви, можливо, хочете, щоб вони були. Отже, одне, що ви можете зробити, - це знайти найбільш відповідну спрямовану морфологічну операцію, використовуючи ядра приблизно такого:
1 1 0 1 0 0 1 0 0
0 1 0 1 1 0 1 1 0
0 1 1 0 1 1 0 1 1 . . .
Це було б краще з 5 х 5 ядрами, але я думаю, що ідея є досить зрозумілою. В основному ідея кутового ядра виявлення трохи розтягується, так що це ядро виявлення сегментного рядка. Ви також можете використовувати його для пошуку найкращих кривих:
0 0 0 1 1
0 0 1 1 0
0 1 1 0 0
0 0 1 1 0
0 0 0 1 1
Очевидно, це призводить до величезної кількості ядер, але якщо основна ідея працює, то для вас обіцяють, існує спосіб оптимізувати техніку, щоб найкраще ядро було знайдено за один прохід.
У будь-якому випадку, якщо ви використовуєте кілька ядер і певну логіку, кожна операція в (x, y) вимагає більше обчислень, ніж традиційний морфологічний крок:
- На кожен піксель (x, y) застосуйте кожного з декількох морфологічних операторів. Для кожного оператора обчисліть як результат морфологічної операції, так і ступінь відповідності вводу ядра. ("Градус" = кількість пікселів, які відповідають)
- Виберіть морфологічний результат для ядра, яке найбільше відповідає фактичній конфігурації пікселів.
Розмір ядра повинен відповідати розміру вводу. Замість використання більшого ядра, ви можете використовувати ядро "розповсюдження", щоб зменшити кількість операцій. Наступне ядро - це ядро лише 3 х 3, радіус якого перевищує 1.
1 0 0 0 0 0 0
0 0 0 0 0 0 0
1 0 0 1 0 0 0
0 0 0 0 0 0 0
1 0 0 0 0 0 1