Классификация космического снимка с обучением с помощью QGIS и GRASS: различия между версиями

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
 
(не показано 27 промежуточных версий 3 участников)
Строка 1: Строка 1:
{{Статья|Черновик}}
{{Статья|Опубликована|grass-ismap}}


<p class="ann">В статье рассматривается алгоритм классификации с обучением в ГИС GRASS с использованием графического интерфейса QGIS (модуль GRASS) и командной строки GRASS.</p>
<p class="ann">В статье рассматривается алгоритм классификации с обучением в ГИС GRASS с использованием графического интерфейса QGIS (модуль GRASS) и командной строки GRASS.</p>


Начало работы с GRASS ГИС через командную строку и через собственный графический интерфейс рассмотрено в соответствующих статьях [1, 2]. В данной статье будет использована связка GRASS и QGIS которые интегрированы посредством модуля GRASS для QGIS.
Работа в GRASS ГИС возможна через [http://gis-lab.info/qa/grass-intro.html командную строку], через [http://gis-lab.info/qa/grass-intro-gui.html собственный графический интерфейс] или из внешних сред, таких как Python и R. В данной статье будет использован модуль GRASS для QGIS позволяющий одновременно задействовать аналитическую мощь GRASS, а также продвинутые возможности интерактивного редактирования и визуализации QGIS.
 
Особенностям различных алгоритмов классификации в GRASS будет посвящена [http://wiki.gis-lab.info/w/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%B8_%D0%BA%D0%BE%D1%81%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D1%81%D1%8A%D0%B5%D0%BC%D0%BA%D0%B8_%D0%B2_GRASS отдельная статья], а в вданной инструкции мы разберем по шагам алгоритм использования связки модулей [http://grass.osgeo.org/grass64/manuals/i.gensigset.html i.gensigset] и [http://grass.osgeo.org/grass64/manuals/i.smap.html i.smap].
 
Модуль [http://grass.osgeo.org/grass64/manuals/i.gensigset.html i.gensigset] рассчитывает сигнатуры с учетом спектральной яркости пикселей, а модуль [http://grass.osgeo.org/grass64/manuals/i.smap.html i.smap] производит сегментацию изображения с учетом того, что расположенные  рядом пиксели с большой степенью вероятности имеют один и тот же класс. В результате мы получаем классификацию с меньшим количеством шумов и большими однородными областями занятыми одним классом.
 
Алгоритм классификации с обучением включает следующие шаги:
 
*создание обучающего слоя
*импорт данных (исходного растра, обучающего слоя) в GRASS
*собственно классификация
*в качестве необязательных шагов могут быть выполнены фильтрация шумов классификации и векторизация.


Суть метода классификации с обучением (supervised classification) заключается в том, что пользователь сам определяет, какие пиксели с какими спектральными значениями попадут в тот или иной класс объектов. Это достигается путем создания набора эталонов – пространственных выделов (полигонов), для которых класс установлен на основе полевых исследований или по тематическим картам.


==Визуализация космического снимка==
==Визуализация космического снимка==
Строка 32: Строка 42:
# создадим новый район.
# создадим новый район.


'''ВАЖНО:''' Особо следует отметить, что проекция создаваемого района должна соответствовать проекции снимка и, соответственно, слоя эталонов. Охват района можно отредактировать позже.
<span style="color:red">'''ВАЖНО:'''</span> Особо следует отметить, что проекция создаваемого района должна соответствовать проекции снимка и, соответственно, слоя эталонов. Охват района можно отредактировать позже.


После появления сообщения об успешном создании нового набора, запустим инструменты GRASS (кнопка [[File:Кнопка1.PNG|22px]]).
После появления сообщения об успешном создании нового набора, запустим инструменты GRASS (кнопка [[File:Кнопка1.PNG|22px]]).
Строка 38: Строка 48:
===Импорт и настройка растра===
===Импорт и настройка растра===
В появившемся окне выбираем вкладку «Список модулей» и находим модуль '''in.gdal.qgis''' который импортирует в GRASS загруженные в проект QGIS растровые слои. Облегчить поиск среди множества модулей поможет фильтр: введем r.in – отобразятся различные инструменты для импорта растровых данных в GRASS.
В появившемся окне выбираем вкладку «Список модулей» и находим модуль '''in.gdal.qgis''' который импортирует в GRASS загруженные в проект QGIS растровые слои. Облегчить поиск среди множества модулей поможет фильтр: введем r.in – отобразятся различные инструменты для импорта растровых данных в GRASS.
[[File:Dialogovoe okno.PNG|400px|thumb|center|Рис. 3. Диалоговое окно выбора модулей GRASS]]


С помощью инструмента '''r.in.gdal.qgis''' можно импортировать в GRASS растр, который предстоит классифицировать.
С помощью инструмента '''r.in.gdal.qgis''' можно импортировать в GRASS растр, который предстоит классифицировать.
[[File:Dialogovoe okno.PNG|400px|thumb|center|Рис. 3. Диалоговое окно r.in.gdal.qgis]]


После импорта растра в GRASS он представляет собой отдельные слои: raster.1, raster.2, raster.3, в этом можно убедиться, посмотрев на хранящиеся в наборе GRASS растры на вкладке «браузер» инструментов GRASS.
[[File:Диалоговое окно r.in.gdal.qgis1.png|700px|thumb|center|Рис. 4. Диалоговое окно r.in.gdal.qgis]]
 
После импорта растра в GRASS он представляет собой отдельные слои: raster.1,raster.2,raster.3, в этом можно убедиться, посмотрев на хранящиеся в наборе GRASS растры на вкладке «браузер» инструментов GRASS.


Объединим эти слои в один многоканальный растр, для этого в окне инструментов GRASS выбрав вкладку «Дерево модулей» и запускаем командную строку GRASS «shell – Оболочка GRASS» и выполняем следующую команду:
Объединим эти слои в один многоканальный растр, для этого в окне инструментов GRASS выбрав вкладку «Дерево модулей» и запускаем командную строку GRASS «shell – Оболочка GRASS» и выполняем следующую команду:




<span style="background-color:Silver">i.group group=raster subgroup=raster input=raster.1,raster.2,raster.3, raster.4, raster.5, raster.6</span>
<pre>i.group group=raster subgroup=raster input=raster.1,raster.2,raster.3,raster.4,raster.5,raster.6</pre>




Данная команда группирует 6 каналов Landsat в группу и подгруппу под названием raster. (Подробнее в 6).
Данная команда с использованием модуля [http://grass.osgeo.org/grass64/manuals/i.group.html i.group] группирует 6 каналов Landsat в группу и подгруппу под названием raster.


Подгоняем регион GRASS к размерам одного из слоев импортированного растра и устанавливаем пространственное разрешение. Для этого выполним команду:
Подгоняем регион GRASS к размерам одного из слоев импортированного растра и устанавливаем пространственное разрешение. Для этого выполним команду:




<span style="background-color:Silver">g.region rast=raster.1=ryb</span>
<pre>g.region rast=raster.1</pre>
 


Данная операция необходима, чтобы выходной классифицированный растр имел тоже пространственное разрешение и тот же охват, что и исходный снимок. (Подробнее в 7). Посмотреть параметры региона (охват, проекцию, пространственное разрешение и т.д. можно с помощью команды:


Данная операция необходима, чтобы выходной классифицированный растр имел тоже пространственное разрешение и тот же охват, что и исходный снимок ([http://grass.osgeo.org/grass64/manuals/g.region.html подробнее о модуле g.region]). Посмотреть параметры региона (охват, проекцию, пространственное разрешение и т.д. можно с помощью команды:


<span style="background-color:Silver">g.region –p</span>


<pre>g.region –p</pre>


Флаг –p команды g.region выводит на экран параметры региона.
Примечание: Флаг –p команды g.region выводит на экран параметры региона.


===Импорт векторного слоя===
===Импорт векторного слоя===
Строка 72: Строка 84:




<span style="background-color:Silver">v.to.rast in=sig out=sig use=attr col=type_num</span>
<pre>v.to.rast in=sig out=sig use=attr col=type_num</pre>




расшифруем параметры команды v.to.rast:
расшифруем параметры команды v.to.rast:
* in = название исходного векторного слоя эталонов
* '''in''' = название исходного векторного слоя эталонов
* out = название растеризованного слоя эталонов
* '''out''' = название растеризованного слоя эталонов
* use = attr чтение значений из атрибутивной колонки исходного векторного слоя
* '''use''' = чтение значений из атрибутивной колонки '''attr''' исходного векторного слоя
* col = название колонки куда мы вносили численный код класса (type_num)(Подробнее в 8).
* '''col''' = название колонки куда мы вносили численный код класса (type_num)([http://grass.osgeo.org/grass64/manuals/v.to.rast.html подробнее о модуле v.to.rast]).


==Классификация космического снимка==
==Классификация космического снимка==
Классификация растров в GRASS состоит из 2-х этапов: расчета первичной статистики и собственно классификации.
Классификация растров в GRASS состоит из 2-х этапов: расчета первичной статистики и собственно классификации. Модуль [http://grass.osgeo.org/grass64/manuals/i.gensigset.html i.gensigset] производит расчет спектральной статистики по космическому снимку внутри эталонных полигонов, создавая так называемый файл сигнатур (положения классов в многомерном пространстве спектральных характеристик снимка) для классификации с использованием модуля [http://grass.osgeo.org/grass64/manuals/i.smap.html i.smap].


Для расчета первичной статистики выполним:
Для расчета первичной статистики выполним:


<pre>i.gensigset group=raster subgroup=raster sig=statistics training=sig maxsig=10</pre>


<span style="background-color:Silver">i.gensigset group=raster subgroup=raster sig=statistics training=sig</span>
Где:
 
* '''training''' — имя растрового обучающего слоя
 
* '''group''' — имя входной группы растров
Модуль <span style="background-color:Silver">i.gensigset</span> (Подробнее в 9) производит расчет спектральной статистики по космическому снимку внутри эталонных полигонов, создавая так называемый файл сигнатур (положения классов в многомерном пространстве спектральных характеристик снимка) для классификации с использованием модуля <span style="background-color:Silver">i.smap</span>.
* '''subgroup''' — имя входной подгруппы растров
 
* '''sig''' — имя выходного файла сигнатур
Теперь произведем собственно классификацию с обучением, результатом ее является растровый слой классификации «''classification''» (Подробнее в 10):
* '''maxsig''' — необязательный параметр, максимальное число субсигнатур для каждого класса (по умолчанию: 10). Увеличение количества субсигнатур позволяет в некоторых случаях повысить качество классификации: например когда внутри класса присутствует большой разброс значений спектральной яркости.




<span style="background-color:Silver">i.smap group=raster subgroup=raster sig=statistics out=classification</span>
Теперь произведем собственно классификацию с обучением, результатом ее является растровый слой классификации «''classification''»:


<pre>i.smap group=raster subgroup=raster sig=statistics blocksize=128 out=classification</pre>


Можно окрасить выходной классифицированный растр, например в цветовом диапазоне red-yellow-blue (Подробнее в статье 11):
''Примечание'': '''blocksize''' - дополнительный параметр, задающий размер блока матрицы для анализа смежных пикселей (по умолчанию: 128). Увеличения блока матрицы приводит к увеличению однородных (относящихся к одному классу) областей, но и, соответственно, к увеличению минимально картируемой единицы.


Можно окрасить выходной классифицированный растр, например в цветовом диапазоне red-yellow-blue с помощью модуля [http://grass.osgeo.org/grass64/manuals/r.colors.html r.colors]:


<span style="background-color:Silver">r.colors class1 color=ryb</span>
<pre>r.colors classification color=ryb</pre>


Загрузить классифицированный растр в проект QGIS можно с помощью кнопки [[File:Кнопка2.PNG|22px]]. При сравнении полученной первичной классификации со снимком мы можем найти места несоответствия классов классификации и ландшафтов. Эту проблему можно решить, увеличив количество эталонов для «проблемных» классов, размещая их в местах отнесенных не к тому классу. Можно задавать сколь угодно много эталонов для каждого класса объектов, увеличивая точность классификации до тех пор, пока ее точность не станет нас удовлетворять. Оценке точности классификации посвящена [http://gis-lab.info/qa/error-matrix.html отдельная статья].


Загрузить классифицированный растр в проект QGIS можно с помощью кнопки [[File:Кнопка2.PNG|22px]]. При сравнении полученной первичной классификации со снимком мы можем найти места несоответствия классов классификации и ландшафтов. Эту проблему можно решить, увеличив количество эталонов для «проблемных» классов, размещая их в местах отнесенных не к тому классу. Можно задавать сколь угодно много эталонов для каждого класса объектов, увеличивая точность классификации до тех пор, пока ее точность не станет нас удовлетворять. Оценке точности классификации посвящена отдельная статья [10].
[[File:Rezultat classifikacyi.PNG|700px|thumb|center|Рис. 5. Результат классификации]]
 
[[File:Rezultat classifikacyi.PNG|700px|thumb|center|Рис. 4. Результат классификации]]


==Постобработка классифицированного снимка==
==Постобработка классифицированного снимка==
Строка 114: Строка 128:




<span style="background-color:Silver">r.neighbors input=classification output=classification_mode7 method=mode size=7</span>
<pre>r.neighbors input=classification output=classification_mode7 method=mode size=7</pre>




Это модальный фильтр (method=mode) из набора фильтров модуля <span style="background-color:Silver">r.neighbors</span> с размером скользящего окна равным 7 пикселям (Подробнее в 11).
Это модальный фильтр (method=mode) из набора фильтров модуля [http://grass.osgeo.org/grass64/manuals/r.neighbors.html r.neighbors] с размером скользящего окна равным 7 пикселям.


[[File:Raschyot mody s oknom 1 piceley.PNG|700px|thumb|center|Рис.5. Результат расчета моды с окном в 7 пикселей]]
[[File:Raschyot mody s oknom 1 piceley.PNG|700px|thumb|center|Рис. 6. Результат расчета моды с окном в 7 пикселей]]


В заключение можно векторизовать отфильтрованный результат:
В заключение можно векторизовать отфильтрованный результат:




<span style="background-color:Silver">r.to.vect -s input=classification_mode7 output= classification_mode7 feature=area</span>
<pre>r.to.vect -s input=classification_mode7 output=classification_mode7 feature=area</pre>
 


Расшифруем использованные параметры для модуля [http://grass.osgeo.org/grass64/manuals/r.to.vect.html r.to.vect]:


расшифруем параметры команды <span style="background-color:Silver">r.to.vect</span>:<br />
*<code><nowiki></nowiki>-s</code> (smooth) флажок, сглаживающий ребра результирующих полигонов<br />
<span style="background-color:Silver">-s </span> (smooth) флажок, сглаживающий ребра результирующих полигонов<br />
*<code><nowiki></nowiki>input</code> - имя входного файла<br />
<span style="background-color:Silver">input</span> - имя входного файла<br />
*<code><nowiki></nowiki>output</code> - имя выходного файла<br />
<span style="background-color:Silver">output</span> - имя выходного файла<br />
*<code><nowiki></nowiki>feature=area</code> – определение типа выходного векторного слоя -полигон.
<span style="background-color:Silver">feature=area</span> – определение типа выходного векторного слоя -полигон.(Подробнее в 12).




[[File:Rezultat vectorizacyi.PNG|700px|thumb|center|Рис. 6. Результат векторизации классифицированного растра после применения модального фильтра]]
[[File:Rezultat vectorizacyi.PNG|700px|thumb|center|Рис. 7. Результат векторизации классифицированного растра после применения модального фильтра]]


==Экспорт результатов классификации из GRASS==
==Экспорт результатов классификации из GRASS==
Загрузить полученный векторизованный слой классификации из GRASS в QGIS можно с помощью кнопки  [[File:Кнопка4.PNG|22px]]. Далее, чтобы экспортировать слой из базы данных GRASS как шейп, в менеджере слоев правым щелчком мыши по загруженному в QGIS слою и выбираем пункт сохранить как шейп-файл. В разрабатываемой версии QGIS 1.9.0 master аналогичным образом можно сохранять и растровые слои.
Загрузить полученный векторизованный слой классификации из GRASS в QGIS можно с помощью кнопки  [[File:Кнопка4.PNG|22px]] панели инструментов GRASS. Далее, чтобы экспортировать слой из базы данных GRASS как шейп, в менеджере слоев, правым щелчком мыши щелкаем по загруженному в QGIS слою векторизованной классификации и выбираем пункт сохранить как шейп-файл. В разрабатываемой версии QGIS 1.9.0 master аналогичным образом можно сохранять и растровые слои.


Также для экспорта результатов можно воспользоваться стандартными модулями грасс: <span style="background-color:Silver">v.out.ogr</span> (для векторных слоев) и <span style="background-color:Silver">r.out.gdal</span> (для растров) которые можно использовать как из командной строки, так и через графический интерфейс модуля GRASS для QGIS.
Также для экспорта результатов можно воспользоваться стандартными модулями GRASS: [http://grass.osgeo.org/grass64/manuals/v.out.ogr.html v.out.ogr] (для векторных слоев) и [http://grass.osgeo.org/grass64/manuals/r.out.gdal.html r.out.gdal] (для растров) которые можно использовать как из командной строки, так и через графический интерфейс модуля GRASS для QGIS.


==Ссылки==
==Ссылки==
# Начало работы с GRASS для Windows используя командную строку [http://gis-lab.info/qa/grass-intro.html]
*[http://gis-lab.info/qa/grass-intro.html Начало работы с GRASS для Windows используя командную строку]
# Начало работы с GRASS через графический интерфейс wxPython [http://gis-lab.info/qa/grass-intro-gui.html]
*[http://gis-lab.info/qa/grass-intro-gui.html Начало работы с GRASS через графический интерфейс wxPython]
# Как собрать и показать снимок Landsat из отдельных каналов в QGIS [http://gis-lab.info/qa/qgis-landsat-merge.html]
*[http://grasswiki.osgeo.org/wiki/Image_classification GRASS-Wiki: Классификация изображений в GRASS]
# Интерпретация комбинаций каналов данных Landsat TM / ETM+ [http://gis-lab.info/qa/landsat-bandcomb.html]
*[http://gis-lab.info/qa/qgis-landsat-merge.html Как собрать и показать снимок Landsat из отдельных каналов в QGIS]
# Создание и редактирование векторных слоев средствами QGIS [http://gis-lab.info/qa/qgis-vector.html]
*[http://gis-lab.info/qa/landsat-bandcomb.html Интерпретация комбинаций каналов данных Landsat TM / ETM+]
# i.group - модуль Грасс для создания и редактирования групп и подгрупп растровых слоев [http://grass.osgeo.org/grass64/manuals/i.group.html]
*[http://gis-lab.info/qa/qgis-vector.html Создание и редактирование векторных слоев средствами QGIS]
# g.region - модуль Грасс для управления параметрами региона (охват, пространственное разрешение и т.д.) [http://grass.osgeo.org/grass64/manuals/g.region.html]
*[http://gis-lab.info/qa/error-matrix.html Матрица ошибок и расчет показателей точности тематических карт]
# v.to.rast region - модуль Грасс для растеризации векторных слоев [http://grass.osgeo.org/grass64/manuals/v.to.rast.html]
# i.gensigset - модуль Грасс для расчета статистики по растру [http://grass.osgeo.org/grass64/manuals/i.gensigset.html]
# Матрица ошибок и расчет показателей точности тематических карт [http://gis-lab.info/qa/error-matrix.html]
# r.neighbors - набор фильтров скользящего окна для Грасс [http://grass.osgeo.org/grass64/manuals/r.neighbors.html]
# r.to.vect модуль Грасс для преобразования растровых данных в векторные [http://grass.osgeo.org/grass64/manuals/r.to.vect.html]

Текущая версия от 14:36, 17 ноября 2013

Эта страница опубликована в основном списке статей сайта
по адресу http://gis-lab.info/qa/grass-ismap.html


В статье рассматривается алгоритм классификации с обучением в ГИС GRASS с использованием графического интерфейса QGIS (модуль GRASS) и командной строки GRASS.

Работа в GRASS ГИС возможна через командную строку, через собственный графический интерфейс или из внешних сред, таких как Python и R. В данной статье будет использован модуль GRASS для QGIS позволяющий одновременно задействовать аналитическую мощь GRASS, а также продвинутые возможности интерактивного редактирования и визуализации QGIS.

Особенностям различных алгоритмов классификации в GRASS будет посвящена отдельная статья, а в вданной инструкции мы разберем по шагам алгоритм использования связки модулей i.gensigset и i.smap.

Модуль i.gensigset рассчитывает сигнатуры с учетом спектральной яркости пикселей, а модуль i.smap производит сегментацию изображения с учетом того, что расположенные рядом пиксели с большой степенью вероятности имеют один и тот же класс. В результате мы получаем классификацию с меньшим количеством шумов и большими однородными областями занятыми одним классом.

Алгоритм классификации с обучением включает следующие шаги:

  • создание обучающего слоя
  • импорт данных (исходного растра, обучающего слоя) в GRASS
  • собственно классификация
  • в качестве необязательных шагов могут быть выполнены фильтрация шумов классификации и векторизация.


Визуализация космического снимка

Рассмотрим алгоритм управляемой классификации на примере космического снимка Landsat-5 окрестностей города Ханты-Мансийска (рис. 1). На первом шаге необходимо визуализировать космический снимок таким образом, чтобы хорошо различались объекты, которые мы хотим классифицировать. Для сборки и визуализации космического снимка можно использовать инструментарий QGIS (подробнее о сборке снимков в QGIS). В случае классификации растительного покрова, лучше использовать инфракрасный диапазон, например, для Landsat часто используют сочетание 4, 5 и 3- го каналов (подробнее о комбинациях каналов Landsat). Для классификации мы будем использовать все слои Landsat, кроме термального (т.е. 1, 2, 3, 4, 5 и 7).

Рис. 1. Окрестности г. Ханты-Мансийска. Съемка Landsat-5 за 23 июля 2007 года, комбинация каналов 4-5-3

Создание слоя эталонов

В QGIS создадим новый полигональный слой с именем signature. В данном слое необходимо создать целочисленную атрибутивную колонку, в нашем случае, это будет колонка type_num, в которую мы будем записывать численный код класса объектов (Подробнее о создании и редактировании векторных слоев в QGIS).

ВАЖНО: создаваемый слой должен быть в той же проекции, что и снимок.

Отредактируем слой эталонов, оцифровывая полигоны в центре характерных выделов. При оцифровке следует придерживаться двух правил:

  • Правило 1. Оцифровываемый полигон по возможности должен захватывать только пикселы относящиеся к одному классу. Если вы оцифровываете эталонный полигон для леса, то в него не должно входить посторонних пикселов, не относящихся к лесу.
  • Правило 2. Задавайте полигоны как можно большей площади, чтобы охватить как можно больше вариаций в пределах одного класса, не забывая при этом про Правило 1.
Рис. 2. Пример оцифровки эталонов с заполнением атрибутивной таблицы

Импорт данных в модуль GRASS

Для импорта данных необходимо создать новый набор данных GRASS, сделаем это с помощью графического интерфейса модуля GRASS для QGIS:

  1. создадим новый набор GRASS с помощью кнопки Кнопка11.PNG на панели инструментов модуля GRASS.
  2. создадим новый район.
  3. зададим району проекцию, соответствующую проекции снимка.
  4. создадим новый район.

ВАЖНО: Особо следует отметить, что проекция создаваемого района должна соответствовать проекции снимка и, соответственно, слоя эталонов. Охват района можно отредактировать позже.

После появления сообщения об успешном создании нового набора, запустим инструменты GRASS (кнопка Кнопка1.PNG).

Импорт и настройка растра

В появившемся окне выбираем вкладку «Список модулей» и находим модуль in.gdal.qgis который импортирует в GRASS загруженные в проект QGIS растровые слои. Облегчить поиск среди множества модулей поможет фильтр: введем r.in – отобразятся различные инструменты для импорта растровых данных в GRASS.

Рис. 3. Диалоговое окно выбора модулей GRASS

С помощью инструмента r.in.gdal.qgis можно импортировать в GRASS растр, который предстоит классифицировать.

Рис. 4. Диалоговое окно r.in.gdal.qgis

После импорта растра в GRASS он представляет собой отдельные слои: raster.1,raster.2,raster.3, в этом можно убедиться, посмотрев на хранящиеся в наборе GRASS растры на вкладке «браузер» инструментов GRASS.

Объединим эти слои в один многоканальный растр, для этого в окне инструментов GRASS выбрав вкладку «Дерево модулей» и запускаем командную строку GRASS «shell – Оболочка GRASS» и выполняем следующую команду:


i.group group=raster subgroup=raster input=raster.1,raster.2,raster.3,raster.4,raster.5,raster.6


Данная команда с использованием модуля i.group группирует 6 каналов Landsat в группу и подгруппу под названием raster.

Подгоняем регион GRASS к размерам одного из слоев импортированного растра и устанавливаем пространственное разрешение. Для этого выполним команду:


g.region rast=raster.1


Данная операция необходима, чтобы выходной классифицированный растр имел тоже пространственное разрешение и тот же охват, что и исходный снимок (подробнее о модуле g.region). Посмотреть параметры региона (охват, проекцию, пространственное разрешение и т.д. можно с помощью команды:


g.region –p

Примечание: Флаг –p команды g.region выводит на экран параметры региона.

Импорт векторного слоя

С помощью инструмента v.in.ogr.qgis из списка модулей инструментов GRASS импортируем слой эталонов с заданным именем, например sig.

Для работы со слоем эталонов в GRASS его необходимо преобразовать в растровый вид, для этого в командной строке GRASS выполним:


v.to.rast in=sig out=sig use=attr col=type_num


расшифруем параметры команды v.to.rast:

  • in = название исходного векторного слоя эталонов
  • out = название растеризованного слоя эталонов
  • use = чтение значений из атрибутивной колонки attr исходного векторного слоя
  • col = название колонки куда мы вносили численный код класса (type_num)(подробнее о модуле v.to.rast).

Классификация космического снимка

Классификация растров в GRASS состоит из 2-х этапов: расчета первичной статистики и собственно классификации. Модуль i.gensigset производит расчет спектральной статистики по космическому снимку внутри эталонных полигонов, создавая так называемый файл сигнатур (положения классов в многомерном пространстве спектральных характеристик снимка) для классификации с использованием модуля i.smap.

Для расчета первичной статистики выполним:

i.gensigset group=raster subgroup=raster sig=statistics training=sig maxsig=10

Где:

  • training — имя растрового обучающего слоя
  • group — имя входной группы растров
  • subgroup — имя входной подгруппы растров
  • sig — имя выходного файла сигнатур
  • maxsig — необязательный параметр, максимальное число субсигнатур для каждого класса (по умолчанию: 10). Увеличение количества субсигнатур позволяет в некоторых случаях повысить качество классификации: например когда внутри класса присутствует большой разброс значений спектральной яркости.


Теперь произведем собственно классификацию с обучением, результатом ее является растровый слой классификации «classification»:

i.smap group=raster subgroup=raster sig=statistics blocksize=128 out=classification

Примечание: blocksize - дополнительный параметр, задающий размер блока матрицы для анализа смежных пикселей (по умолчанию: 128). Увеличения блока матрицы приводит к увеличению однородных (относящихся к одному классу) областей, но и, соответственно, к увеличению минимально картируемой единицы.

Можно окрасить выходной классифицированный растр, например в цветовом диапазоне red-yellow-blue с помощью модуля r.colors:

r.colors classification color=ryb

Загрузить классифицированный растр в проект QGIS можно с помощью кнопки Кнопка2.PNG. При сравнении полученной первичной классификации со снимком мы можем найти места несоответствия классов классификации и ландшафтов. Эту проблему можно решить, увеличив количество эталонов для «проблемных» классов, размещая их в местах отнесенных не к тому классу. Можно задавать сколь угодно много эталонов для каждого класса объектов, увеличивая точность классификации до тех пор, пока ее точность не станет нас удовлетворять. Оценке точности классификации посвящена отдельная статья.

Рис. 5. Результат классификации

Постобработка классифицированного снимка

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

Для фильтрации шумов выполним:


r.neighbors input=classification output=classification_mode7 method=mode size=7


Это модальный фильтр (method=mode) из набора фильтров модуля r.neighbors с размером скользящего окна равным 7 пикселям.

Рис. 6. Результат расчета моды с окном в 7 пикселей

В заключение можно векторизовать отфильтрованный результат:


r.to.vect -s input=classification_mode7 output=classification_mode7 feature=area


Расшифруем использованные параметры для модуля r.to.vect:

  • -s (smooth) флажок, сглаживающий ребра результирующих полигонов
  • input - имя входного файла
  • output - имя выходного файла
  • feature=area – определение типа выходного векторного слоя -полигон.


Рис. 7. Результат векторизации классифицированного растра после применения модального фильтра

Экспорт результатов классификации из GRASS

Загрузить полученный векторизованный слой классификации из GRASS в QGIS можно с помощью кнопки Кнопка4.PNG панели инструментов GRASS. Далее, чтобы экспортировать слой из базы данных GRASS как шейп, в менеджере слоев, правым щелчком мыши щелкаем по загруженному в QGIS слою векторизованной классификации и выбираем пункт сохранить как шейп-файл. В разрабатываемой версии QGIS 1.9.0 master аналогичным образом можно сохранять и растровые слои.

Также для экспорта результатов можно воспользоваться стандартными модулями GRASS: v.out.ogr (для векторных слоев) и r.out.gdal (для растров) которые можно использовать как из командной строки, так и через графический интерфейс модуля GRASS для QGIS.

Ссылки