QGIS + v.generalize, проблемы при сглаживании полигонов
-
- Интересующийся
- Сообщения: 18
- Зарегистрирован: 01 фев 2015, 17:02
- Репутация: 0
QGIS + v.generalize, проблемы при сглаживании полигонов
Здравствуйте, собственно, было необходимо сгладить полигоны, полученные ранее векторизацией растра. В итоге большинство полигонов сгладилось, однако некоторые так и остались угловатыми. Сглаживание выполнялось командой v.generalize, алгоритм: snakes method for line smoothing. Отсюда вопрос: как сгладить абсолютно все полигоны? и как сгладить кольца внутри полигонов?
- Вложения
-
- EZzsF7hYjTo.jpg (40.06 КБ) 6081 просмотр
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: проблемы при сглаживании полигонов
Вообще, принято прямо указывать, в каком ПО вы работаете (причём с версией).
Модуль <v.generalize> был использован через QGIS или прямо в GRASS?
Какие значения параметров "alpha" и "beta" вы использовали для метода "snakes"?
Модуль делает проверку на нарушение топологии векторных объектов и, если есть риск таких нарушений, то в этом месте не сглаживается. Кстати, об этом должно было быть написано в "выхлопе" модуля.
Как вы видели, там есть несколько алгоритмов сглаживания кроме "snakes", причём для разных случаев и задач алгоритм подбирается часто чисто экспериментально. Важный параметр - порог (threshold), иногда для адекватного результата нужно упрощать и сглаживать последовательно несколько раз с увеличением порога.
P.S. Можете выложить кусок данных с вашей картинки в векторе?
Модуль <v.generalize> был использован через QGIS или прямо в GRASS?
Какие значения параметров "alpha" и "beta" вы использовали для метода "snakes"?
Модуль делает проверку на нарушение топологии векторных объектов и, если есть риск таких нарушений, то в этом месте не сглаживается. Кстати, об этом должно было быть написано в "выхлопе" модуля.
Как вы видели, там есть несколько алгоритмов сглаживания кроме "snakes", причём для разных случаев и задач алгоритм подбирается часто чисто экспериментально. Важный параметр - порог (threshold), иногда для адекватного результата нужно упрощать и сглаживать последовательно несколько раз с увеличением порога.
P.S. Можете выложить кусок данных с вашей картинки в векторе?
Редактор материалов, модератор форума
-
- Интересующийся
- Сообщения: 18
- Зарегистрирован: 01 фев 2015, 17:02
- Репутация: 0
Re: проблемы при сглаживании полигонов
QGIS 2.6.1.
Модуль использовался через QGIS, значения "alpha" и "beta" не менял, соответственно 1 и 1.
прикрепил архив с шейп-файлом.
Модуль использовался через QGIS, значения "alpha" и "beta" не менял, соответственно 1 и 1.
прикрепил архив с шейп-файлом.
- Вложения
-
HVOI.rar
- (49.02 КБ) 288 скачиваний
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: QGIS + v.generalize, проблемы при сглаживании полигонов
Поигрался с данными, вот результат в шейпе:
Использованные команды (при работе в "чистой" GRASS, не через QGIS):
Параметры генерализации можно менять по вкусу, но для таких полигонов лучше использовать только следующие методы: chaiken (самый простой и быстрый), hermite (быстрый, но результат "на любителя") или snakes (самый тормозной из 3-х алгоритмов). Остальные алгоритмы сглаживания для данного случая не очень подходят.
Кстати, можно ещё сначала упростить геометрию (через <v.clean> с опцией "prune" или через <v.generalize>, "douglas").
P.S. Планирую дописать черновик по генерализации векторов в GRASS, добавить туда вышеизложенное.
Вывод: с такими вот "зубчатыми" полигонами, полученными из растров, можно иногда бороться путём перегона их в полилинии, сглаживанием и затем конвертацией назад в полигоны. Использованные команды (при работе в "чистой" GRASS, не через QGIS):
Код: Выделить всё
v.type in=hvoi out=hvoi_lines type=boundary,line
v.category in=hvoi_lines out=hvoi_lines_cats
v.generalize -c in=hvoi_lines_cats out=hvoi_lines_cats_gener method=chaiken threshold=50
v.type in=hvoi_lines_cats_gener out=hvoi_lines_cats_gener_areas type=line,boundary
Кстати, можно ещё сначала упростить геометрию (через <v.clean> с опцией "prune" или через <v.generalize>, "douglas").
P.S. Планирую дописать черновик по генерализации векторов в GRASS, добавить туда вышеизложенное.
Редактор материалов, модератор форума
Кто сейчас на конференции
Сейчас этот форум просматривают: Ahrefs [Bot] и 2 гостя