![]() |
|
|
![]()
|
|
| Dmitrii |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 27.7.2010 Репутация: нет Всего: нет |
Чтобы произвести скелетизацию сохраняя кроме координат информацию о цвете и толщине, надо скелетизировать не бинаризированное и не "утоньченное" растровое изображение, какой алгоритм для этого использовать, ведь волновой подходит как я понимаю только для бинаризированного изображения.
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 7 Всего: 183 |
1) Я бы разделила растр по цветам (на несколько цветовых слоев) и векторизовала отдельно каждый слой - вот тебе информация о цвете. Строго говоря, их можно и обрабатывать отдельно, а объединить данные (если надо) только на последнем этапе.
2) Для сохранения информации о толщине я делаю утоньшение с помощью Distance Transform - это такое преобразование, которое каждой белой точке бинарного растра приписывает некоторое эффективное расстояние до края, а потом прослеживаются "хребты". Утоньшенный растр делаю не черно-белым а серым, с этой приведенной толщиной в каждой точке. И дальше волновой алгоритм имеет информацию о толщине в каждой точке. Конечно, это только варианты, могут быть и другие методы. Кстати, волновой алгоритм можно напустить на любое изображение, там ведь просто надо определить функцию NonZeroPixel, а уж как ты будешь определять пиксел или не пиксел - дело двадцать пятое. -------------------- ... |
|||
|
||||
| Dmitrii |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 27.7.2010 Репутация: нет Всего: нет |
Как же это вся математика тяжела, когда приходится в ней копаться самому
Никак не могу разобраться как дистанс трансформ является алгоритмом утоньшения, глядя на примеры в википедии и на других сайтах. Где из обычного бинарного изображения получается черно-серый монстр, где почти ничего не видно. К сожалению, этот путь, скорее всего, не для меня) Буду думать как найти нижнюю и левую крайнии линии, а там уже работать непосредственно с областью, где лежит график. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 7 Всего: 183 |
DT не фвляется сам по себе алгоритмом утоньшения, это предварительный этап. Это преобразование как бы делает растр "трехмерным". А вторым этапом нужно проследить хребты. Я уже не помню алгоритм, но вот тебе статья, по которой я его когда-то делала. Насколько я помню, там не все абсолютно прозрачно (как и в любых научных статьях), кое-что надо додумывать.
Но вроде не очень сложно. Я изменила там 2 вещи: во-первых, утоньшенный растр делаю не бинарным, а 256-цветным (чтобы сохранить цвет, т.е. толщину). во-вторых, там где исходная линия имеет четную толщину, оставляю 2 пиксела, а не один . У авторов там, насколько помню, довольно мутные рассуждениыя насчет того, какой пиксел из 2 выбрать, но я это все пропустила, т.к. меня интересовали довольно тонкие линии, причем нужно было, чтобы векторизованная линия лежала точно по центру, а если оставлять один из пары пикселов, линия заметно съезжает. Кроме того, я потом использовала волновой алгоритм для построения вектора; это немножко из пушки по воробьям (для работы с утоньшенным растром можно было бы чего попроще нарисовать), но во-первых, у меня уже было большой опыт работы с волновым алгоритмом, а во-вторых, ему по фигу, один там пиксел или 2, он прекрасно строит центры. Что касается "ничего не видно" - это вопрос выбора палитры. Конечно, если ты будешь использовать чистые расстояния для интенсивности серого, то ничего не разглядишь. С другой стороны, а надо ли - видеть должен компьютер, а он разницу между RGB(1,1,1) и RGB(2,2,2) прекрасно видит. Но если хочешь посмотреть - задай палитру поярче. И еще, я первое время экспериментировала с различными метриками (при построении DT). И пришла к выводу, что для векторизации линейчатых растров ощутимой разницы нет, так что не парься, бери любую. Присоединённый файл ( Кол-во скачиваний: 5 )
Skeletons_based_on_DT.rar 154,08 Kb-------------------- ... |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |