Если по какой-то причине вы ограничены использованием морфологических операций, то вы можете рассмотреть возможность использования «схемы голосования» для ориентированных операций закрытия.
Одна проблема с морфологическими операциями состоит в том, что они действительно не принимают во внимание направленность. Для центрального пикселя такая окрестность
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 x 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 x 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