Цель
Цель обработки - подготовка сканированных растровых изображений топокарт к автоматической векторизации.
Принципы создания и конкретизация постановки задачи
Предполагается, что цветное растровое изображение топокарты на предыдущем этапе было подвергнуто бинаризации таким образом, что цвета определенных оттенков (например коричневых) остались на изображении, а остальные - исчезли, т.е. перешли в фон.
Исходное изображение разделилось на два цвета (отсюда и название - бинаризация): белые пиксели - это фон, черные - само изображение.
Предполагается также, что бинаризация была проведена таким образом, что на изображении остались только линии (для линейных картографических объектов) или контура (для площадных объектов).
Проведение бинаризации - это отдельная тема, которая обсуждается здесь.
Естественно, что никакая бинаризация сама по себе не может обеспечить того, чтобы линии и контура были гладкими фигурами и чтобы толщина линий была равна одному пикселу растра.
Вот эту задачу и требуется решить с помощью методов морфологической обработки.
Особенности реализации
На рисунках, представленных ниже, приведен фрагмент топографической карты.
цветное изображение
|
бинарное изображение
|
Бинаризация была выполнена по оттенкам коричневых цветов, при этом все остальные цвета удалились. Видно, что линии достаточно "лохматые" и рваные, имеются "дырки" внутри толщины линий, а также заметен "пиксельный шум" между линиями. Это типичное явление, сопровождающее бинаризацию полноцветных сканированных изображений.
Сразу приведем пример этого же фрагмента после морфологической обработки, получившей название "Скелетизация"
Сразу бросается в глаза, что линии стали толщиной в 1 пиксел. При этом они не стали слишком уж "зубчатыми", обнаруживается даже некоторая их гладкость. Даже самый простой векторизатор (не обладающий большим интеллектом) по таким линиям будет "ходить" легко.
Ну а на некоторых участках (при прохождении сложных перекрестков) потребуется вмешательство оператора - тоже обычное дело при векторизации.
Теперь остановимся на этапах и особенностях обработки.
Этап 1 - заливка дырок
Внутри контуров линий встречаются дырки. Их заливка поможет впоследствии получить более гладкие кривые. На рисунках ниже приведены примеры такой заливки.
===>
Заливка осуществляется с помощью морфологической операции "Hit or Miss" (в русском переводе - "Успех-Неудача").
Смысл этой операции заключается в следующем.
Предварительно созданная маска (или последовательно несколько масок) скользят по изображению.
Если в текущем положении все черные элементы маски, совпадают со значимыми пикселами изображения (черный цвет),
и все белые элементы маски, совпадают с пикселами фона (белый цвет),
то запоминаются координаты пиксела изображения, соответствующего текущему положению центра маски.
В дальнейшем запомненные координаты используются для присвоения пикселам изображения значения черного или белого цвета в зависимости от функции обработки.
В случае заливки, найденным пикселам присваивается значение черного цвета.
При этом используется 9 различных масок:
1-ая маска:
2-ая маска:
6-ая маска:
3,4,5 маски получаются из 2-ой путем последовательных поворотов на 90 град.
7,8,9 маски получаются из 6-ой путем последовательных поворотов на 90 град.
Этап 1 итерационный - итерации повторяются до тех пор, пока на очередной итерации находится и заливается хотя бы один пиксел.
Этап 2 - Утоньшение
Утоньшение также осуществляется с помощью операции "Hit or Miss". На рисунках ниже приведены результаты операции Утоньшения после первой итерации, и после нескольких итераций.
===>
Видно, что линии почти везде стали толщиной 1 пиксел, но все же наблюдаются недостатки: это раздвоения линий и наличие "сгустков" пикселов.
Исправлению этих недостатков посвящены следующие этапы.
Приведем состав масок, используемых при утоньшении (их всего 8):
1-ая маска:
5-ая маска:
2,3,4 маски получаются из 1-ой путем последовательных поворотов на 90 град.
6,7,8 маски получаются из 5-ой путем последовательных поворотов на 90 град.
Отметим, что элементы масок для операции "Hit or Miss" могут иметь 3 значения:
черные и белые значения участвуют в операции, серые - отбрасываются.
Этап 3 - Замыкание
Операцию "Замыкание" также называют "Закрытие" или "Closing". Она состоит из двух последовательных
операций: "Расширение" (дилатация) и "Сужение" (эрозия).
Ниже на рисунках приведены примеры прохождения операций "Расширение" и "Сужение".
===>
Смысл операции "Расширение" следующий: когда хотя бы одно значимое (черное) значение маски
совпадает со значимым (черным) значением изображения, то текущему элементу изображения
присваивается черный цвет.
В операции "Сужение" текущему элементу изображения присваивается черный цвет только тогда,
когда все значимые (черные) значения маски совпадают со значимыми (черными) значениями изображения.
Операции "Расширение" и "Сужение" не итерационные - выполняются только один раз.
В этих операциях используется одна очень простая маска:
Видно, что раздвоение линий исправлено, но толщина линий на исправленных участках
стала более одного пиксела. Понятно, что следует еще раз применить операцию "Утоньшения".
Этап 4 - Дополнительное утоньшение
После нескольких итераций получим следующую картину.
Раздвоение линий исправлено, осталось исправить "сгустки" пикселов.
Этап 5 - Удаление "сгустков"
На этом этапе также используется операция "Hit or Miss". Результат приведен ниже.
Видно, что "сгустков" больше нет.
Использовались следующие 12 масок:
1-ая маска:
5-ая маска:
9-ая маска:
Промежуточные маски как и раньше получаются из приведенных путем последовательных поворотов на 90 град.
Дополнительные этапы.
Основной результат достигнут, дальнейшие действия могут рассматриваться как дополнительные
и необязательные. Они нужны для того, чтобы несколько "почистить" полученное изображение и
избавить его от некоторых ненужных элементов с точки зрения дальнейшей работы автоматического
или полу-автоматического векторизатора.
Этап 6 - Удаление "хвостиков" (2-х пиксельных и однопиксельных)
Ниже на рисунке отмечены так называемые "хвостики", которые не несут никакой полезной информации.
Такие "хвосты" подлежат удалению.
Для удаления "хвостов" также используется операция "Hit or Miss". Результат показан ниже.
Маски для удаления 2-х пиксельных "хвостов" (всего 20 шт.):
1-ая маска:
5-ая маска:
9-ая маска:
13-ая маска:
17-ая маска:
Промежуточные маски получаются из приведенных путем последовательных поворотов на 90 град.
Маски для удаления одно-пиксельных "хвостов" (всего 28 шт.):
1-ая маска:
5-ая маска:
9-ая маска:
13-ая маска:
17-ая маска:
21-ая маска:
25-ая маска:
Промежуточные маски получаются из приведенных путем последовательных поворотов на 90 град.
Этап 7 - Удаление "шума" (одиночных и двойных пикселей)
На рисунке ниже отмечены "шумовые" пиксели, которые тоже можно удалить.
Результат удаления показан ниже.
На этом этапе также используется операция "Hit or Miss".
Для удаления двойных пикселей используется 4 маски:
1-ая маска:
3-ая маска:
Промежуточные маски получаются из приведенных путем поворотов на 90 град.
Для удаления одиночных пикселей используется одна маска:
Этап 8 - Удаление угловых пикселей
На рисунке ниже показаны пиксели, которые тоже можно безболезненно удалить, делая
линию более гладкой.
После выполнения данной операции получаем следующую картину:
На этом этапе также используется операция "Hit or Miss".
Для удаления угловых пикселей используется 4 маски:
1-ая маска:
Последующие маски получаются из предыдущих путем поворотов на 90 град.
На этом все этапы обработки заканчиваются.
Следует отметить, что обработка одного растрового файла размером около 6000х5000 пикселей
занимает 2-3 мин. процессорного времени (для процессоров с частотой 3 ГГц).