Определение границ растрового изображения

Вопросы по нескольким пакетам сразу, или вопросы, которые непонятно к какой ГИС отнести
Ответить
Dorofeev
Активный участник
Сообщения: 194
Зарегистрирован: 08 фев 2007, 23:29
Репутация: 1
Откуда: Симферополь
Контактная информация:

Определение границ растрового изображения

Сообщение Dorofeev » 18 июл 2011, 15:43

Помогите решить задачу массовой обрезки растров. Нужно в пакетном режиме определить границы занятые "значимыми" пикселями в растровоом изображении и сохранить их в shapefile. Причем чтобы в качестве Nodata, можно было задавать диапазон значений.
Какой софт можно применить?

Григорий Степанов
Easy Trace – эксперт
Сообщения: 329
Зарегистрирован: 03 сен 2009, 11:13
Репутация: 64
Откуда: Россия, г.Рязань
Контактная информация:

Re: Определение границ растрового изображения

Сообщение Григорий Степанов » 18 июл 2011, 16:11

Можно увидеть пример растра с нанесёнными векторными контурами?

Dorofeev
Активный участник
Сообщения: 194
Зарегистрирован: 08 фев 2007, 23:29
Репутация: 1
Откуда: Симферополь
Контактная информация:

Re: Определение границ растрового изображения

Сообщение Dorofeev » 18 июл 2011, 16:27

Ну как-то так
Вложения
map.jpg
map.jpg (76.35 КБ) 8652 просмотра

Григорий Степанов
Easy Trace – эксперт
Сообщения: 329
Зарегистрирован: 03 сен 2009, 11:13
Репутация: 64
Откуда: Россия, г.Рязань
Контактная информация:

Re: Определение границ растрового изображения

Сообщение Григорий Степанов » 18 июл 2011, 16:52

То есть в примере черный и белый цвета относятся к незначимым (NODATA) пикселам? И это действительно чистые цвета или как в примере диапазоны оттенков близких к белому и чёрному цветам?

Dorofeev
Активный участник
Сообщения: 194
Зарегистрирован: 08 фев 2007, 23:29
Репутация: 1
Откуда: Симферополь
Контактная информация:

Re: Определение границ растрового изображения

Сообщение Dorofeev » 19 июл 2011, 08:56

Да, черное и белое - это разные NoData, цвета могут быть не чистые, возможны небольшие отклонения, особенно в JPG

Григорий Степанов
Easy Trace – эксперт
Сообщения: 329
Зарегистрирован: 03 сен 2009, 11:13
Репутация: 64
Откуда: Россия, г.Рязань
Контактная информация:

Re: Определение границ растрового изображения

Сообщение Григорий Степанов » 19 июл 2011, 10:04

Собственно, основная проблема, как раз и лежит в "не чистоте" цветов в областях NoData. Судя по всему, эти области изначально состояли из чистых цветов, однако, алгоритмы сжатия с потерями, используемые в JPEG породили целый спектр оттенков цвета на границах чёрных и белых областей. Причём, многие из этих оттенков присутствуют и в самом информативном изображении.

Что самое неприятное, оттенки цвета в пограничных областях вряд ли удастся уложить в какие либо диапазоны. Комбинационные цвета, возникающие на границах областей NoData зависят от смежного информативного изображения. А оно, может быть каким угодно...

Я не специалист в обработке снимков, но первое что приходит в голову это:

1. выделение полигональных областей подбором порогов яркостей сверху и снизу;
2. оконтуривание выделенных областей;
3. отсев полученных полигонов по критерию площади;
4. линеаризация контуров (так как изначально, все отрезки границ это прямые линии).

К сожалению, я не могу предложить механизма для пакетного выполнения этих операций в нашем пакете, а интерактивная обработка займёт время сопоставимое с ручной оцифровкой границ.

P.S. Как всегда, экономия на объёмах растровых файлов (JPEG!!!), неизбежно выливается в значительные потери времени при их обработке...

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: Определение границ растрового изображения

Сообщение Александр Мурый » 20 июл 2011, 13:51

Поигрался с картинкой в GRASS (импорт *jpg--> композит RGB (8 уровней) --> задаем NULL по выбранным значениям растра --> разделяем растр на 2 категории (NULL и не-NULL) --> вытаскиваем границы не-NULL растра в вектор --> удаляем автоматом весь мусор, оставляем единственную нужную границу.
Дальше можно вынуть в SHP.

Результат: (слева -- не-NULL растр, справа -- вект. полигон)
map_bounds.png
map_bounds.png (131.52 КБ) 8531 просмотр
Позже распишу модули / команды, если интересно. Просьба выложить какой-нибудь "рабочий" растр с привязкой (или хотя бы кусок).

P.S. Да, по идее, все это можно делать автоматом (надо писать спец. скрипт). Но только в случае, если у растров надо "занулить" одни и те же значения.
Редактор материалов, модератор форума

Григорий Степанов
Easy Trace – эксперт
Сообщения: 329
Зарегистрирован: 03 сен 2009, 11:13
Репутация: 64
Откуда: Россия, г.Рязань
Контактная информация:

Re: Определение границ растрового изображения

Сообщение Григорий Степанов » 20 июл 2011, 15:08

1) Отсечение по яркости. Инструмент Выделение тематических слоёв
Изображение
2) Преобразование к ч.б. Инструмент Бинаризация
Изображение
3) Оконтуривание Утилита Автоматическое оконтуривание
(если указать "Сохранять контура = Только внешние", то можно не указывать размеры минимальных контуров)
Изображение
4) Оптмизация контура Утилита Оптимизация формы линий
Изображение

Время - 1 мин 40 сек

P.S. Но руками построить контур ещё быстрее...

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: Определение границ растрового изображения

Сообщение Александр Мурый » 20 июл 2011, 15:30

ET, как всегда, хорош, но не "скриптабелен" (понимаю, что такова специфика...)
Вообще первая мысль у меня была насчет ImageMagick ("обрезание" ненужных пикселей) + GDAL (векторизация в gdal_polygonize), но как-то не вышло.
Редактор материалов, модератор форума

Ответить

Вернуться в «Общий - ПО»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость