04 lysenkov

27
Распознавание сгоревших территорий по космическим снимкам с помощью OpenCV Илья Лысенков Инженер по ПО, ЦКЗ Аргус Казань, май 2011 г.

Upload: simgislab

Post on 29-Nov-2014

359 views

Category:

Documents


1 download

DESCRIPTION

Presentation by Ilya Lysenkov at Fire workshop at Kazan State University, 27 May, 2011

TRANSCRIPT

Распознавание сгоревших

территорий по космическим

снимкам с помощью

OpenCV

Илья Лысенков

Инженер по ПО, ЦКЗ Аргус

Казань, май 2011 г.

http://www.topnews.in/law/files/forest-fires.jpg

Площади сгоревших

территорий

0

1

2

3

4

5

6

РФ, 2010 г.

Данные различных организаций (млн га)

МЧС Рослесхоз ИЛ СО РАН ИКИ РАН Гринпис

http://gis-lab.info/qa/fires-greenpeace.html

OpenCV

OpenCV – это:

• быстрая

• бесплатная

• кроссплатформенная

• многофункциональная

библиотека компьютерного зрения

http://opencv.willowgarage.com

OpenCV Overview:

General Image Processing Functions

Machine

Learning: • Detection,

• Recognition

Segmentation

Tracking

Matrix Math

Utilities and

Data Structures

Fitting

Image Pyramids

Camera

calibration,

Stereo, 3D

Transforms

Features

Geometric

descriptors

Robot support

opencv.willowgarage.com > 500 algorithms

5 Gary Bradski

Other Languages

OpenCV Conceptual Structure

Python

Java (TBD)

Machine learning

HighGUI

SSE TBB GPU MPU

Modules

CORE

imgproc

Object Detection

Features2d Calib3d Stereo

VO SLAM (TBD)

Stitching (TBD)

User Contrib

Operating system

C

C++

7

Сегментация: GrabCut

Images by Gary Bradski, © 2010

Детектирование лиц

Inpainting: восстановление

изображения

Сшивка изображений

CLASSIFICATION / REGRESSION

(new) Fast Approximate NN (FLANN)

(new) Extremely Random Trees

CART

Naïve Bayes

MLP (Back propagation)

Statistical Boosting, 4 flavors

Random Forests

SVM

Face Detector

(Histogram matching)

(Correlation)

CLUSTERING

K-Means

EM

(Mahalanobis distance)

TUNING/VALIDATION

Cross validation

Bootstrapping

Variable importance

Sampling methods

Machine Learning Library (MLL)

AACBAABBCBCC

AAA

AACACB CBABBC

CCB

B CC

ABBC CB

B C A BBC

C BB

11 11 http://opencv.willowgarage.com

Распознавание сгоревших

территорий 1. Импорт данных MODIS

2. Обучение классификатора

3. Классификация пикселей

4. Пост-обработка

5. Валидация

6. Визуализация

7. Результаты

Импорт данных: MOD09A1

Mat modisBand = imread("sur_refl_b01.tif",

CV_LOAD_IMAGE_UNCHANGED);

Импорт данных: MOD09A1

vector<Mat> allBands;

allBands.push_back(modisBand);

...

Mat data;

//объединяем все каналы в одну матрицу data

merge(allBands, data);

Импорт данных: MCD45A1

Mat date = imread(burnDateFilename,

CV_LOAD_IMAGE_UNCHANGED);

Mat unburned = (date == 0);

ushort initialDay = 153; //2 июня

ushort finalDay = 248; //5 сентября

Mat burned = (date >= initialDay) & (date <= finalDay);

Тренировка классификатора

Mat trainData = data.reshape(1, data.total());

Mat responses = burned.reshape(1, burned.total());

CvRTrees classifier;

classifier.train(trainData, CV_ROW_SAMPLE,

responses);

Классификация пикселей

int rowsCount = testData.rows;

Mat prediction = Mat(rowsCount, 1, CV_32SC1);

for(int i = 0; i < rowsCount; i++)

{

Mat sample = testData.row(i);

prediction.at<int>(i, 0) = classifier.predict(sample);

}

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

Пост-обработка

dilate(burnedArea, burnedArea, Mat(), Point(-1, -1), 5);

erode(burnedArea, burnedArea, Mat(), Point(-1, -1), 7);

dilate(burnedArea, burnedArea, Mat(), Point(-1, -1), 3);

После обработки

Валидация

Mat confusionMatrix(2, 2, CV_32SC1);

for(int i = 0; i < 2; i++)

{

for(int j = 0; j < 2; j++)

{

confusionMatrix.at<int>(i, j) =

countNonZero((groundTruth == i) & (prediction == j));

}

}

Визуализация

vector<vector<Point>> contours;

findContours(burnedArea, contours, CV_RETR_LIST,

CV_CHAIN_APPROX_NONE);

drawContours(trueColorImage, contours, -1, Scalar(0, 0, 255), 2);

namedWindow("burned area contours", CV_WINDOW_NORMAL);

imshow("burned area contours", trueColorImage);

waitKey();

Найденные контура

сгоревших территорий

Валидация

Матрица ошибок

Предсказанный класс территории

Несгоревшая Сгоревшая

Реальный класс

территории

Несгоревшая 120367 6443

Сгоревшая 172 3260

Время работы

Обучение:

0.85 секунды (54 000 пикселей)*

Классификация:

0.13 секунды (130 000 пикселей)*

*Intel Core i7 960 @ 3.20GHz с использованием одного потока

Заключение

Используя OpenCV, мы легко получили простой и быстрый алгоритм для

распознавания сгоревших территорий.

Ссылки и контакты

http://gis-lab.info/qa/burnedarea-opencv.html

[email protected]

http://itseez.com

http://opencv.willowgarage.com/