Использование консольного DTclassifier для классификации растровых данных и анализа изменений: различия между версиями

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 109: Строка 109:
Слои трениннгов состоят из двух шейп файлов (сut1.shp - рубки произошедшие за период наблюдения и nochange.shp - не изменившиеся территории). Треннинги находятся в отдельной дир-ии (trainings)
Слои трениннгов состоят из двух шейп файлов (сut1.shp - рубки произошедшие за период наблюдения и nochange.shp - не изменившиеся территории). Треннинги находятся в отдельной дир-ии (trainings)


Пример рубки (рисунок)
Пример рубки (рис.3)
 
[[Файл:DTconsol_pic3.jpg]]


Командная строка для классификации отдельного path/row:
Командная строка для классификации отдельного path/row:

Версия от 13:07, 3 августа 2016

Эта страница является черновиком статьи.


Описание и примеры использования консольной версии DTclassifier для классификации растровых данных.

DT classifier простой в использовании и эффективный плагин для классификации растровых изображений Декстопная версия расширения входит в дистрибутив QGIS-NextGIS[1]. Расширение использует метод деревьев решений реализованный на основе библиотеки OpenCV. Подробнее о работе расширения написано здесь [2].

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

Создано в Nextgis.png Веб ГИС для вашей организации по доступной цене

Получение и установка

Расширение доступно как в виде исходного кода C++, так и в бинарной форме.

Бинарная сборка

Для работы с программой в ОС Windows можно пойти двумя путями:

  • загрузить и установить NextGIS QGIS версии 15.4.88 или выше, DTClassifier включен в дистрибутив.

или

  • загрузить и установить QGIS версии 2.8 или выше (подробнее)
  • загрузить архив с расширением и необходимыми библиотеками
  • извлечь содержимое архива в каталог модулей QGIS (обычно это C:\OSGeo4W\apps\qgis-dev\plugins и C:\OSGeo4W\bin)


После установки, в окне OSGeo4W shell наряду с другими функциями (GDAL) и (OGR) появится функция classifier.

DTconsol pic1.jpg

Исходный код

Исходный код модуля (лицензия GNU GPL v2) можно получить через репозиторий на GitHub, или выполнив команду:

git clone git@github.com:nextgis/dtclassifier.git

Тестовые данные

Загрузить архив c данными, использовавшимися при подготовке статьи (... Мб).

Работа с расширением

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

DTconsol pic2.jpg

classifier.bat

- запуск расширения

--input_rasters

- пути к растровым данным (ВАЖНО! необходимо указывать полные пути к файлам) разделенные пробелом

--presence 

- полные пути к векторным слоям объектов содержащие признак который нужно выделить при анализе, разделенные пробелом. Например для природных экосистем: облака, водные объекты, рубки или пожары.

--absence

- полные пути к векторным слоям фоновых объектов , т.е. объектам от которых нужно отделить объекты содержащие признак.

--classify

путь для сохранения результата классификации

--save_points 

- сохраняет точки полученные из обучающих данных в виде шейп файла с атрибутивнлой таблицей значений растров

--save_model

- сохранить модель (дерево решений или модель random forest) в файл (.aml)

--use_model

- использовать существующую модель. При этом параметры --presence и --absence игнорируются. (ВАЖНО! количество и порядок каналов должен быть таким же как при создании модели, иначе результат будет некорректным)

--use_decision_tree

- использовать дерево решений (по умолчанию используется random forest)

--discrete_classes

- При использовании одиночного дерева (--use_decision_tree) становится что исходные данные будут трактоваться как набор дискретных величин (классов). Если флаг не установлен, то исходные данные трактуются как непрерывные (регрессионная модель).

--generalize

- размер окна для генерализации (kernel size). «Cглаживание» результатов классификации с настраиваемым размером окна. При включенном сглаживании будет создан не один, а два растра: классифицированный и сглаженный (имя содержит суффикс «_smooth»).

--load_points

- использовать существующие точки для создания модели и классификации!!! еще не реализовано..

Примеры использования

Классификация сцен Landsat в batch режиме на основе общего слоя тестовых объектов

Для выявления изменения лесного покрова в результате рубок в зимний период используется анализ изменений 2-х и более сцен Landsat. Если территория исследования занимает значительную площадь и включает в себя несколько path/row спутника, то удобнее использовать консольную версию для проведения классификации в batch режиме. В данном примере, сцены Landsat за период 2015-2016 гг. разбиты по директориям (data/<path/row>) и классификация проводится последовательно для каждого path/row. Слои трениннгов состоят из двух шейп файлов (сut1.shp - рубки произошедшие за период наблюдения и nochange.shp - не изменившиеся территории). Треннинги находятся в отдельной дир-ии (trainings)

Пример рубки (рис.3)

DTconsol pic3.jpg

Командная строка для классификации отдельного path/row:

classifier --presence d:\trainings\cut1.shp --absence d:\trainings\nochange.shp --input_rasters d:\data\113027\113027_16055.tif d:\data\113027\113027_15020.tif --save_points --save_model d:\data\113027\model.aml --classify d:\data\113027\113027_dtclass.tif --generalize 3

Результат (картинка)

Для обработки нескольких path/row можно создать .bat файл в ктоором последовательно записать командные строки для обработки всех директорий или cоздать скрипт (python):

Пример скрипта для обработки нескольких сцен

# -*- coding: UTF-8 -*-
import os
import glob

# path to data
datadir='d:\data'
# path to training
traindir='d:\\trainings'
# presence
presence=os.path.join(traindir,'cut1.shp')
# absence
absence=os.path.join(traindir,'nochange.shp')

for subdir, dirs, files in os.walk(datadir):
	scenes=glob.glob(os.path.join(subdir, '*.tif'))
	if scenes == []:
	   continue
	else:
	   scenes=' '.join(scenes)
	   output=os.path.join(subdir, 'out.tif')
	   # command DTclassifier
	   command= 'classifier --input_rasters %s --save_points --presence %s --absence %s --classify %s --generalize 3' % (scenes,presence,absence,output)
	   #run command
	   os.system(command)
}

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

(картинка)


Cоздание модели классификации на основе нескольких сцен и применение ее последовательно ко всем сценам