|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Victor A. Pavlov 2:5025/81 23 Jul 2002 18:54:26 To : Evgen Kondratyuk Subject : Need Help -> Векторизация --------------------------------------------------------------------------------
Как то раз (Пон Июл 22 2002 20:54) Evgen Kondratyuk написал письмо All:
EK> Такая задачка.___________________________________________
EK> Входные данные: БМП файл с фигурами(триугольник, квадрат и т.д.).
EK> Требуется: Векторизировать файл, тоесть определить линии (начало и конец
EK> линии) и сложить из линий объекты. Вывести в текстовый файл названия
EK> объектов и координаты составляющих их линий.
Обработка производится в несколько этапов:
1. Бинеаризация.
Здесь мы приводим полутоновое изображение к двууровневому виду (двум цветам).
Если необходима векторизация разноцветных фигур по-отдельности, делаем
многоуровневую сегментацию - приведение к ограниченному числу цветов, а далее
для каждого цвета (кроме цвета фона) формируем отдельное двухцветное
изображение, сводя задачу к предыдущей.
Алгоритмы бинеаризации довольно хорошо проработаны и выбрать подходящий для
конкретного случая не составляет труда.
2. Выделение границ (edge detect).
Если изображение представлено, в основном, сплошными закрашенными фигурами,
необходим этап выделения границ. Он состоит в обходе всех границ раздела цветов
и создании результирующего изображения, в котором закрашены только пикселы,
соответствующие границам.
Если же изображение состоит из тонких линий (вроде чертежа), данный этап не
требуется.
3. Скелетизация (thinning).
Hа данном этапе все линии на изображении приводятся к толщине в 1 пиксел.
Имеется несколько алгоритмов скелетизации, например, Zhang-Suen. Если нужен
пример в исходниках - могу выслать.
4. Трассировка однопиксельных линий.
Отслеживаем полученные в результате скелетизации однопиксельные линии, идя
вдоль них и записывая подряд каждую точку. Анализируем разветвления, либо
зацикливания линий. Получаем "сырое" векторное описание.
Можно просто тупо соединить любые две закрашенные соседние точки векторами, а
затем в несколько проходов разрывать по определенным правилам циклы
(треугольники), размером в 1 пиксел, пока подобных циклов-артефактов не
останется. Можно также восстанавливать разрывы линий в 1-2 пиксела, для
коррекции ошибок сканирования/бинеаризации.
5. Сглаживание линий.
Сглаживаем полученные на предыдущем этапе попиксельные ломаные любыми
нравящимися нам кривыми (отрезки прямых, дуги окружностей, сплайны и т.п.) и
получаем результирующее векторное описание.
Всего хорошего - Victor
--- GoldED/W32 3.0.1
* Origin: Red Station, Voronezh, Russia (2:5025/81)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/18393d3dad4c.html, оценка из 5, голосов 10
|