<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.gis-lab.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SSSRebelious</id>
	<title>GIS-Lab - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.gis-lab.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SSSRebelious"/>
	<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/w/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/SSSRebelious"/>
	<updated>2026-04-29T18:00:19Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21884</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21884"/>
		<updated>2015-04-19T08:07:10Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Результаты и обсуждение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую, привязку в ''R'' есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster'']. На основании функций, доступных в этом пакете мы и разработаем наш скрипт. В использовании он будет чрезвычайно прост:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(raster)&lt;br /&gt;
&lt;br /&gt;
pan &amp;lt;- raster('pan.tif') # загружаем панхроматический растр&lt;br /&gt;
multi &amp;lt;- brick('multi.tif') # загружаем мультиспектральный растр&lt;br /&gt;
pansharp &amp;lt;- processingPansharp(pan, multi) # производим паншарпенинг (эту функцию мы создадим)&lt;br /&gt;
output_path &amp;lt;- 'путь_и_имя_файла_без_расширения' # зададим путь для сохранения результата&lt;br /&gt;
saveResult(pansharp, output_path) # сохраним результат, используя минимум параметров при помощи функции-обёртки&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начнём создавать необходимые функции. Первая функция - самая простая. Она всего-лишь реализовывает формулу, представленную выше.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
pansharpFun &amp;lt;- function(raster){&lt;br /&gt;
    ' Эта функция производит паншарпенинг  ' &lt;br /&gt;
    # @param raster - объект класса Raster с тремя каналами: 1)с низким разрешением, 2) с высоким разрешением, 3) низкочастотная компонента растра с высоким разрешением&lt;br /&gt;
    # @return pansharpened_raster - подвергшийся паншарпенингу  объект класса Raster&lt;br /&gt;
    # pansharp = Lowres * Highres / LPF[Highres]&lt;br /&gt;
     &lt;br /&gt;
    pansharpened_raster &amp;lt;- (raster[,1] * raster[,2]) / raster[,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вторая функция будет выделять низкочастотную составляющую растра с высоким разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
extractLPF &amp;lt;- function(pan, multi, filter = 'auto', fun = mean) {&lt;br /&gt;
    ' Возвращает низкочастотную компоненту растра с высоким разрешением &lt;br /&gt;
        с использованием скользящего окна, соответствующего размеру пикселя растра с низким разрешением '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект класса Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, который в последствии будет подвергнут паншарпенингу, объект класса Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект класса матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return LPF - низкочатотная компонента растра с высоким разрешением, объект класса Raster&lt;br /&gt;
     &lt;br /&gt;
    # Расчитаем размер скользящего окна, если его параметры не заданы&lt;br /&gt;
    if (filter == 'auto') {&lt;br /&gt;
        pan_res &amp;lt;- res(pan) # (x, y) пространственное разрешение растра с высоким разрешением в единицах CRS&lt;br /&gt;
        multi_res &amp;lt;- res(multi) # (x, y) пространственное разрешение растра с низким разрешением в единицах CRS&lt;br /&gt;
        x_res_ratio &amp;lt;- round(multi_res[1]/pan_res[1])&lt;br /&gt;
        y_res_ratio &amp;lt;- round(multi_res[2]/pan_res[2])&lt;br /&gt;
        total &amp;lt;- x_res_ratio + y_res_ratio&lt;br /&gt;
        filter &amp;lt;- matrix(1, nc = x_res_ratio, nr = y_res_ratio)&lt;br /&gt;
        }&lt;br /&gt;
         &lt;br /&gt;
        # Убедимся, что у скользящего окна нечётное количество столбцов и строк (требование функции focal() )&lt;br /&gt;
        if (nrow(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- rbind(filter, 0)&lt;br /&gt;
        } &lt;br /&gt;
        if (ncol(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- cbind(filter, 0)&lt;br /&gt;
       &lt;br /&gt;
         &lt;br /&gt;
    LPF &amp;lt;- focal(pan, w = filter, fun = fun) # получаем низкочастотную компоненту при помощи функции focal() пакета 'raster'&lt;br /&gt;
     &lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Обратите внимание, что мы оставили возможность задавать пользовательские значения для параметров ''filter'' и ''fun'', что оставляет простор для возможных экспериментов.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим функцию, объединяющую две предыдущие и выдающую растр с улучшенным разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
processingPansharp &amp;lt;- function(pan, multi, filter = 'auto', fun = mean){&lt;br /&gt;
    ' Улучшает разрешение мультиспектрального растра за счёт панхроматического растра '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект класса Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, чьё разрешение необходимо улучшить, объект класса Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект класса матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return pansharp - растер 'multi' с улучшенным разрешением, объект класса Raster&lt;br /&gt;
 &lt;br /&gt;
    LPF &amp;lt;- extractLPF(pan, multi, filter, fun)&lt;br /&gt;
         &lt;br /&gt;
    multi &amp;lt;- resample(multi, pan) # приводим экстент и разрешение мультиспектрального растра к панхроматическому&lt;br /&gt;
         &lt;br /&gt;
    all &amp;lt;- stack(multi, pan, LPF)&lt;br /&gt;
     &lt;br /&gt;
    bands &amp;lt;- nbands(multi)&lt;br /&gt;
    pan_band &amp;lt;- bands + 1&lt;br /&gt;
    lpf_band &amp;lt;- bands + 2&lt;br /&gt;
     &lt;br /&gt;
    # Производим паншарпенинг каналов мультиспектрального растра по очереди&lt;br /&gt;
    pansharp_bands &amp;lt;- list()&lt;br /&gt;
    for (band in 1:bands) {&lt;br /&gt;
        subset &amp;lt;- all[[c(band, pan_band, lpf_band)]]&lt;br /&gt;
        raster &amp;lt;- calc(subset, pansharpFun)&lt;br /&gt;
        pansharp_bands[[band]] &amp;lt;- raster&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    pansharp &amp;lt;- stack(pansharp_bands) # итоговый растр&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ну, и наконец, последняя функция, носящая чисто утилитарный характер (позволяет использовать минимум параметров при сохранении растров) - обёртка к функции сохранения растра из пакета 'raster'. Идея состоит в том, что мы почти всегда будем хотеть сохранить результат в формате GeoTIFF, и при этом иметь целочисленный тип данных. Дело в том, что в большинстве случаев значения пикселей мультиспектрального растра - целые числа, а после паншарпенинга они становятся числами с плавающей запятой. Десятичные значения пикселя не несут никакой полезной информации, а занимают лишние сотни мегабайт дискового пространства. Использование целых чисел в качестве типа данных растра экономит более 0,5 Гб дискового пространства при паншарпенинге сцен WorldView-2.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
saveResult &amp;lt;- function(raster, path, format = 'GTiff', datatype = 'INT2S'){&lt;br /&gt;
    '  Сохраняет растр по указанному пути  '&lt;br /&gt;
    # @param raster - растр, который должен быть сохранён, объект класса Raser&lt;br /&gt;
    # @param path - путь к файлу (без расширения) - string&lt;br /&gt;
    # @param format - формат сохраняемого растра в соответствии с требованиями функции writeRaster() - string&lt;br /&gt;
    # @param datatype - тип данных сохраняемого растра в соответствии с требованиями функции to writeRaster() - string&lt;br /&gt;
     &lt;br /&gt;
    writeRaster(raster, &lt;br /&gt;
                path, &lt;br /&gt;
                format = format, &lt;br /&gt;
                datatype = datatype, &lt;br /&gt;
                overwrite = T)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
Посмотрим на результат работы скрипта.&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:R pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга в R]]&lt;br /&gt;
Результат можно сравнить с [http://%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox результатом паншарпенинга в Orfeo TollBox]:&lt;br /&gt;
[[Файл:OTB pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
Мы видим, что картинка, производимая нашим алгоритмом выглядит как-будто она обработана фильтром, увеличивающим резкость. Кроме того, на ней легче различить оттенки, чем на той, которая является результатом работы ''OTB''. Если копать глубже, то выяснится, что ''OTB'' сохранил диапазон значений исходного (очевидно, происходит нормализация данных на одном из этапов обработки), тогда как после использования нашего скрипта диапазон значений пикселей мультиспектрального снимка изменился кардинально, см. рисунки ниже. После паншарпенинга в R очень большое количество пикселей получили значения более 1000. Это означает, что растр после паншарпенинга в ''OTB'' потенциально может быть использован для последующей радиометрической калибровки, а после паншарпенинга нашим скриптом - нет. Однако указанные различия в результатах работы нашего скрипта и ''OTB'' следует считать не недостатками, а особенностями, которые следует учитывать в работе.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Histogram multi original.png|thumb|center|x500px|Гистограмма оригинального мультиспектрального растра]]&lt;br /&gt;
[[Файл:Histogram pansharp r.png|thumb|center|x500px|Гистограмма мультиспектрального растра после паншарпенинга в R]]&lt;br /&gt;
[[Файл:Histogram pansharp OTB.png|thumb|center|x500px|Гистограмма мультиспектрального растра послепаншарпенинга в OTB]]&lt;br /&gt;
&lt;br /&gt;
К очевидным же недостаткам использования ''R'' относится низкая скорость обработки изображений. К сожалению, в 'raster' не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье было продемонстрировано создание элементарного скрипта для паншарпенинга в ''R''. Отталкиваясь от приведённых здесь функций вы можете создавать собственные алгоритмы паншарпенинга или реализовывать чужие. К преимуществам использования R для паншарпенинга следует отнести широкий простор для кастомизации и творчества, а к недостаткам - низкую производительность, вызванную отсутствием многопоточности.&lt;br /&gt;
&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://wiki.gis-lab.info/w/%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox Паншарпенинг в QGIS с использованием Orfeo ToolBox]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html#.D0.9F.D0.B0.D0.BD.D1.88.D0.B0.D1.80.D0.BF.D0.B5.D0.BD.D0.B8.D0.BD.D0.B3 Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7 [раздел Паншарпенинг в GRASS]]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Histogram_pansharp_OTB.png&amp;diff=21883</id>
		<title>Файл:Histogram pansharp OTB.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Histogram_pansharp_OTB.png&amp;diff=21883"/>
		<updated>2015-04-19T07:59:54Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: Гистограмма мультиспектрального растра послепаншарпенинга в OTB.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Гистограмма мультиспектрального растра послепаншарпенинга в OTB.&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Histogram_pansharp_r.png&amp;diff=21882</id>
		<title>Файл:Histogram pansharp r.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Histogram_pansharp_r.png&amp;diff=21882"/>
		<updated>2015-04-19T07:58:26Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: Гистограмма мультиспектрального растра после паншарпенинга в R.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Гистограмма мультиспектрального растра после паншарпенинга в R.&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Histogram_multi_original.png&amp;diff=21881</id>
		<title>Файл:Histogram multi original.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Histogram_multi_original.png&amp;diff=21881"/>
		<updated>2015-04-19T07:56:05Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: Гистограмма значений пикселей оригинального мультиспектрального растра.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Гистограмма значений пикселей оригинального мультиспектрального растра.&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21880</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21880"/>
		<updated>2015-04-19T00:05:49Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Заключение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую, привязку в ''R'' есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster'']. На основании функций, доступных в этом пакете мы и разработаем наш скрипт. В использовании он будет чрезвычайно прост:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(raster)&lt;br /&gt;
&lt;br /&gt;
pan &amp;lt;- raster('pan.tif') # загружаем панхроматический растр&lt;br /&gt;
multi &amp;lt;- brick('multi.tif') # загружаем мультиспектральный растр&lt;br /&gt;
pansharp &amp;lt;- processingPansharp(pan, multi) # производим паншарпенинг (эту функцию мы создадим)&lt;br /&gt;
output_path &amp;lt;- 'путь_и_имя_файла_без_расширения' # зададим путь для сохранения результата&lt;br /&gt;
saveResult(pansharp, output_path) # сохраним результат, используя минимум параметров при помощи функции-обёртки&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начнём создавать необходимые функции. Первая функция - самая простая. Она всего-лишь реализовывает формулу, представленную выше.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
pansharpFun &amp;lt;- function(raster){&lt;br /&gt;
    ' Эта функция производит паншарпенинг  ' &lt;br /&gt;
    # @param raster - объект класса Raster с тремя каналами: 1)с низким разрешением, 2) с высоким разрешением, 3) низкочастотная компонента растра с высоким разрешением&lt;br /&gt;
    # @return pansharpened_raster - подвергшийся паншарпенингу  объект класса Raster&lt;br /&gt;
    # pansharp = Lowres * Highres / LPF[Highres]&lt;br /&gt;
     &lt;br /&gt;
    pansharpened_raster &amp;lt;- (raster[,1] * raster[,2]) / raster[,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вторая функция будет выделять низкочастотную составляющую растра с высоким разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
extractLPF &amp;lt;- function(pan, multi, filter = 'auto', fun = mean) {&lt;br /&gt;
    ' Возвращает низкочастотную компоненту растра с высоким разрешением &lt;br /&gt;
        с использованием скользящего окна, соответствующего размеру пикселя растра с низким разрешением '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект класса Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, который в последствии будет подвергнут паншарпенингу, объект класса Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект класса матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return LPF - низкочатотная компонента растра с высоким разрешением, объект класса Raster&lt;br /&gt;
     &lt;br /&gt;
    # Расчитаем размер скользящего окна, если его параметры не заданы&lt;br /&gt;
    if (filter == 'auto') {&lt;br /&gt;
        pan_res &amp;lt;- res(pan) # (x, y) пространственное разрешение растра с высоким разрешением в единицах CRS&lt;br /&gt;
        multi_res &amp;lt;- res(multi) # (x, y) пространственное разрешение растра с низким разрешением в единицах CRS&lt;br /&gt;
        x_res_ratio &amp;lt;- round(multi_res[1]/pan_res[1])&lt;br /&gt;
        y_res_ratio &amp;lt;- round(multi_res[2]/pan_res[2])&lt;br /&gt;
        total &amp;lt;- x_res_ratio + y_res_ratio&lt;br /&gt;
        filter &amp;lt;- matrix(1, nc = x_res_ratio, nr = y_res_ratio)&lt;br /&gt;
        }&lt;br /&gt;
         &lt;br /&gt;
        # Убедимся, что у скользящего окна нечётное количество столбцов и строк (требование функции focal() )&lt;br /&gt;
        if (nrow(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- rbind(filter, 0)&lt;br /&gt;
        } &lt;br /&gt;
        if (ncol(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- cbind(filter, 0)&lt;br /&gt;
       &lt;br /&gt;
         &lt;br /&gt;
    LPF &amp;lt;- focal(pan, w = filter, fun = fun) # получаем низкочастотную компоненту при помощи функции focal() пакета 'raster'&lt;br /&gt;
     &lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Обратите внимание, что мы оставили возможность задавать пользовательские значения для параметров ''filter'' и ''fun'', что оставляет простор для возможных экспериментов.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим функцию, объединяющую две предыдущие и выдающую растр с улучшенным разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
processingPansharp &amp;lt;- function(pan, multi, filter = 'auto', fun = mean){&lt;br /&gt;
    ' Улучшает разрешение мультиспектрального растра за счёт панхроматического растра '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект класса Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, чьё разрешение необходимо улучшить, объект класса Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект класса матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return pansharp - растер 'multi' с улучшенным разрешением, объект класса Raster&lt;br /&gt;
 &lt;br /&gt;
    LPF &amp;lt;- extractLPF(pan, multi, filter, fun)&lt;br /&gt;
         &lt;br /&gt;
    multi &amp;lt;- resample(multi, pan) # приводим экстент и разрешение мультиспектрального растра к панхроматическому&lt;br /&gt;
         &lt;br /&gt;
    all &amp;lt;- stack(multi, pan, LPF)&lt;br /&gt;
     &lt;br /&gt;
    bands &amp;lt;- nbands(multi)&lt;br /&gt;
    pan_band &amp;lt;- bands + 1&lt;br /&gt;
    lpf_band &amp;lt;- bands + 2&lt;br /&gt;
     &lt;br /&gt;
    # Производим паншарпенинг каналов мультиспектрального растра по очереди&lt;br /&gt;
    pansharp_bands &amp;lt;- list()&lt;br /&gt;
    for (band in 1:bands) {&lt;br /&gt;
        subset &amp;lt;- all[[c(band, pan_band, lpf_band)]]&lt;br /&gt;
        raster &amp;lt;- calc(subset, pansharpFun)&lt;br /&gt;
        pansharp_bands[[band]] &amp;lt;- raster&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    pansharp &amp;lt;- stack(pansharp_bands) # итоговый растр&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ну, и наконец, последняя функция, носящая чисто утилитарный характер (позволяет использовать минимум параметров при сохранении растров) - обёртка к функции сохранения растра из пакета 'raster'. Идея состоит в том, что мы почти всегда будем хотеть сохранить результат в формате GeoTIFF, и при этом иметь целочисленный тип данных. Дело в том, что в большинстве случаев значения пикселей мультиспектрального растра - целые числа, а после паншарпенинга они становятся числами с плавающей запятой. Десятичные значения пикселя не несут никакой полезной информации, а занимают лишние сотни мегабайт дискового пространства. Использование целых чисел в качестве типа данных растра экономит более 0,5 Гб дискового пространства при паншарпенинге сцен WorldView-2.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
saveResult &amp;lt;- function(raster, path, format = 'GTiff', datatype = 'INT2S'){&lt;br /&gt;
    '  Сохраняет растр по указанному пути  '&lt;br /&gt;
    # @param raster - растр, который должен быть сохранён, объект класса Raser&lt;br /&gt;
    # @param path - путь к файлу (без расширения) - string&lt;br /&gt;
    # @param format - формат сохраняемого растра в соответствии с требованиями функции writeRaster() - string&lt;br /&gt;
    # @param datatype - тип данных сохраняемого растра в соответствии с требованиями функции to writeRaster() - string&lt;br /&gt;
     &lt;br /&gt;
    writeRaster(raster, &lt;br /&gt;
                path, &lt;br /&gt;
                format = format, &lt;br /&gt;
                datatype = datatype, &lt;br /&gt;
                overwrite = T)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
Посмотрим на результат работы скрипта.&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:R pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга в R]]&lt;br /&gt;
Результат можно сравнить с [http://%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox результатом паншарпенинга в Orfeo TollBox]:&lt;br /&gt;
[[Файл:OTB pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
Мы видим, что картинка, производимая нашим алгоритмом выглядит как-будто она обработана фильтром, увеличивающим резкость. Кроме того, на ней легче различить оттенки, чем на той, которая является результатом работы ''OTB''. Если копать глубже, то выяснится, что ''OTB'' сохранил диапазон значений исходного (очевидно, происходит нормализация данных на одном из этапов обработки), тогда как после использования нашего скрипта диапазон значений пикселей мультиспектрального снимка изменился кардинально. Это означает, что растр после паншарпенинга в ''OTB'' потенциально может быть использован для последующей радиометрической калибровки, а после паншарпенинга нашим скриптом - нет. Однако указанные различия в результатах работы нашего скрипта и ''OTB'' следует считать не недостатками, а особенностями, которые следует учитывать в работе.&lt;br /&gt;
&lt;br /&gt;
К очевидным же недостаткам использования ''R'' относится низкая скорость обработки изображений. К сожалению, в 'raster' не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье было продемонстрировано создание элементарного скрипта для паншарпенинга в ''R''. Отталкиваясь от приведённых здесь функций вы можете создавать собственные алгоритмы паншарпенинга или реализовывать чужие. К преимуществам использования R для паншарпенинга следует отнести широкий простор для кастомизации и творчества, а к недостаткам - низкую производительность, вызванную отсутствием многопоточности.&lt;br /&gt;
&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://wiki.gis-lab.info/w/%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox Паншарпенинг в QGIS с использованием Orfeo ToolBox]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html#.D0.9F.D0.B0.D0.BD.D1.88.D0.B0.D1.80.D0.BF.D0.B5.D0.BD.D0.B8.D0.BD.D0.B3 Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7 [раздел Паншарпенинг в GRASS]]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21879</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21879"/>
		<updated>2015-04-18T23:41:21Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Заключение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую, привязку в ''R'' есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster'']. На основании функций, доступных в этом пакете мы и разработаем наш скрипт. В использовании он будет чрезвычайно прост:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(raster)&lt;br /&gt;
&lt;br /&gt;
pan &amp;lt;- raster('pan.tif') # загружаем панхроматический растр&lt;br /&gt;
multi &amp;lt;- brick('multi.tif') # загружаем мультиспектральный растр&lt;br /&gt;
pansharp &amp;lt;- processingPansharp(pan, multi) # производим паншарпенинг (эту функцию мы создадим)&lt;br /&gt;
output_path &amp;lt;- 'путь_и_имя_файла_без_расширения' # зададим путь для сохранения результата&lt;br /&gt;
saveResult(pansharp, output_path) # сохраним результат, используя минимум параметров при помощи функции-обёртки&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начнём создавать необходимые функции. Первая функция - самая простая. Она всего-лишь реализовывает формулу, представленную выше.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
pansharpFun &amp;lt;- function(raster){&lt;br /&gt;
    ' Эта функция производит паншарпенинг  ' &lt;br /&gt;
    # @param raster - объект класса Raster с тремя каналами: 1)с низким разрешением, 2) с высоким разрешением, 3) низкочастотная компонента растра с высоким разрешением&lt;br /&gt;
    # @return pansharpened_raster - подвергшийся паншарпенингу  объект класса Raster&lt;br /&gt;
    # pansharp = Lowres * Highres / LPF[Highres]&lt;br /&gt;
     &lt;br /&gt;
    pansharpened_raster &amp;lt;- (raster[,1] * raster[,2]) / raster[,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вторая функция будет выделять низкочастотную составляющую растра с высоким разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
extractLPF &amp;lt;- function(pan, multi, filter = 'auto', fun = mean) {&lt;br /&gt;
    ' Возвращает низкочастотную компоненту растра с высоким разрешением &lt;br /&gt;
        с использованием скользящего окна, соответствующего размеру пикселя растра с низким разрешением '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект класса Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, который в последствии будет подвергнут паншарпенингу, объект класса Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект класса матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return LPF - низкочатотная компонента растра с высоким разрешением, объект класса Raster&lt;br /&gt;
     &lt;br /&gt;
    # Расчитаем размер скользящего окна, если его параметры не заданы&lt;br /&gt;
    if (filter == 'auto') {&lt;br /&gt;
        pan_res &amp;lt;- res(pan) # (x, y) пространственное разрешение растра с высоким разрешением в единицах CRS&lt;br /&gt;
        multi_res &amp;lt;- res(multi) # (x, y) пространственное разрешение растра с низким разрешением в единицах CRS&lt;br /&gt;
        x_res_ratio &amp;lt;- round(multi_res[1]/pan_res[1])&lt;br /&gt;
        y_res_ratio &amp;lt;- round(multi_res[2]/pan_res[2])&lt;br /&gt;
        total &amp;lt;- x_res_ratio + y_res_ratio&lt;br /&gt;
        filter &amp;lt;- matrix(1, nc = x_res_ratio, nr = y_res_ratio)&lt;br /&gt;
        }&lt;br /&gt;
         &lt;br /&gt;
        # Убедимся, что у скользящего окна нечётное количество столбцов и строк (требование функции focal() )&lt;br /&gt;
        if (nrow(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- rbind(filter, 0)&lt;br /&gt;
        } &lt;br /&gt;
        if (ncol(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- cbind(filter, 0)&lt;br /&gt;
       &lt;br /&gt;
         &lt;br /&gt;
    LPF &amp;lt;- focal(pan, w = filter, fun = fun) # получаем низкочастотную компоненту при помощи функции focal() пакета 'raster'&lt;br /&gt;
     &lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Обратите внимание, что мы оставили возможность задавать пользовательские значения для параметров ''filter'' и ''fun'', что оставляет простор для возможных экспериментов.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим функцию, объединяющую две предыдущие и выдающую растр с улучшенным разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
processingPansharp &amp;lt;- function(pan, multi, filter = 'auto', fun = mean){&lt;br /&gt;
    ' Улучшает разрешение мультиспектрального растра за счёт панхроматического растра '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект класса Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, чьё разрешение необходимо улучшить, объект класса Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект класса матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return pansharp - растер 'multi' с улучшенным разрешением, объект класса Raster&lt;br /&gt;
 &lt;br /&gt;
    LPF &amp;lt;- extractLPF(pan, multi, filter, fun)&lt;br /&gt;
         &lt;br /&gt;
    multi &amp;lt;- resample(multi, pan) # приводим экстент и разрешение мультиспектрального растра к панхроматическому&lt;br /&gt;
         &lt;br /&gt;
    all &amp;lt;- stack(multi, pan, LPF)&lt;br /&gt;
     &lt;br /&gt;
    bands &amp;lt;- nbands(multi)&lt;br /&gt;
    pan_band &amp;lt;- bands + 1&lt;br /&gt;
    lpf_band &amp;lt;- bands + 2&lt;br /&gt;
     &lt;br /&gt;
    # Производим паншарпенинг каналов мультиспектрального растра по очереди&lt;br /&gt;
    pansharp_bands &amp;lt;- list()&lt;br /&gt;
    for (band in 1:bands) {&lt;br /&gt;
        subset &amp;lt;- all[[c(band, pan_band, lpf_band)]]&lt;br /&gt;
        raster &amp;lt;- calc(subset, pansharpFun)&lt;br /&gt;
        pansharp_bands[[band]] &amp;lt;- raster&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    pansharp &amp;lt;- stack(pansharp_bands) # итоговый растр&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ну, и наконец, последняя функция, носящая чисто утилитарный характер (позволяет использовать минимум параметров при сохранении растров) - обёртка к функции сохранения растра из пакета 'raster'. Идея состоит в том, что мы почти всегда будем хотеть сохранить результат в формате GeoTIFF, и при этом иметь целочисленный тип данных. Дело в том, что в большинстве случаев значения пикселей мультиспектрального растра - целые числа, а после паншарпенинга они становятся числами с плавающей запятой. Десятичные значения пикселя не несут никакой полезной информации, а занимают лишние сотни мегабайт дискового пространства. Использование целых чисел в качестве типа данных растра экономит более 0,5 Гб дискового пространства при паншарпенинге сцен WorldView-2.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
saveResult &amp;lt;- function(raster, path, format = 'GTiff', datatype = 'INT2S'){&lt;br /&gt;
    '  Сохраняет растр по указанному пути  '&lt;br /&gt;
    # @param raster - растр, который должен быть сохранён, объект класса Raser&lt;br /&gt;
    # @param path - путь к файлу (без расширения) - string&lt;br /&gt;
    # @param format - формат сохраняемого растра в соответствии с требованиями функции writeRaster() - string&lt;br /&gt;
    # @param datatype - тип данных сохраняемого растра в соответствии с требованиями функции to writeRaster() - string&lt;br /&gt;
     &lt;br /&gt;
    writeRaster(raster, &lt;br /&gt;
                path, &lt;br /&gt;
                format = format, &lt;br /&gt;
                datatype = datatype, &lt;br /&gt;
                overwrite = T)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
Посмотрим на результат работы скрипта.&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:R pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга в R]]&lt;br /&gt;
Результат можно сравнить с [http://%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox результатом паншарпенинга в Orfeo TollBox]:&lt;br /&gt;
[[Файл:OTB pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
Мы видим, что картинка, производимая нашим алгоритмом выглядит как-будто она обработана фильтром, увеличивающим резкость. Кроме того, на ней легче различить оттенки, чем на той, которая является результатом работы ''OTB''. Если копать глубже, то выяснится, что ''OTB'' сохранил диапазон значений исходного (очевидно, происходит нормализация данных на одном из этапов обработки), тогда как после использования нашего скрипта диапазон значений пикселей мультиспектрального снимка изменился кардинально. Это означает, что растр после паншарпенинга в ''OTB'' потенциально может быть использован для последующей радиометрической калибровки, а после паншарпенинга нашим скриптом - нет. Однако указанные различия в результатах работы нашего скрипта и ''OTB'' следует считать не недостатками, а особенностями, которые следует учитывать в работе.&lt;br /&gt;
&lt;br /&gt;
К очевидным же недостаткам использования ''R'' относится низкая скорость обработки изображений. К сожалению, в 'raster' не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье было продемонстрировано создание элементарного скрипта для паншарпенинга в ''R''. Отталкиваясь от приведённых здесь функций вы можете создавать собственные алгоритмы паншарпенинга или реализовывать чужие. К преимуществам использования R для паншарпенинга следует отнести широкий простор для кастомизации и творчества, а к недостаткам - низкую производительность, вызванную отсутствием мультитрединга.&lt;br /&gt;
&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://wiki.gis-lab.info/w/%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox Паншарпенинг в QGIS с использованием Orfeo ToolBox]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html#.D0.9F.D0.B0.D0.BD.D1.88.D0.B0.D1.80.D0.BF.D0.B5.D0.BD.D0.B8.D0.BD.D0.B3 Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7 [раздел Паншарпенинг в GRASS]]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21878</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21878"/>
		<updated>2015-04-18T23:39:39Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Реализация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую, привязку в ''R'' есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster'']. На основании функций, доступных в этом пакете мы и разработаем наш скрипт. В использовании он будет чрезвычайно прост:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(raster)&lt;br /&gt;
&lt;br /&gt;
pan &amp;lt;- raster('pan.tif') # загружаем панхроматический растр&lt;br /&gt;
multi &amp;lt;- brick('multi.tif') # загружаем мультиспектральный растр&lt;br /&gt;
pansharp &amp;lt;- processingPansharp(pan, multi) # производим паншарпенинг (эту функцию мы создадим)&lt;br /&gt;
output_path &amp;lt;- 'путь_и_имя_файла_без_расширения' # зададим путь для сохранения результата&lt;br /&gt;
saveResult(pansharp, output_path) # сохраним результат, используя минимум параметров при помощи функции-обёртки&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начнём создавать необходимые функции. Первая функция - самая простая. Она всего-лишь реализовывает формулу, представленную выше.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
pansharpFun &amp;lt;- function(raster){&lt;br /&gt;
    ' Эта функция производит паншарпенинг  ' &lt;br /&gt;
    # @param raster - объект класса Raster с тремя каналами: 1)с низким разрешением, 2) с высоким разрешением, 3) низкочастотная компонента растра с высоким разрешением&lt;br /&gt;
    # @return pansharpened_raster - подвергшийся паншарпенингу  объект класса Raster&lt;br /&gt;
    # pansharp = Lowres * Highres / LPF[Highres]&lt;br /&gt;
     &lt;br /&gt;
    pansharpened_raster &amp;lt;- (raster[,1] * raster[,2]) / raster[,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вторая функция будет выделять низкочастотную составляющую растра с высоким разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
extractLPF &amp;lt;- function(pan, multi, filter = 'auto', fun = mean) {&lt;br /&gt;
    ' Возвращает низкочастотную компоненту растра с высоким разрешением &lt;br /&gt;
        с использованием скользящего окна, соответствующего размеру пикселя растра с низким разрешением '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект класса Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, который в последствии будет подвергнут паншарпенингу, объект класса Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект класса матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return LPF - низкочатотная компонента растра с высоким разрешением, объект класса Raster&lt;br /&gt;
     &lt;br /&gt;
    # Расчитаем размер скользящего окна, если его параметры не заданы&lt;br /&gt;
    if (filter == 'auto') {&lt;br /&gt;
        pan_res &amp;lt;- res(pan) # (x, y) пространственное разрешение растра с высоким разрешением в единицах CRS&lt;br /&gt;
        multi_res &amp;lt;- res(multi) # (x, y) пространственное разрешение растра с низким разрешением в единицах CRS&lt;br /&gt;
        x_res_ratio &amp;lt;- round(multi_res[1]/pan_res[1])&lt;br /&gt;
        y_res_ratio &amp;lt;- round(multi_res[2]/pan_res[2])&lt;br /&gt;
        total &amp;lt;- x_res_ratio + y_res_ratio&lt;br /&gt;
        filter &amp;lt;- matrix(1, nc = x_res_ratio, nr = y_res_ratio)&lt;br /&gt;
        }&lt;br /&gt;
         &lt;br /&gt;
        # Убедимся, что у скользящего окна нечётное количество столбцов и строк (требование функции focal() )&lt;br /&gt;
        if (nrow(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- rbind(filter, 0)&lt;br /&gt;
        } &lt;br /&gt;
        if (ncol(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- cbind(filter, 0)&lt;br /&gt;
       &lt;br /&gt;
         &lt;br /&gt;
    LPF &amp;lt;- focal(pan, w = filter, fun = fun) # получаем низкочастотную компоненту при помощи функции focal() пакета 'raster'&lt;br /&gt;
     &lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Обратите внимание, что мы оставили возможность задавать пользовательские значения для параметров ''filter'' и ''fun'', что оставляет простор для возможных экспериментов.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим функцию, объединяющую две предыдущие и выдающую растр с улучшенным разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
processingPansharp &amp;lt;- function(pan, multi, filter = 'auto', fun = mean){&lt;br /&gt;
    ' Улучшает разрешение мультиспектрального растра за счёт панхроматического растра '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект класса Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, чьё разрешение необходимо улучшить, объект класса Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект класса матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return pansharp - растер 'multi' с улучшенным разрешением, объект класса Raster&lt;br /&gt;
 &lt;br /&gt;
    LPF &amp;lt;- extractLPF(pan, multi, filter, fun)&lt;br /&gt;
         &lt;br /&gt;
    multi &amp;lt;- resample(multi, pan) # приводим экстент и разрешение мультиспектрального растра к панхроматическому&lt;br /&gt;
         &lt;br /&gt;
    all &amp;lt;- stack(multi, pan, LPF)&lt;br /&gt;
     &lt;br /&gt;
    bands &amp;lt;- nbands(multi)&lt;br /&gt;
    pan_band &amp;lt;- bands + 1&lt;br /&gt;
    lpf_band &amp;lt;- bands + 2&lt;br /&gt;
     &lt;br /&gt;
    # Производим паншарпенинг каналов мультиспектрального растра по очереди&lt;br /&gt;
    pansharp_bands &amp;lt;- list()&lt;br /&gt;
    for (band in 1:bands) {&lt;br /&gt;
        subset &amp;lt;- all[[c(band, pan_band, lpf_band)]]&lt;br /&gt;
        raster &amp;lt;- calc(subset, pansharpFun)&lt;br /&gt;
        pansharp_bands[[band]] &amp;lt;- raster&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    pansharp &amp;lt;- stack(pansharp_bands) # итоговый растр&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ну, и наконец, последняя функция, носящая чисто утилитарный характер (позволяет использовать минимум параметров при сохранении растров) - обёртка к функции сохранения растра из пакета 'raster'. Идея состоит в том, что мы почти всегда будем хотеть сохранить результат в формате GeoTIFF, и при этом иметь целочисленный тип данных. Дело в том, что в большинстве случаев значения пикселей мультиспектрального растра - целые числа, а после паншарпенинга они становятся числами с плавающей запятой. Десятичные значения пикселя не несут никакой полезной информации, а занимают лишние сотни мегабайт дискового пространства. Использование целых чисел в качестве типа данных растра экономит более 0,5 Гб дискового пространства при паншарпенинге сцен WorldView-2.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
saveResult &amp;lt;- function(raster, path, format = 'GTiff', datatype = 'INT2S'){&lt;br /&gt;
    '  Сохраняет растр по указанному пути  '&lt;br /&gt;
    # @param raster - растр, который должен быть сохранён, объект класса Raser&lt;br /&gt;
    # @param path - путь к файлу (без расширения) - string&lt;br /&gt;
    # @param format - формат сохраняемого растра в соответствии с требованиями функции writeRaster() - string&lt;br /&gt;
    # @param datatype - тип данных сохраняемого растра в соответствии с требованиями функции to writeRaster() - string&lt;br /&gt;
     &lt;br /&gt;
    writeRaster(raster, &lt;br /&gt;
                path, &lt;br /&gt;
                format = format, &lt;br /&gt;
                datatype = datatype, &lt;br /&gt;
                overwrite = T)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
Посмотрим на результат работы скрипта.&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:R pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга в R]]&lt;br /&gt;
Результат можно сравнить с [http://%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox результатом паншарпенинга в Orfeo TollBox]:&lt;br /&gt;
[[Файл:OTB pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
Мы видим, что картинка, производимая нашим алгоритмом выглядит как-будто она обработана фильтром, увеличивающим резкость. Кроме того, на ней легче различить оттенки, чем на той, которая является результатом работы ''OTB''. Если копать глубже, то выяснится, что ''OTB'' сохранил диапазон значений исходного (очевидно, происходит нормализация данных на одном из этапов обработки), тогда как после использования нашего скрипта диапазон значений пикселей мультиспектрального снимка изменился кардинально. Это означает, что растр после паншарпенинга в ''OTB'' потенциально может быть использован для последующей радиометрической калибровки, а после паншарпенинга нашим скриптом - нет. Однако указанные различия в результатах работы нашего скрипта и ''OTB'' следует считать не недостатками, а особенностями, которые следует учитывать в работе.&lt;br /&gt;
&lt;br /&gt;
К очевидным же недостаткам использования ''R'' относится низкая скорость обработки изображений. К сожалению, в 'raster' не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье было продемонстрировано создание элементарного скрипта для паншарпенинга в R. отталкиваясь от приведённых здесь функций вы можете создавать собственные алгоритмы паншарпенинга или реализовывать чужие. К преимуществам использования R для паншарпенинга следует отнести широкий простор для кастомизации и творчества, а к недостаткам - низкую производительность, вызванную отсутствием мультитрединга.&lt;br /&gt;
&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://wiki.gis-lab.info/w/%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox Паншарпенинг в QGIS с использованием Orfeo ToolBox]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html#.D0.9F.D0.B0.D0.BD.D1.88.D0.B0.D1.80.D0.BF.D0.B5.D0.BD.D0.B8.D0.BD.D0.B3 Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7 [раздел Паншарпенинг в GRASS]]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21877</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21877"/>
		<updated>2015-04-18T23:37:39Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Реализация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую, привязку в ''R'' есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster'']. На основании функций, доступных в этом пакете мы и разработаем наш скрипт. В использовании он будет чрезвычайно прост:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(raster)&lt;br /&gt;
&lt;br /&gt;
pan &amp;lt;- raster('pan.tif') # загружаем панхроматический растр&lt;br /&gt;
multi &amp;lt;- brick('multi.tif') # загружаем мультиспектральный растр&lt;br /&gt;
pansharp &amp;lt;- processingPansharp(pan, multi) # производим паншарпенинг (эту функцию мы создадим)&lt;br /&gt;
output_path &amp;lt;- 'путь_и_имя_файла_без_расширения' # зададим путь для сохранения результата&lt;br /&gt;
saveResult(pansharp, output_path) # сохраним результат, используя минимум параметров при помощи функции-обёртки&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начнём создавать необходимые функции. Первая функция - самая простая. Она всего-лишь реализовывает формулу, представленную выше.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
pansharpFun &amp;lt;- function(raster){&lt;br /&gt;
    ' Эта функция производит паншарпенинг  ' &lt;br /&gt;
    # @param raster - объект класса Raster с тремя каналами: 1)с низким разрешением, 2) с высоким разрешением, 3) низкочастотная компонента растра с высоким разрешением&lt;br /&gt;
    # @return pansharpened_raster - подвергшийся паншарпенингу  объект класса Raster&lt;br /&gt;
    # pansharp = Lowres * Highres / LPF[Highres]&lt;br /&gt;
     &lt;br /&gt;
    pansharpened_raster &amp;lt;- (raster[,1] * raster[,2]) / raster[,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вторая функция будет выделять низкочастотную составляющую растра с высоким разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
extractLPF &amp;lt;- function(pan, multi, filter = 'auto', fun = mean) {&lt;br /&gt;
    ' Возвращает низкочастотную компоненту растра с высоким разрешением &lt;br /&gt;
        с использованием скользящего окна, соответствующего размеру пикселя растра с низким разрешением '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект класса Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, который в последствии будет подвергнут паншарпенингу, объект класса Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект класса матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return LPF - низкочатотная компонента растра с высоким разрешением, объект класса Raster&lt;br /&gt;
     &lt;br /&gt;
    # Расчитаем размер скользящего окна, если его параметры не заданы&lt;br /&gt;
    if (filter == 'auto') {&lt;br /&gt;
        pan_res &amp;lt;- res(pan) # (x, y) пространственное разрешение растра с высоким разрешением в единицах CRS&lt;br /&gt;
        multi_res &amp;lt;- res(multi) # (x, y) пространственное разрешение растра с низким разрешением в единицах CRS&lt;br /&gt;
        x_res_ratio &amp;lt;- round(multi_res[1]/pan_res[1])&lt;br /&gt;
        y_res_ratio &amp;lt;- round(multi_res[2]/pan_res[2])&lt;br /&gt;
        total &amp;lt;- x_res_ratio + y_res_ratio&lt;br /&gt;
        filter &amp;lt;- matrix(1, nc = x_res_ratio, nr = y_res_ratio)&lt;br /&gt;
        }&lt;br /&gt;
         &lt;br /&gt;
        # Убедимся, что у скользящего окна нечётное количество столбцов и строк (требование функции focal() )&lt;br /&gt;
        if (nrow(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- rbind(filter, 0)&lt;br /&gt;
        } &lt;br /&gt;
        if (ncol(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- cbind(filter, 0)&lt;br /&gt;
       &lt;br /&gt;
         &lt;br /&gt;
    LPF &amp;lt;- focal(pan, w = filter, fun = fun) # получаем низкочастотную компоненту при помощи функции focal() пакета 'raster'&lt;br /&gt;
     &lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Обратите внимание, что мы оставили возможность задавать пользовательские значения для параметров ''filter'' и ''fun'', что оставляет простор для возможных экспериментов.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим функцию, объединяющую две предыдущие и выдающую растр с улучшенным разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
processingPansharp &amp;lt;- function(pan, multi, filter = 'auto', fun = mean){&lt;br /&gt;
    ' Улучшает разрешение мультиспектрального растра за счёт панхроматического растра '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект класса Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, чьё разрешение необходимо улучшить, объект класса Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект класса матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return pansharp - растер 'multi' с улучшенным разрешением, объект класса Raster&lt;br /&gt;
 &lt;br /&gt;
    LPF &amp;lt;- extractLPF(pan, multi, filter, fun)&lt;br /&gt;
         &lt;br /&gt;
    multi &amp;lt;- resample(multi, pan) # приводим экстент и разрешение мультиспектрального растра к панхроматическому&lt;br /&gt;
         &lt;br /&gt;
    all &amp;lt;- stack(multi, pan, LPF)&lt;br /&gt;
     &lt;br /&gt;
    bands &amp;lt;- nbands(multi)&lt;br /&gt;
    pan_band &amp;lt;- bands + 1&lt;br /&gt;
    lpf_band &amp;lt;- bands + 2&lt;br /&gt;
     &lt;br /&gt;
    # Производим паншарпенинг каналов мультиспектрального растра по очереди&lt;br /&gt;
    pansharp_bands &amp;lt;- list()&lt;br /&gt;
    for (band in 1:bands) {&lt;br /&gt;
        subset &amp;lt;- all[[c(band, pan_band, lpf_band)]]&lt;br /&gt;
        raster &amp;lt;- calc(subset, pansharpFun)&lt;br /&gt;
        pansharp_bands[[band]] &amp;lt;- raster&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    pansharp &amp;lt;- stack(pansharp_bands) # итоговый растр&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ну, и наконец, последняя функция, носящая чисто утилитарный характер (позволяет использовать минимум параметров при сохранении растров) - обёртка к функции сохранения растра из пакета 'raster'. Идея состоит в том, что мы почти всегда будем хотеть сохранить результат в формате GeoTIFF, и при этом иметь целочисленный тип данных. Дело в том, что в большинстве случаев значения пикселей мультиспектрального растра - целые числа, а после паншарпенинга они становятся числами с плавающей запятой. Десятичные значения пикселя не несут никакой полезной информации, а занимают лишние сотни мегабайт места на диске. Использование целых чисел в качестве типа данных растра экономит более 0,5 Гб дискового пространства при паншарпенинге сцен WorldView-2.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
saveResult &amp;lt;- function(raster, path, format = 'GTiff', datatype = 'INT2S'){&lt;br /&gt;
    '  Сохраняет растр по указанному пути  '&lt;br /&gt;
    # @param raster - растр, который должен быть сохранён, объект класса Raser&lt;br /&gt;
    # @param path - путь к файлу (без расширения) - string&lt;br /&gt;
    # @param format - формат сохраняемого растра в соответствии с требованиями функции writeRaster() - string&lt;br /&gt;
    # @param datatype - тип данных сохраняемого растра в соответствии с требованиями функции to writeRaster() - string&lt;br /&gt;
     &lt;br /&gt;
    writeRaster(raster, &lt;br /&gt;
                path, &lt;br /&gt;
                format = format, &lt;br /&gt;
                datatype = datatype, &lt;br /&gt;
                overwrite = T)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
Посмотрим на результат работы скрипта.&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:R pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга в R]]&lt;br /&gt;
Результат можно сравнить с [http://%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox результатом паншарпенинга в Orfeo TollBox]:&lt;br /&gt;
[[Файл:OTB pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
Мы видим, что картинка, производимая нашим алгоритмом выглядит как-будто она обработана фильтром, увеличивающим резкость. Кроме того, на ней легче различить оттенки, чем на той, которая является результатом работы ''OTB''. Если копать глубже, то выяснится, что ''OTB'' сохранил диапазон значений исходного (очевидно, происходит нормализация данных на одном из этапов обработки), тогда как после использования нашего скрипта диапазон значений пикселей мультиспектрального снимка изменился кардинально. Это означает, что растр после паншарпенинга в ''OTB'' потенциально может быть использован для последующей радиометрической калибровки, а после паншарпенинга нашим скриптом - нет. Однако указанные различия в результатах работы нашего скрипта и ''OTB'' следует считать не недостатками, а особенностями, которые следует учитывать в работе.&lt;br /&gt;
&lt;br /&gt;
К очевидным же недостаткам использования ''R'' относится низкая скорость обработки изображений. К сожалению, в 'raster' не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье было продемонстрировано создание элементарного скрипта для паншарпенинга в R. отталкиваясь от приведённых здесь функций вы можете создавать собственные алгоритмы паншарпенинга или реализовывать чужие. К преимуществам использования R для паншарпенинга следует отнести широкий простор для кастомизации и творчества, а к недостаткам - низкую производительность, вызванную отсутствием мультитрединга.&lt;br /&gt;
&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://wiki.gis-lab.info/w/%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox Паншарпенинг в QGIS с использованием Orfeo ToolBox]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html#.D0.9F.D0.B0.D0.BD.D1.88.D0.B0.D1.80.D0.BF.D0.B5.D0.BD.D0.B8.D0.BD.D0.B3 Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7 [раздел Паншарпенинг в GRASS]]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21876</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21876"/>
		<updated>2015-04-18T23:32:53Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Реализация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую, привязку в ''R'' есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster'']. На основании функций, доступных в этом пакете мы и разработаем наш скрипт. В использовании он будет чрезвычайно прост:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(raster)&lt;br /&gt;
&lt;br /&gt;
pan &amp;lt;- raster('pan.tif') # загружаем панхроматический растр&lt;br /&gt;
multi &amp;lt;- brick('multi.tif') # загружаем мультиспектральный растр&lt;br /&gt;
pansharp &amp;lt;- processingPansharp(pan, multi) # производим паншарпенинг (эту функцию мы создадим)&lt;br /&gt;
output_path &amp;lt;- 'путь_и_имя_файла_без_расширения' # зададим путь для сохранения результата&lt;br /&gt;
saveResult(pansharp, output_path) # сохраним результат, используя минимум параметров при помощи функции-обёртки&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начнём создавать необходимые функции. Первая функция - самая простая. Она всего-лишь реализовывает формулу, представленную выше.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
pansharpFun &amp;lt;- function(raster){&lt;br /&gt;
    ' Эта функция производит паншарпенинг  ' &lt;br /&gt;
    # @param raster - объект типа Raster с тремя каналами: 1)с низким разрешением, 2) с высоким разрешением, 3) низкочастотная компонента растра с высоким разрешением&lt;br /&gt;
    # @return pansharpened_raster - подвергшийся паншарпенингу  объект типа Raster&lt;br /&gt;
    # pansharp = Lowres * Highres / LPF[Highres]&lt;br /&gt;
     &lt;br /&gt;
    pansharpened_raster &amp;lt;- (raster[,1] * raster[,2]) / raster[,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вторая функция будет выделять низкочастотную составляющую растра с высоким разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
extractLPF &amp;lt;- function(pan, multi, filter = 'auto', fun = mean) {&lt;br /&gt;
    ' Возвращает низкочастотную компоненту растра с высоким разрешением &lt;br /&gt;
        с использованием скользящего окна, соответствующего размеру пикселя растра с низким разрешением '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, который в последствии будет подвергнут паншарпенингу, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return LPF - низкочатотная компонента растра с высоким разрешением, объект типа Raster&lt;br /&gt;
     &lt;br /&gt;
    # Расчитаем размер скользящего окна, если его параметры не заданы&lt;br /&gt;
    if (filter == 'auto') {&lt;br /&gt;
        pan_res &amp;lt;- res(pan) # (x, y) пространственное разрешение растра с высоким разрешением в единицах CRS&lt;br /&gt;
        multi_res &amp;lt;- res(multi) # (x, y) пространственное разрешение растра с низким разрешением в единицах CRS&lt;br /&gt;
        x_res_ratio &amp;lt;- round(multi_res[1]/pan_res[1])&lt;br /&gt;
        y_res_ratio &amp;lt;- round(multi_res[2]/pan_res[2])&lt;br /&gt;
        total &amp;lt;- x_res_ratio + y_res_ratio&lt;br /&gt;
        filter &amp;lt;- matrix(1, nc = x_res_ratio, nr = y_res_ratio)&lt;br /&gt;
        }&lt;br /&gt;
         &lt;br /&gt;
        # Убедимся, что у скользящего окна нечётное количество столбцов и строк (требование функции focal() )&lt;br /&gt;
        if (nrow(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- rbind(filter, 0)&lt;br /&gt;
        } &lt;br /&gt;
        if (ncol(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- cbind(filter, 0)&lt;br /&gt;
       &lt;br /&gt;
         &lt;br /&gt;
    LPF &amp;lt;- focal(pan, w = filter, fun = fun) # получаем низкочастотную компоненту при помощи функции focal() пакета 'raster'&lt;br /&gt;
     &lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Обратите внимание, что мы оставили возможность задавать пользовательские значения для параметров ''filter'' и ''fun'', что оставляет простор для возможных экспериментов.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим функцию, объединяющую две предыдущие и выдающую растр с улучшенным разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
processingPansharp &amp;lt;- function(pan, multi, filter = 'auto', fun = mean){&lt;br /&gt;
    ' Улучшает разрешение мультиспектрального растра за счёт панхроматического растра '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, чьё разрешение необходимо улучшить, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return pansharp - растер 'multi' с улучшенным разрешением, объект типа Raster&lt;br /&gt;
 &lt;br /&gt;
    LPF &amp;lt;- extractLPF(pan, multi, filter, fun)&lt;br /&gt;
         &lt;br /&gt;
    multi &amp;lt;- resample(multi, pan) # приводим экстент и разрешение мультиспектрального растра к панхроматическому&lt;br /&gt;
         &lt;br /&gt;
    all &amp;lt;- stack(multi, pan, LPF)&lt;br /&gt;
     &lt;br /&gt;
    bands &amp;lt;- nbands(multi)&lt;br /&gt;
    pan_band &amp;lt;- bands + 1&lt;br /&gt;
    lpf_band &amp;lt;- bands + 2&lt;br /&gt;
     &lt;br /&gt;
    # Производим паншарпенинг каналов мультиспектрального растра по очереди&lt;br /&gt;
    pansharp_bands &amp;lt;- list()&lt;br /&gt;
    for (band in 1:bands) {&lt;br /&gt;
        subset &amp;lt;- all[[c(band, pan_band, lpf_band)]]&lt;br /&gt;
        raster &amp;lt;- calc(subset, pansharpFun)&lt;br /&gt;
        pansharp_bands[[band]] &amp;lt;- raster&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    pansharp &amp;lt;- stack(pansharp_bands) # итоговый растр&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ну, и наконец, последняя функция, носящая чисто утилитарный характер (позволяет использовать минимум параметров при сохранении растров) - обёртка к функции сохранения растра из пакета 'raster'. Идея состоит в том, что мы почти всегда будем хотеть сохранить результат в формате GeoTIFF, и при этом иметь целочисленный тип данных. Дело в том, что в большинстве случаев значения пикселей мультиспектрального растра - целые числа, а после паншарпенинга они становятся числами с плавающей запятой. Десятичные значения пикселя не несут никакой полезной информации, а занимают лишние сотни мегабайт места на диске. Использование целых чисел в качестве типа данных растра экономит более 0,5 Гб дискового пространства при паншарпенинге сцен WorldView-2.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
saveResult &amp;lt;- function(raster, path, format = 'GTiff', datatype = 'INT2S'){&lt;br /&gt;
    '  Сохраняет растр по указанному пути  '&lt;br /&gt;
    # @param raster - растр, который должен быть сохранён, объект типа Raser&lt;br /&gt;
    # @param path - путь к файлу (без расширения) - string&lt;br /&gt;
    # @param format - формат сохраняемого растра в соответствии с требованиями функции writeRaster() - string&lt;br /&gt;
    # @param datatype - тип данных сохраняемого растра в соответствии с требованиями функции to writeRaster() - string&lt;br /&gt;
     &lt;br /&gt;
    writeRaster(raster, &lt;br /&gt;
                path, &lt;br /&gt;
                format = format, &lt;br /&gt;
                datatype = datatype, &lt;br /&gt;
                overwrite = T)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
Посмотрим на результат работы скрипта.&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:R pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга в R]]&lt;br /&gt;
Результат можно сравнить с [http://%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox результатом паншарпенинга в Orfeo TollBox]:&lt;br /&gt;
[[Файл:OTB pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
Мы видим, что картинка, производимая нашим алгоритмом выглядит как-будто она обработана фильтром, увеличивающим резкость. Кроме того, на ней легче различить оттенки, чем на той, которая является результатом работы ''OTB''. Если копать глубже, то выяснится, что ''OTB'' сохранил диапазон значений исходного (очевидно, происходит нормализация данных на одном из этапов обработки), тогда как после использования нашего скрипта диапазон значений пикселей мультиспектрального снимка изменился кардинально. Это означает, что растр после паншарпенинга в ''OTB'' потенциально может быть использован для последующей радиометрической калибровки, а после паншарпенинга нашим скриптом - нет. Однако указанные различия в результатах работы нашего скрипта и ''OTB'' следует считать не недостатками, а особенностями, которые следует учитывать в работе.&lt;br /&gt;
&lt;br /&gt;
К очевидным же недостаткам использования ''R'' относится низкая скорость обработки изображений. К сожалению, в 'raster' не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье было продемонстрировано создание элементарного скрипта для паншарпенинга в R. отталкиваясь от приведённых здесь функций вы можете создавать собственные алгоритмы паншарпенинга или реализовывать чужие. К преимуществам использования R для паншарпенинга следует отнести широкий простор для кастомизации и творчества, а к недостаткам - низкую производительность, вызванную отсутствием мультитрединга.&lt;br /&gt;
&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://wiki.gis-lab.info/w/%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox Паншарпенинг в QGIS с использованием Orfeo ToolBox]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html#.D0.9F.D0.B0.D0.BD.D1.88.D0.B0.D1.80.D0.BF.D0.B5.D0.BD.D0.B8.D0.BD.D0.B3 Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7 [раздел Паншарпенинг в GRASS]]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21875</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21875"/>
		<updated>2015-04-18T23:31:46Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Реализация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую, привязку в ''R'' есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster'']. На основании функций, доступных в этом пакете мы и разработаем наш скрипт. В использовании он будет чрезвычайно прост:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(raster)&lt;br /&gt;
&lt;br /&gt;
pan &amp;lt;- raster('pan.tif') # загружаем панхроматический растр&lt;br /&gt;
multi &amp;lt;- brick('multi.tif') # загружаем мультиспектральный растр&lt;br /&gt;
pansharp &amp;lt;- processingPansharp(pan, multi) # производим паншарпенинг (эту функцию мы создадим)&lt;br /&gt;
output_path &amp;lt;- 'путь_и_имя_файла_без_расширения' # зададим путь для сохранения результата&lt;br /&gt;
saveResult(pansharp, output_path) # сохраним результат, используя минимум параметров при помощи функции-обёртки&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начнём создавать необходимые функции. Первая функция - самая простая. Она всего-лишь реализовывает формулу, представленную выше.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
pansharpFun &amp;lt;- function(raster){&lt;br /&gt;
    ' Эта функция производит паншарпенинг  ' &lt;br /&gt;
    # @param raster - объект типа Raster с тремя каналами: 1)с низким разрешением, 2) с высоким разрешением, 3) низкочастотная компонента растра с высоким разрешением&lt;br /&gt;
    # @return pansharpened_raster - подвергшийся паншарпенингу  объект типа Raster&lt;br /&gt;
    # pansharp = Lowres * Highres / LPF[Highres]&lt;br /&gt;
     &lt;br /&gt;
    pansharpened_raster &amp;lt;- (raster[,1] * raster[,2]) / raster[,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вторая функция будет вычислять низкочастотную составляющую растра с высоким разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
extractLPF &amp;lt;- function(pan, multi, filter = 'auto', fun = mean) {&lt;br /&gt;
    ' Возвращает низкочастотную компоненту растра с высоким разрешением &lt;br /&gt;
        с использованием скользящего окна, соответствующего размеру пикселя растра с низким разрешением '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, который в последствии будет подвергнут паншарпенингу, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return LPF - низкочатотная компонента растра с высоким разрешением, объект типа Raster&lt;br /&gt;
     &lt;br /&gt;
    # Расчитаем размер скользящего окна, если его параметры не заданы&lt;br /&gt;
    if (filter == 'auto') {&lt;br /&gt;
        pan_res &amp;lt;- res(pan) # (x, y) пространственное разрешение растра с высоким разрешением в единицах CRS&lt;br /&gt;
        multi_res &amp;lt;- res(multi) # (x, y) пространственное разрешение растра с низким разрешением в единицах CRS&lt;br /&gt;
        x_res_ratio &amp;lt;- round(multi_res[1]/pan_res[1])&lt;br /&gt;
        y_res_ratio &amp;lt;- round(multi_res[2]/pan_res[2])&lt;br /&gt;
        total &amp;lt;- x_res_ratio + y_res_ratio&lt;br /&gt;
        filter &amp;lt;- matrix(1, nc = x_res_ratio, nr = y_res_ratio)&lt;br /&gt;
        }&lt;br /&gt;
         &lt;br /&gt;
        # Убедимся, что у скользящего окна нечётное количество столбцов и строк (требование функции focal() )&lt;br /&gt;
        if (nrow(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- rbind(filter, 0)&lt;br /&gt;
        } &lt;br /&gt;
        if (ncol(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- cbind(filter, 0)&lt;br /&gt;
       &lt;br /&gt;
         &lt;br /&gt;
    LPF &amp;lt;- focal(pan, w = filter, fun = fun) # получаем низкочастотную компоненту при помощи функции focal() пакета 'raster'&lt;br /&gt;
     &lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Обратите внимание, что мы оставили возможность задавать пользовательские значения для параметров ''filter'' и ''fun'', что оставляет простор для возможных экспериментов.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим функцию, объединяющую две предыдущие и выдающую растр с улучшенным разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
processingPansharp &amp;lt;- function(pan, multi, filter = 'auto', fun = mean){&lt;br /&gt;
    ' Улучшает разрешение мультиспектрального растра за счёт панхроматического растра '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, чьё разрешение необходимо улучшить, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return pansharp - растер 'multi' с улучшенным разрешением, объект типа Raster&lt;br /&gt;
 &lt;br /&gt;
    LPF &amp;lt;- extractLPF(pan, multi, filter, fun)&lt;br /&gt;
         &lt;br /&gt;
    multi &amp;lt;- resample(multi, pan) # приводим экстент и разрешение мультиспектрального растра к панхроматическому&lt;br /&gt;
         &lt;br /&gt;
    all &amp;lt;- stack(multi, pan, LPF)&lt;br /&gt;
     &lt;br /&gt;
    bands &amp;lt;- nbands(multi)&lt;br /&gt;
    pan_band &amp;lt;- bands + 1&lt;br /&gt;
    lpf_band &amp;lt;- bands + 2&lt;br /&gt;
     &lt;br /&gt;
    # Производим паншарпенинг каналов мультиспектрального растра по очереди&lt;br /&gt;
    pansharp_bands &amp;lt;- list()&lt;br /&gt;
    for (band in 1:bands) {&lt;br /&gt;
        subset &amp;lt;- all[[c(band, pan_band, lpf_band)]]&lt;br /&gt;
        raster &amp;lt;- calc(subset, pansharpFun)&lt;br /&gt;
        pansharp_bands[[band]] &amp;lt;- raster&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    pansharp &amp;lt;- stack(pansharp_bands) # итоговый растр&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ну, и наконец, последняя функция, носящая чисто утилитарный характер (позволяет использовать минимум параметров при сохранении растров) - обёртка к функции сохранения растра из пакета 'raster'. Идея состоит в том, что мы почти всегда будем хотеть сохранить результат в формате GeoTIFF, и при этом иметь целочисленный тип данных. Дело в том, что в большинстве случаев значения пикселей мультиспектрального растра - целые числа, а после паншарпенинга они становятся числами с плавающей запятой. Десятичные значения пикселя не несут никакой полезной информации, а занимают лишние сотни мегабайт места на диске. Использование целых чисел в качестве типа данных растра экономит более 0,5 Гб дискового пространства при паншарпенинге сцен WorldView-2.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
saveResult &amp;lt;- function(raster, path, format = 'GTiff', datatype = 'INT2S'){&lt;br /&gt;
    '  Сохраняет растр по указанному пути  '&lt;br /&gt;
    # @param raster - растр, который должен быть сохранён, объект типа Raser&lt;br /&gt;
    # @param path - путь к файлу (без расширения) - string&lt;br /&gt;
    # @param format - формат сохраняемого растра в соответствии с требованиями функции writeRaster() - string&lt;br /&gt;
    # @param datatype - тип данных сохраняемого растра в соответствии с требованиями функции to writeRaster() - string&lt;br /&gt;
     &lt;br /&gt;
    writeRaster(raster, &lt;br /&gt;
                path, &lt;br /&gt;
                format = format, &lt;br /&gt;
                datatype = datatype, &lt;br /&gt;
                overwrite = T)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
Посмотрим на результат работы скрипта.&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:R pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга в R]]&lt;br /&gt;
Результат можно сравнить с [http://%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox результатом паншарпенинга в Orfeo TollBox]:&lt;br /&gt;
[[Файл:OTB pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
Мы видим, что картинка, производимая нашим алгоритмом выглядит как-будто она обработана фильтром, увеличивающим резкость. Кроме того, на ней легче различить оттенки, чем на той, которая является результатом работы ''OTB''. Если копать глубже, то выяснится, что ''OTB'' сохранил диапазон значений исходного (очевидно, происходит нормализация данных на одном из этапов обработки), тогда как после использования нашего скрипта диапазон значений пикселей мультиспектрального снимка изменился кардинально. Это означает, что растр после паншарпенинга в ''OTB'' потенциально может быть использован для последующей радиометрической калибровки, а после паншарпенинга нашим скриптом - нет. Однако указанные различия в результатах работы нашего скрипта и ''OTB'' следует считать не недостатками, а особенностями, которые следует учитывать в работе.&lt;br /&gt;
&lt;br /&gt;
К очевидным же недостаткам использования ''R'' относится низкая скорость обработки изображений. К сожалению, в 'raster' не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье было продемонстрировано создание элементарного скрипта для паншарпенинга в R. отталкиваясь от приведённых здесь функций вы можете создавать собственные алгоритмы паншарпенинга или реализовывать чужие. К преимуществам использования R для паншарпенинга следует отнести широкий простор для кастомизации и творчества, а к недостаткам - низкую производительность, вызванную отсутствием мультитрединга.&lt;br /&gt;
&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://wiki.gis-lab.info/w/%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox Паншарпенинг в QGIS с использованием Orfeo ToolBox]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html#.D0.9F.D0.B0.D0.BD.D1.88.D0.B0.D1.80.D0.BF.D0.B5.D0.BD.D0.B8.D0.BD.D0.B3 Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7 [раздел Паншарпенинг в GRASS]]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21874</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21874"/>
		<updated>2015-04-18T23:30:39Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Реализация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую, привязку в ''R'' есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster'']. На основании функций, доступных в этом пакете мы и разработаем наш скрипт. В использовании он будет чрезвычайно прост:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(raster)&lt;br /&gt;
&lt;br /&gt;
pan &amp;lt;- raster('pan.tif') # загружаем панхроматический растр&lt;br /&gt;
multi &amp;lt;- brick('multi.tif') # загружаем мультиспектральный растр&lt;br /&gt;
pansharp &amp;lt;- processingPansharp(pan, multi) # производим паншарпенинг (эту функцию мы создадим)&lt;br /&gt;
output_path &amp;lt;- 'путь_и_имя_файла_без_расширения' # зададим путь для сохранения результата&lt;br /&gt;
saveResult(pansharp, output_path) # сохраним результат&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начнём создавать необходимые функции. Первая функция - самая простая. Она всего-лишь реализовывает формулу, представленную выше.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
pansharpFun &amp;lt;- function(raster){&lt;br /&gt;
    ' Эта функция производит паншарпенинг  ' &lt;br /&gt;
    # @param raster - объект типа Raster с тремя каналами: 1)с низким разрешением, 2) с высоким разрешением, 3) низкочастотная компонента растра с высоким разрешением&lt;br /&gt;
    # @return pansharpened_raster - подвергшийся паншарпенингу  объект типа Raster&lt;br /&gt;
    # pansharp = Lowres * Highres / LPF[Highres]&lt;br /&gt;
     &lt;br /&gt;
    pansharpened_raster &amp;lt;- (raster[,1] * raster[,2]) / raster[,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вторая функция будет вычислять низкочастотную составляющую растра с высоким разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
extractLPF &amp;lt;- function(pan, multi, filter = 'auto', fun = mean) {&lt;br /&gt;
    ' Возвращает низкочастотную компоненту растра с высоким разрешением &lt;br /&gt;
        с использованием скользящего окна, соответствующего размеру пикселя растра с низким разрешением '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, который в последствии будет подвергнут паншарпенингу, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return LPF - низкочатотная компонента растра с высоким разрешением, объект типа Raster&lt;br /&gt;
     &lt;br /&gt;
    # Расчитаем размер скользящего окна, если его параметры не заданы&lt;br /&gt;
    if (filter == 'auto') {&lt;br /&gt;
        pan_res &amp;lt;- res(pan) # (x, y) пространственное разрешение растра с высоким разрешением в единицах CRS&lt;br /&gt;
        multi_res &amp;lt;- res(multi) # (x, y) пространственное разрешение растра с низким разрешением в единицах CRS&lt;br /&gt;
        x_res_ratio &amp;lt;- round(multi_res[1]/pan_res[1])&lt;br /&gt;
        y_res_ratio &amp;lt;- round(multi_res[2]/pan_res[2])&lt;br /&gt;
        total &amp;lt;- x_res_ratio + y_res_ratio&lt;br /&gt;
        filter &amp;lt;- matrix(1, nc = x_res_ratio, nr = y_res_ratio)&lt;br /&gt;
        }&lt;br /&gt;
         &lt;br /&gt;
        # Убедимся, что у скользящего окна нечётное количество столбцов и строк (требование функции focal() )&lt;br /&gt;
        if (nrow(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- rbind(filter, 0)&lt;br /&gt;
        } &lt;br /&gt;
        if (ncol(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- cbind(filter, 0)&lt;br /&gt;
       &lt;br /&gt;
         &lt;br /&gt;
    LPF &amp;lt;- focal(pan, w = filter, fun = fun) # получаем низкочастотную компоненту при помощи функции focal() пакета 'raster'&lt;br /&gt;
     &lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Обратите внимание, что мы оставили возможность задавать пользовательские значения для параметров ''filter'' и ''fun'', что оставляет простор для возможных экспериментов.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим функцию, объединяющую две предыдущие и выдающую растр с улучшенным разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
processingPansharp &amp;lt;- function(pan, multi, filter = 'auto', fun = mean){&lt;br /&gt;
    ' Улучшает разрешение мультиспектрального растра за счёт панхроматического растра '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, чьё разрешение необходимо улучшить, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return pansharp - растер 'multi' с улучшенным разрешением, объект типа Raster&lt;br /&gt;
 &lt;br /&gt;
    LPF &amp;lt;- extractLPF(pan, multi, filter, fun)&lt;br /&gt;
         &lt;br /&gt;
    multi &amp;lt;- resample(multi, pan) # приводим экстент и разрешение мультиспектрального растра к панхроматическому&lt;br /&gt;
         &lt;br /&gt;
    all &amp;lt;- stack(multi, pan, LPF)&lt;br /&gt;
     &lt;br /&gt;
    bands &amp;lt;- nbands(multi)&lt;br /&gt;
    pan_band &amp;lt;- bands + 1&lt;br /&gt;
    lpf_band &amp;lt;- bands + 2&lt;br /&gt;
     &lt;br /&gt;
    # Производим паншарпенинг каналов мультиспектрального растра по очереди&lt;br /&gt;
    pansharp_bands &amp;lt;- list()&lt;br /&gt;
    for (band in 1:bands) {&lt;br /&gt;
        subset &amp;lt;- all[[c(band, pan_band, lpf_band)]]&lt;br /&gt;
        raster &amp;lt;- calc(subset, pansharpFun)&lt;br /&gt;
        pansharp_bands[[band]] &amp;lt;- raster&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    pansharp &amp;lt;- stack(pansharp_bands) # итоговый растр&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ну, и наконец, последняя функция, носящая чисто утилитарный характер (позволяет использовать минимум параметров при сохранении растров) - обёртка к функции сохранения растра из пакета 'raster'. Идея состоит в том, что мы почти всегда будем хотеть сохранить результат в формате GeoTIFF, и при этом иметь целочисленный тип данных. Дело в том, что в большинстве случаев значения пикселей мультиспектрального растра - целые числа, а после паншарпенинга они становятся числами с плавающей запятой. Десятичные значения пикселя не несут никакой полезной информации, а занимают лишние сотни мегабайт места на диске. Использование целых чисел в качестве типа данных растра экономит более 0,5 Гб дискового пространства при паншарпенинге сцен WorldView-2.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
saveResult &amp;lt;- function(raster, path, format = 'GTiff', datatype = 'INT2S'){&lt;br /&gt;
    '  Сохраняет растр по указанному пути  '&lt;br /&gt;
    # @param raster - растр, который должен быть сохранён, объект типа Raser&lt;br /&gt;
    # @param path - путь к файлу (без расширения) - string&lt;br /&gt;
    # @param format - формат сохраняемого растра в соответствии с требованиями функции writeRaster() - string&lt;br /&gt;
    # @param datatype - тип данных сохраняемого растра в соответствии с требованиями функции to writeRaster() - string&lt;br /&gt;
     &lt;br /&gt;
    writeRaster(raster, &lt;br /&gt;
                path, &lt;br /&gt;
                format = format, &lt;br /&gt;
                datatype = datatype, &lt;br /&gt;
                overwrite = T)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
Посмотрим на результат работы скрипта.&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:R pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга в R]]&lt;br /&gt;
Результат можно сравнить с [http://%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox результатом паншарпенинга в Orfeo TollBox]:&lt;br /&gt;
[[Файл:OTB pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
Мы видим, что картинка, производимая нашим алгоритмом выглядит как-будто она обработана фильтром, увеличивающим резкость. Кроме того, на ней легче различить оттенки, чем на той, которая является результатом работы ''OTB''. Если копать глубже, то выяснится, что ''OTB'' сохранил диапазон значений исходного (очевидно, происходит нормализация данных на одном из этапов обработки), тогда как после использования нашего скрипта диапазон значений пикселей мультиспектрального снимка изменился кардинально. Это означает, что растр после паншарпенинга в ''OTB'' потенциально может быть использован для последующей радиометрической калибровки, а после паншарпенинга нашим скриптом - нет. Однако указанные различия в результатах работы нашего скрипта и ''OTB'' следует считать не недостатками, а особенностями, которые следует учитывать в работе.&lt;br /&gt;
&lt;br /&gt;
К очевидным же недостаткам использования ''R'' относится низкая скорость обработки изображений. К сожалению, в 'raster' не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье было продемонстрировано создание элементарного скрипта для паншарпенинга в R. отталкиваясь от приведённых здесь функций вы можете создавать собственные алгоритмы паншарпенинга или реализовывать чужие. К преимуществам использования R для паншарпенинга следует отнести широкий простор для кастомизации и творчества, а к недостаткам - низкую производительность, вызванную отсутствием мультитрединга.&lt;br /&gt;
&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://wiki.gis-lab.info/w/%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox Паншарпенинг в QGIS с использованием Orfeo ToolBox]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html#.D0.9F.D0.B0.D0.BD.D1.88.D0.B0.D1.80.D0.BF.D0.B5.D0.BD.D0.B8.D0.BD.D0.B3 Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7 [раздел Паншарпенинг в GRASS]]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21873</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21873"/>
		<updated>2015-04-18T23:29:38Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Заключение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую привязку в ''R'' есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster'']. На основании функций, доступных в этом пакете мы и разработаем наш скрипт. В использовании он будет чрезвычайно прост:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(raster)&lt;br /&gt;
&lt;br /&gt;
pan &amp;lt;- raster('pan.tif') # загружаем панхроматический растр&lt;br /&gt;
multi &amp;lt;- brick('multi.tif') # загружаем мультиспектральный растр&lt;br /&gt;
pansharp &amp;lt;- processingPansharp(pan, multi) # производим паншарпенинг (эту функцию мы создадим)&lt;br /&gt;
output_path &amp;lt;- 'путь_и_имя_файла_без_расширения' # зададим путь для сохранения результата&lt;br /&gt;
saveResult(pansharp, output_path) # сохраним результат&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начнём создавать необходимые функции. Первая функция - самая простая. Она всего-лишь реализовывает формулу, представленную выше.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
pansharpFun &amp;lt;- function(raster){&lt;br /&gt;
    ' Эта функция производит паншарпенинг  ' &lt;br /&gt;
    # @param raster - объект типа Raster с тремя каналами: 1)с низким разрешением, 2) с высоким разрешением, 3) низкочастотная компонента растра с высоким разрешением&lt;br /&gt;
    # @return pansharpened_raster - подвергшийся паншарпенингу  объект типа Raster&lt;br /&gt;
    # pansharp = Lowres * Highres / LPF[Highres]&lt;br /&gt;
     &lt;br /&gt;
    pansharpened_raster &amp;lt;- (raster[,1] * raster[,2]) / raster[,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вторая функция будет вычислять низкочастотную составляющую растра с высоким разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
extractLPF &amp;lt;- function(pan, multi, filter = 'auto', fun = mean) {&lt;br /&gt;
    ' Возвращает низкочастотную компоненту растра с высоким разрешением &lt;br /&gt;
        с использованием скользящего окна, соответствующего размеру пикселя растра с низким разрешением '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, который в последствии будет подвергнут паншарпенингу, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return LPF - низкочатотная компонента растра с высоким разрешением, объект типа Raster&lt;br /&gt;
     &lt;br /&gt;
    # Расчитаем размер скользящего окна, если его параметры не заданы&lt;br /&gt;
    if (filter == 'auto') {&lt;br /&gt;
        pan_res &amp;lt;- res(pan) # (x, y) пространственное разрешение растра с высоким разрешением в единицах CRS&lt;br /&gt;
        multi_res &amp;lt;- res(multi) # (x, y) пространственное разрешение растра с низким разрешением в единицах CRS&lt;br /&gt;
        x_res_ratio &amp;lt;- round(multi_res[1]/pan_res[1])&lt;br /&gt;
        y_res_ratio &amp;lt;- round(multi_res[2]/pan_res[2])&lt;br /&gt;
        total &amp;lt;- x_res_ratio + y_res_ratio&lt;br /&gt;
        filter &amp;lt;- matrix(1, nc = x_res_ratio, nr = y_res_ratio)&lt;br /&gt;
        }&lt;br /&gt;
         &lt;br /&gt;
        # Убедимся, что у скользящего окна нечётное количество столбцов и строк (требование функции focal() )&lt;br /&gt;
        if (nrow(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- rbind(filter, 0)&lt;br /&gt;
        } &lt;br /&gt;
        if (ncol(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- cbind(filter, 0)&lt;br /&gt;
       &lt;br /&gt;
         &lt;br /&gt;
    LPF &amp;lt;- focal(pan, w = filter, fun = fun) # получаем низкочастотную компоненту при помощи функции focal() пакета 'raster'&lt;br /&gt;
     &lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Обратите внимание, что мы оставили возможность задавать пользовательские значения для параметров ''filter'' и ''fun'', что оставляет простор для возможных экспериментов.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим функцию, объединяющую две предыдущие и выдающую растр с улучшенным разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
processingPansharp &amp;lt;- function(pan, multi, filter = 'auto', fun = mean){&lt;br /&gt;
    ' Улучшает разрешение мультиспектрального растра за счёт панхроматического растра '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, чьё разрешение необходимо улучшить, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return pansharp - растер 'multi' с улучшенным разрешением, объект типа Raster&lt;br /&gt;
 &lt;br /&gt;
    LPF &amp;lt;- extractLPF(pan, multi, filter, fun)&lt;br /&gt;
         &lt;br /&gt;
    multi &amp;lt;- resample(multi, pan) # приводим экстент и разрешение мультиспектрального растра к панхроматическому&lt;br /&gt;
         &lt;br /&gt;
    all &amp;lt;- stack(multi, pan, LPF)&lt;br /&gt;
     &lt;br /&gt;
    bands &amp;lt;- nbands(multi)&lt;br /&gt;
    pan_band &amp;lt;- bands + 1&lt;br /&gt;
    lpf_band &amp;lt;- bands + 2&lt;br /&gt;
     &lt;br /&gt;
    # Производим паншарпенинг каналов мультиспектрального растра по очереди&lt;br /&gt;
    pansharp_bands &amp;lt;- list()&lt;br /&gt;
    for (band in 1:bands) {&lt;br /&gt;
        subset &amp;lt;- all[[c(band, pan_band, lpf_band)]]&lt;br /&gt;
        raster &amp;lt;- calc(subset, pansharpFun)&lt;br /&gt;
        pansharp_bands[[band]] &amp;lt;- raster&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    pansharp &amp;lt;- stack(pansharp_bands) # итоговый растр&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ну, и наконец, последняя функция, носящая чисто утилитарный характер (позволяет использовать минимум параметров при сохранении растров) - обёртка к функции сохранения растра из пакета 'raster'. Идея состоит в том, что мы почти всегда будем хотеть сохранить результат в формате GeoTIFF, и при этом иметь целочисленный тип данных. Дело в том, что в большинстве случаев значения пикселей мультиспектрального растра - целые числа, а после паншарпенинга они становятся числами с плавающей запятой. Десятичные значения пикселя не несут никакой полезной информации, а занимают лишние сотни мегабайт места на диске. Использование целых чисел в качестве типа данных растра экономит более 0,5 Гб дискового пространства при паншарпенинге сцен WorldView-2.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
saveResult &amp;lt;- function(raster, path, format = 'GTiff', datatype = 'INT2S'){&lt;br /&gt;
    '  Сохраняет растр по указанному пути  '&lt;br /&gt;
    # @param raster - растр, который должен быть сохранён, объект типа Raser&lt;br /&gt;
    # @param path - путь к файлу (без расширения) - string&lt;br /&gt;
    # @param format - формат сохраняемого растра в соответствии с требованиями функции writeRaster() - string&lt;br /&gt;
    # @param datatype - тип данных сохраняемого растра в соответствии с требованиями функции to writeRaster() - string&lt;br /&gt;
     &lt;br /&gt;
    writeRaster(raster, &lt;br /&gt;
                path, &lt;br /&gt;
                format = format, &lt;br /&gt;
                datatype = datatype, &lt;br /&gt;
                overwrite = T)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
Посмотрим на результат работы скрипта.&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:R pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга в R]]&lt;br /&gt;
Результат можно сравнить с [http://%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox результатом паншарпенинга в Orfeo TollBox]:&lt;br /&gt;
[[Файл:OTB pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
Мы видим, что картинка, производимая нашим алгоритмом выглядит как-будто она обработана фильтром, увеличивающим резкость. Кроме того, на ней легче различить оттенки, чем на той, которая является результатом работы ''OTB''. Если копать глубже, то выяснится, что ''OTB'' сохранил диапазон значений исходного (очевидно, происходит нормализация данных на одном из этапов обработки), тогда как после использования нашего скрипта диапазон значений пикселей мультиспектрального снимка изменился кардинально. Это означает, что растр после паншарпенинга в ''OTB'' потенциально может быть использован для последующей радиометрической калибровки, а после паншарпенинга нашим скриптом - нет. Однако указанные различия в результатах работы нашего скрипта и ''OTB'' следует считать не недостатками, а особенностями, которые следует учитывать в работе.&lt;br /&gt;
&lt;br /&gt;
К очевидным же недостаткам использования ''R'' относится низкая скорость обработки изображений. К сожалению, в 'raster' не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье было продемонстрировано создание элементарного скрипта для паншарпенинга в R. отталкиваясь от приведённых здесь функций вы можете создавать собственные алгоритмы паншарпенинга или реализовывать чужие. К преимуществам использования R для паншарпенинга следует отнести широкий простор для кастомизации и творчества, а к недостаткам - низкую производительность, вызванную отсутствием мультитрединга.&lt;br /&gt;
&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://wiki.gis-lab.info/w/%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox Паншарпенинг в QGIS с использованием Orfeo ToolBox]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html#.D0.9F.D0.B0.D0.BD.D1.88.D0.B0.D1.80.D0.BF.D0.B5.D0.BD.D0.B8.D0.BD.D0.B3 Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7 [раздел Паншарпенинг в GRASS]]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21872</id>
		<title>Паншарпенинг в QGIS с использованием Orfeo ToolBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21872"/>
		<updated>2015-04-18T23:17:34Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Ссылки по теме */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в QGIS посредством инструментария Orfeo ToolBox. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/01/pansharpening-in-qgis-using-qtb.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
При работе с данными дистанционного зондирования Земли зачастую приходится решать задачу улучшения снимков с низким разрешением за счёт снимков с высоким. В QGIS нет встроенного инструмента паншарпенинга, но есть возможность подключения инструментов [https://www.orfeo-toolbox.org/ Orfeo ToolBox] (OTB), где они есть.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Паншарпенинг в OTB и QGIS==&lt;br /&gt;
С программной точки зрения процесс паншарпенинга делится на две стадии: 1) подготовительную, во время которой разрешение и экстент мультиспектрального растра приводится в соответствие с экстентом и разрешением панхроматического растра (это необходимо для проведения операций растровой алгебры, вовлекающих оба растра); 2) непосредственно паншарпенинг.&lt;br /&gt;
===Использование утилиты OTB===&lt;br /&gt;
OTB по своей сути является набором консольных утилит и приложений. За паншарпенинг отвечает приложение [https://www.orfeo-toolbox.org//CookBook/CookBooksu36.html#x57-770004.2.2 otbcli_BundleToPerfectSensor]. Оно совмещает в себе обе стадии, описанные выше, и запускается следующей консольной командой: &lt;br /&gt;
  otbcli_BundleToPerfectSensor -inp pan_image -inxs xs_image -out output_image&lt;br /&gt;
где pan_image, xs_image и output_image соответсвенно - пути к панхроматическому, мультиспектральному и результирующему растрам. О дополнительных опциях читайте в документации.&lt;br /&gt;
===Запуск паншарпенинга из QGIS===&lt;br /&gt;
В QGIS инструменты OTB подключаются через модуль Processing. После установки OTB на компьютер  зайдите в QGIS в настройки модуля Processing (''Processing -&amp;gt; Options -&amp;gt; Providers'') и активируйте интеграцию с OTB ([http://docs.qgis.org/2.6/ru/docs/user_manual/processing/3rdParty.html#orfeo-toolbox инструкция] на английском):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Enable OTB.png|center]]&lt;br /&gt;
&lt;br /&gt;
Теперь в ''Processing Toolbox'' у вас появится набор инструментов ''Orfeo Toolbox''. К сожалению, в инструментарий входят только консольные утилиты, но не приложения (то есть модуль otbcli_BundleToPerfectSensor не доступен из QGIS). Поэтому не спешите сразу запускать утилиты паншарпенинга (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; [https://www.orfeo-toolbox.org/CookBook/CookBooksu88.html#x119-4740005.4.9 Pansharpening]''), так как здесь требуется, чтобы все входные растры имели идентичный экстент и разрешение, то есть выполняется только вторая стадия. Чтобы выполнить первую - необходимо воспользоваться модулем [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Superimpose sensor''] (''Orfeo Toolbox -&amp;gt; Geometry -&amp;gt; Superimpose sensor'').&lt;br /&gt;
&lt;br /&gt;
Модуль ''Superimpose sensor'' имеет следующие параметры:&lt;br /&gt;
* '''Reference input''' - базовое изображение, к параметрам которого будет приведено обрабатываемое изображение (здесь выбираем панхроматическое).&lt;br /&gt;
* '''The image to reproject''' - изображение, чьи параметры будут приведены к параметрам базового изображения (здесь выбираем мультиспектральное).&lt;br /&gt;
* '''Default elevation''' - средняя высота изображения над эллипсоидом.&lt;br /&gt;
* '''Spacing of the deformation field''' - интервал расстояния поля деформации (coarser deformation field).&lt;br /&gt;
* '''Interpolation''' - тип интерполяции.&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти. (Если изменение дефолтного значения [http://gis-lab.info/forum/viewtopic.php?f=3&amp;amp;t=18913&amp;amp;p=127347#p127344 приводит к вылету модуля] - обновите Processing.) &lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Superimpose sensor.png|thumb|center|x500px|Интерфейс модуля Superimpose sensor]]&lt;br /&gt;
&lt;br /&gt;
После трансформации мультиспектрального растра можно переходить непосредственно к паншарпенингу. Модуль [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Pansharpening(rsc)''] имеет следующие параметры:&lt;br /&gt;
* '''Input PAN image''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Input XS image''' - мультиспектральное изображение, приведённое к параметрам панхроматического.&lt;br /&gt;
* '''Algorithm''' - алгоритм для паншарпенинга (не изменяется, для использования других алгоритмов (LMVM и Bayesian) используйте соответсвующие модули ''Pansharpening(bayes) и Pansharpening(lvmv)'')&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти. (Если изменение дефолтного значения [http://gis-lab.info/forum/viewtopic.php?f=3&amp;amp;t=18913&amp;amp;p=127347#p127344 приводит к вылету модуля] - обновите Processing.) &lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp dialogue.png|thumb|center|x500px|Интерфейс модуля ''Pansharpening(rsc)'']]&lt;br /&gt;
&lt;br /&gt;
Давайте посмотрим на результат паншарпенинга при помощи указанных модулей.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:OTB pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
&lt;br /&gt;
Результат выглядит довольно неплохо, и что немаловажно, был получен очень бытро - ''OTB'' использует многопоточную обработку и задействует все ядра вашего процессора.&lt;br /&gt;
&lt;br /&gt;
===Создание модели===&lt;br /&gt;
Согласитесь, гораздо удобнее было бы обойтись без промежуточных операций и растров. Этого можно добиться путём [http://gis-lab.info/qa/sextante-qgis.html#.D0.9F.D0.BE.D1.81.D1.82.D1.80.D0.BE.D0.B8.D1.82.D0.B5.D0.BB.D1.8C_.D0.BC.D0.BE.D0.B4.D0.B5.D0.BB.D0.B5.D0.B9_.28Modeler.29 создания соответствующей модели для Processing Toolbox]. В качестве входных параметров модели следует использовать панхроматический и мультиспектральный растры. Последний сначала подготавливается при помощи ''Superimpose sensor'', а затем обрабатывается при помощи ''Pansharpening(rsc)''.&lt;br /&gt;
[[Файл:Model pansharp OTB.png|thumb|center|x550px|Модель паншарпенига]]&lt;br /&gt;
Интерфейс модели будет выглядеть следующим образом:&lt;br /&gt;
* '''High resolution panchrome raster''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Low resolution raster''' - мультиспектральное изображение низкого разрешения.&lt;br /&gt;
* '''pansharpened OTB''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp model dialogue.png|thumb|center|x500px|Интерфейс модели паншарпенига]]&lt;br /&gt;
====Файл модели====&lt;br /&gt;
Вы можете скачать модель в виде текстового файла [http://wiki.gis-lab.info/images/5/56/Pansharpening_OTBl.zip отсюда]. Архив необходимо распаковать в папку &amp;quot;.../.qgis2/processing/models/&amp;quot;. После этого она появится у вас в списке моделей Processing toolbox (необходим рестарт QGIS).&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье был рассмотрен процесс паншарпенинга изображений при помощи инструментов OTB, запускаемых при помощи модуля Processing в QGIS. OTB позволяет получить качественный и быстрый (благодаря многопоточной обработке) результат. Для паншарпенинга в QGIS удобнее всего создать соответствующую модель при помощи Model Builder, чтобы избежать проволочек, связанных с промежуточными файлами.&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://wiki.gis-lab.info/w/%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R Паншарпенинг при помощи R]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html#.D0.9F.D0.B0.D0.BD.D1.88.D0.B0.D1.80.D0.BF.D0.B5.D0.BD.D0.B8.D0.BD.D0.B3 Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7 [раздел Паншарпенинг в GRASS]]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21871</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21871"/>
		<updated>2015-04-18T23:16:56Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую привязку в ''R'' есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster'']. На основании функций, доступных в этом пакете мы и разработаем наш скрипт. В использовании он будет чрезвычайно прост:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(raster)&lt;br /&gt;
&lt;br /&gt;
pan &amp;lt;- raster('pan.tif') # загружаем панхроматический растр&lt;br /&gt;
multi &amp;lt;- brick('multi.tif') # загружаем мультиспектральный растр&lt;br /&gt;
pansharp &amp;lt;- processingPansharp(pan, multi) # производим паншарпенинг (эту функцию мы создадим)&lt;br /&gt;
output_path &amp;lt;- 'путь_и_имя_файла_без_расширения' # зададим путь для сохранения результата&lt;br /&gt;
saveResult(pansharp, output_path) # сохраним результат&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начнём создавать необходимые функции. Первая функция - самая простая. Она всего-лишь реализовывает формулу, представленную выше.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
pansharpFun &amp;lt;- function(raster){&lt;br /&gt;
    ' Эта функция производит паншарпенинг  ' &lt;br /&gt;
    # @param raster - объект типа Raster с тремя каналами: 1)с низким разрешением, 2) с высоким разрешением, 3) низкочастотная компонента растра с высоким разрешением&lt;br /&gt;
    # @return pansharpened_raster - подвергшийся паншарпенингу  объект типа Raster&lt;br /&gt;
    # pansharp = Lowres * Highres / LPF[Highres]&lt;br /&gt;
     &lt;br /&gt;
    pansharpened_raster &amp;lt;- (raster[,1] * raster[,2]) / raster[,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вторая функция будет вычислять низкочастотную составляющую растра с высоким разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
extractLPF &amp;lt;- function(pan, multi, filter = 'auto', fun = mean) {&lt;br /&gt;
    ' Возвращает низкочастотную компоненту растра с высоким разрешением &lt;br /&gt;
        с использованием скользящего окна, соответствующего размеру пикселя растра с низким разрешением '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, который в последствии будет подвергнут паншарпенингу, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return LPF - низкочатотная компонента растра с высоким разрешением, объект типа Raster&lt;br /&gt;
     &lt;br /&gt;
    # Расчитаем размер скользящего окна, если его параметры не заданы&lt;br /&gt;
    if (filter == 'auto') {&lt;br /&gt;
        pan_res &amp;lt;- res(pan) # (x, y) пространственное разрешение растра с высоким разрешением в единицах CRS&lt;br /&gt;
        multi_res &amp;lt;- res(multi) # (x, y) пространственное разрешение растра с низким разрешением в единицах CRS&lt;br /&gt;
        x_res_ratio &amp;lt;- round(multi_res[1]/pan_res[1])&lt;br /&gt;
        y_res_ratio &amp;lt;- round(multi_res[2]/pan_res[2])&lt;br /&gt;
        total &amp;lt;- x_res_ratio + y_res_ratio&lt;br /&gt;
        filter &amp;lt;- matrix(1, nc = x_res_ratio, nr = y_res_ratio)&lt;br /&gt;
        }&lt;br /&gt;
         &lt;br /&gt;
        # Убедимся, что у скользящего окна нечётное количество столбцов и строк (требование функции focal() )&lt;br /&gt;
        if (nrow(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- rbind(filter, 0)&lt;br /&gt;
        } &lt;br /&gt;
        if (ncol(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- cbind(filter, 0)&lt;br /&gt;
       &lt;br /&gt;
         &lt;br /&gt;
    LPF &amp;lt;- focal(pan, w = filter, fun = fun) # получаем низкочастотную компоненту при помощи функции focal() пакета 'raster'&lt;br /&gt;
     &lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Обратите внимание, что мы оставили возможность задавать пользовательские значения для параметров ''filter'' и ''fun'', что оставляет простор для возможных экспериментов.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим функцию, объединяющую две предыдущие и выдающую растр с улучшенным разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
processingPansharp &amp;lt;- function(pan, multi, filter = 'auto', fun = mean){&lt;br /&gt;
    ' Улучшает разрешение мультиспектрального растра за счёт панхроматического растра '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, чьё разрешение необходимо улучшить, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return pansharp - растер 'multi' с улучшенным разрешением, объект типа Raster&lt;br /&gt;
 &lt;br /&gt;
    LPF &amp;lt;- extractLPF(pan, multi, filter, fun)&lt;br /&gt;
         &lt;br /&gt;
    multi &amp;lt;- resample(multi, pan) # приводим экстент и разрешение мультиспектрального растра к панхроматическому&lt;br /&gt;
         &lt;br /&gt;
    all &amp;lt;- stack(multi, pan, LPF)&lt;br /&gt;
     &lt;br /&gt;
    bands &amp;lt;- nbands(multi)&lt;br /&gt;
    pan_band &amp;lt;- bands + 1&lt;br /&gt;
    lpf_band &amp;lt;- bands + 2&lt;br /&gt;
     &lt;br /&gt;
    # Производим паншарпенинг каналов мультиспектрального растра по очереди&lt;br /&gt;
    pansharp_bands &amp;lt;- list()&lt;br /&gt;
    for (band in 1:bands) {&lt;br /&gt;
        subset &amp;lt;- all[[c(band, pan_band, lpf_band)]]&lt;br /&gt;
        raster &amp;lt;- calc(subset, pansharpFun)&lt;br /&gt;
        pansharp_bands[[band]] &amp;lt;- raster&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    pansharp &amp;lt;- stack(pansharp_bands) # итоговый растр&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ну, и наконец, последняя функция, носящая чисто утилитарный характер (позволяет использовать минимум параметров при сохранении растров) - обёртка к функции сохранения растра из пакета 'raster'. Идея состоит в том, что мы почти всегда будем хотеть сохранить результат в формате GeoTIFF, и при этом иметь целочисленный тип данных. Дело в том, что в большинстве случаев значения пикселей мультиспектрального растра - целые числа, а после паншарпенинга они становятся числами с плавающей запятой. Десятичные значения пикселя не несут никакой полезной информации, а занимают лишние сотни мегабайт места на диске. Использование целых чисел в качестве типа данных растра экономит более 0,5 Гб дискового пространства при паншарпенинге сцен WorldView-2.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
saveResult &amp;lt;- function(raster, path, format = 'GTiff', datatype = 'INT2S'){&lt;br /&gt;
    '  Сохраняет растр по указанному пути  '&lt;br /&gt;
    # @param raster - растр, который должен быть сохранён, объект типа Raser&lt;br /&gt;
    # @param path - путь к файлу (без расширения) - string&lt;br /&gt;
    # @param format - формат сохраняемого растра в соответствии с требованиями функции writeRaster() - string&lt;br /&gt;
    # @param datatype - тип данных сохраняемого растра в соответствии с требованиями функции to writeRaster() - string&lt;br /&gt;
     &lt;br /&gt;
    writeRaster(raster, &lt;br /&gt;
                path, &lt;br /&gt;
                format = format, &lt;br /&gt;
                datatype = datatype, &lt;br /&gt;
                overwrite = T)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
Посмотрим на результат работы скрипта.&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:R pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга в R]]&lt;br /&gt;
Результат можно сравнить с [http://%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox результатом паншарпенинга в Orfeo TollBox]:&lt;br /&gt;
[[Файл:OTB pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
Мы видим, что картинка, производимая нашим алгоритмом выглядит как-будто она обработана фильтром, увеличивающим резкость. Кроме того, на ней легче различить оттенки, чем на той, которая является результатом работы ''OTB''. Если копать глубже, то выяснится, что ''OTB'' сохранил диапазон значений исходного (очевидно, происходит нормализация данных на одном из этапов обработки), тогда как после использования нашего скрипта диапазон значений пикселей мультиспектрального снимка изменился кардинально. Это означает, что растр после паншарпенинга в ''OTB'' потенциально может быть использован для последующей радиометрической калибровки, а после паншарпенинга нашим скриптом - нет. Однако указанные различия в результатах работы нашего скрипта и ''OTB'' следует считать не недостатками, а особенностями, которые следует учитывать в работе.&lt;br /&gt;
&lt;br /&gt;
К очевидным же недостаткам использования ''R'' относится низкая скорость обработки изображений. К сожалению, в 'raster' не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://wiki.gis-lab.info/w/%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox Паншарпенинг в QGIS с использованием Orfeo ToolBox]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html#.D0.9F.D0.B0.D0.BD.D1.88.D0.B0.D1.80.D0.BF.D0.B5.D0.BD.D0.B8.D0.BD.D0.B3 Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7 [раздел Паншарпенинг в GRASS]]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21870</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21870"/>
		<updated>2015-04-18T22:51:01Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Результаты и обсуждение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую привязку в ''R'' есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster'']. На основании функций, доступных в этом пакете мы и разработаем наш скрипт. В использовании он будет чрезвычайно прост:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(raster)&lt;br /&gt;
&lt;br /&gt;
pan &amp;lt;- raster('pan.tif') # загружаем панхроматический растр&lt;br /&gt;
multi &amp;lt;- brick('multi.tif') # загружаем мультиспектральный растр&lt;br /&gt;
pansharp &amp;lt;- processingPansharp(pan, multi) # производим паншарпенинг (эту функцию мы создадим)&lt;br /&gt;
output_path &amp;lt;- 'путь_и_имя_файла_без_расширения' # зададим путь для сохранения результата&lt;br /&gt;
saveResult(pansharp, output_path) # сохраним результат&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начнём создавать необходимые функции. Первая функция - самая простая. Она всего-лишь реализовывает формулу, представленную выше.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
pansharpFun &amp;lt;- function(raster){&lt;br /&gt;
    ' Эта функция производит паншарпенинг  ' &lt;br /&gt;
    # @param raster - объект типа Raster с тремя каналами: 1)с низким разрешением, 2) с высоким разрешением, 3) низкочастотная компонента растра с высоким разрешением&lt;br /&gt;
    # @return pansharpened_raster - подвергшийся паншарпенингу  объект типа Raster&lt;br /&gt;
    # pansharp = Lowres * Highres / LPF[Highres]&lt;br /&gt;
     &lt;br /&gt;
    pansharpened_raster &amp;lt;- (raster[,1] * raster[,2]) / raster[,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вторая функция будет вычислять низкочастотную составляющую растра с высоким разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
extractLPF &amp;lt;- function(pan, multi, filter = 'auto', fun = mean) {&lt;br /&gt;
    ' Возвращает низкочастотную компоненту растра с высоким разрешением &lt;br /&gt;
        с использованием скользящего окна, соответствующего размеру пикселя растра с низким разрешением '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, который в последствии будет подвергнут паншарпенингу, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return LPF - низкочатотная компонента растра с высоким разрешением, объект типа Raster&lt;br /&gt;
     &lt;br /&gt;
    # Расчитаем размер скользящего окна, если его параметры не заданы&lt;br /&gt;
    if (filter == 'auto') {&lt;br /&gt;
        pan_res &amp;lt;- res(pan) # (x, y) пространственное разрешение растра с высоким разрешением в единицах CRS&lt;br /&gt;
        multi_res &amp;lt;- res(multi) # (x, y) пространственное разрешение растра с низким разрешением в единицах CRS&lt;br /&gt;
        x_res_ratio &amp;lt;- round(multi_res[1]/pan_res[1])&lt;br /&gt;
        y_res_ratio &amp;lt;- round(multi_res[2]/pan_res[2])&lt;br /&gt;
        total &amp;lt;- x_res_ratio + y_res_ratio&lt;br /&gt;
        filter &amp;lt;- matrix(1, nc = x_res_ratio, nr = y_res_ratio)&lt;br /&gt;
        }&lt;br /&gt;
         &lt;br /&gt;
        # Убедимся, что у скользящего окна нечётное количество столбцов и строк (требование функции focal() )&lt;br /&gt;
        if (nrow(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- rbind(filter, 0)&lt;br /&gt;
        } &lt;br /&gt;
        if (ncol(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- cbind(filter, 0)&lt;br /&gt;
       &lt;br /&gt;
         &lt;br /&gt;
    LPF &amp;lt;- focal(pan, w = filter, fun = fun) # получаем низкочастотную компоненту при помощи функции focal() пакета 'raster'&lt;br /&gt;
     &lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Обратите внимание, что мы оставили возможность задавать пользовательские значения для параметров ''filter'' и ''fun'', что оставляет простор для возможных экспериментов.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим функцию, объединяющую две предыдущие и выдающую растр с улучшенным разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
processingPansharp &amp;lt;- function(pan, multi, filter = 'auto', fun = mean){&lt;br /&gt;
    ' Улучшает разрешение мультиспектрального растра за счёт панхроматического растра '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, чьё разрешение необходимо улучшить, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return pansharp - растер 'multi' с улучшенным разрешением, объект типа Raster&lt;br /&gt;
 &lt;br /&gt;
    LPF &amp;lt;- extractLPF(pan, multi, filter, fun)&lt;br /&gt;
         &lt;br /&gt;
    multi &amp;lt;- resample(multi, pan) # приводим экстент и разрешение мультиспектрального растра к панхроматическому&lt;br /&gt;
         &lt;br /&gt;
    all &amp;lt;- stack(multi, pan, LPF)&lt;br /&gt;
     &lt;br /&gt;
    bands &amp;lt;- nbands(multi)&lt;br /&gt;
    pan_band &amp;lt;- bands + 1&lt;br /&gt;
    lpf_band &amp;lt;- bands + 2&lt;br /&gt;
     &lt;br /&gt;
    # Производим паншарпенинг каналов мультиспектрального растра по очереди&lt;br /&gt;
    pansharp_bands &amp;lt;- list()&lt;br /&gt;
    for (band in 1:bands) {&lt;br /&gt;
        subset &amp;lt;- all[[c(band, pan_band, lpf_band)]]&lt;br /&gt;
        raster &amp;lt;- calc(subset, pansharpFun)&lt;br /&gt;
        pansharp_bands[[band]] &amp;lt;- raster&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    pansharp &amp;lt;- stack(pansharp_bands) # итоговый растр&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ну, и наконец, последняя функция, носящая чисто утилитарный характер (позволяет использовать минимум параметров при сохранении растров) - обёртка к функции сохранения растра из пакета 'raster'. Идея состоит в том, что мы почти всегда будем хотеть сохранить результат в формате GeoTIFF, и при этом иметь целочисленный тип данных. Дело в том, что в большинстве случаев значения пикселей мультиспектрального растра - целые числа, а после паншарпенинга они становятся числами с плавающей запятой. Десятичные значения пикселя не несут никакой полезной информации, а занимают лишние сотни мегабайт места на диске. Использование целых чисел в качестве типа данных растра экономит более 0,5 Гб дискового пространства при паншарпенинге сцен WorldView-2.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
saveResult &amp;lt;- function(raster, path, format = 'GTiff', datatype = 'INT2S'){&lt;br /&gt;
    '  Сохраняет растр по указанному пути  '&lt;br /&gt;
    # @param raster - растр, который должен быть сохранён, объект типа Raser&lt;br /&gt;
    # @param path - путь к файлу (без расширения) - string&lt;br /&gt;
    # @param format - формат сохраняемого растра в соответствии с требованиями функции writeRaster() - string&lt;br /&gt;
    # @param datatype - тип данных сохраняемого растра в соответствии с требованиями функции to writeRaster() - string&lt;br /&gt;
     &lt;br /&gt;
    writeRaster(raster, &lt;br /&gt;
                path, &lt;br /&gt;
                format = format, &lt;br /&gt;
                datatype = datatype, &lt;br /&gt;
                overwrite = T)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
Посмотрим на результат работы скрипта.&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:R pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга в R]]&lt;br /&gt;
Результат можно сравнить с [http://%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox результатом паншарпенинга в Orfeo TollBox]:&lt;br /&gt;
[[Файл:OTB pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
Мы видим, что картинка, производимая нашим алгоритмом выглядит как-будто она обработана фильтром, увеличивающим резкость. Кроме того, на ней легче различить оттенки, чем на той, которая является результатом работы ''OTB''. Если копать глубже, то выяснится, что ''OTB'' сохранил (более-менее) диапазон значений исходного (очевидно, происходит нормализация данных на одном из этапов обработки), тогда как после использования нашего скрипта диапазон значений пикселей мультиспектрального снимка изменился кардинально. Это означает, что растр после паншарпенинга в ''OTB'' потенциально может быть использован для последующей радиометрической калибровки, а после паншарпенинга нашим скриптом - нет. Однако указанные различия в результатах работы нашего скрипта и ''OTB'' следует считать не недостатками, а особенностями, которые следует учитывать в работе.&lt;br /&gt;
&lt;br /&gt;
К очевидным недостаткам использования ''R'' относится низкая скорость обработки изображений. К сожалению, в 'raster' не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
&lt;br /&gt;
==Скрипт для Processing Tollbox в QGIS==&lt;br /&gt;
==Заключение==&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21869</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21869"/>
		<updated>2015-04-18T22:27:57Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Результаты и обсуждение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую привязку в ''R'' есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster'']. На основании функций, доступных в этом пакете мы и разработаем наш скрипт. В использовании он будет чрезвычайно прост:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(raster)&lt;br /&gt;
&lt;br /&gt;
pan &amp;lt;- raster('pan.tif') # загружаем панхроматический растр&lt;br /&gt;
multi &amp;lt;- brick('multi.tif') # загружаем мультиспектральный растр&lt;br /&gt;
pansharp &amp;lt;- processingPansharp(pan, multi) # производим паншарпенинг (эту функцию мы создадим)&lt;br /&gt;
output_path &amp;lt;- 'путь_и_имя_файла_без_расширения' # зададим путь для сохранения результата&lt;br /&gt;
saveResult(pansharp, output_path) # сохраним результат&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начнём создавать необходимые функции. Первая функция - самая простая. Она всего-лишь реализовывает формулу, представленную выше.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
pansharpFun &amp;lt;- function(raster){&lt;br /&gt;
    ' Эта функция производит паншарпенинг  ' &lt;br /&gt;
    # @param raster - объект типа Raster с тремя каналами: 1)с низким разрешением, 2) с высоким разрешением, 3) низкочастотная компонента растра с высоким разрешением&lt;br /&gt;
    # @return pansharpened_raster - подвергшийся паншарпенингу  объект типа Raster&lt;br /&gt;
    # pansharp = Lowres * Highres / LPF[Highres]&lt;br /&gt;
     &lt;br /&gt;
    pansharpened_raster &amp;lt;- (raster[,1] * raster[,2]) / raster[,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вторая функция будет вычислять низкочастотную составляющую растра с высоким разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
extractLPF &amp;lt;- function(pan, multi, filter = 'auto', fun = mean) {&lt;br /&gt;
    ' Возвращает низкочастотную компоненту растра с высоким разрешением &lt;br /&gt;
        с использованием скользящего окна, соответствующего размеру пикселя растра с низким разрешением '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, который в последствии будет подвергнут паншарпенингу, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return LPF - низкочатотная компонента растра с высоким разрешением, объект типа Raster&lt;br /&gt;
     &lt;br /&gt;
    # Расчитаем размер скользящего окна, если его параметры не заданы&lt;br /&gt;
    if (filter == 'auto') {&lt;br /&gt;
        pan_res &amp;lt;- res(pan) # (x, y) пространственное разрешение растра с высоким разрешением в единицах CRS&lt;br /&gt;
        multi_res &amp;lt;- res(multi) # (x, y) пространственное разрешение растра с низким разрешением в единицах CRS&lt;br /&gt;
        x_res_ratio &amp;lt;- round(multi_res[1]/pan_res[1])&lt;br /&gt;
        y_res_ratio &amp;lt;- round(multi_res[2]/pan_res[2])&lt;br /&gt;
        total &amp;lt;- x_res_ratio + y_res_ratio&lt;br /&gt;
        filter &amp;lt;- matrix(1, nc = x_res_ratio, nr = y_res_ratio)&lt;br /&gt;
        }&lt;br /&gt;
         &lt;br /&gt;
        # Убедимся, что у скользящего окна нечётное количество столбцов и строк (требование функции focal() )&lt;br /&gt;
        if (nrow(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- rbind(filter, 0)&lt;br /&gt;
        } &lt;br /&gt;
        if (ncol(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- cbind(filter, 0)&lt;br /&gt;
       &lt;br /&gt;
         &lt;br /&gt;
    LPF &amp;lt;- focal(pan, w = filter, fun = fun) # получаем низкочастотную компоненту при помощи функции focal() пакета 'raster'&lt;br /&gt;
     &lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Обратите внимание, что мы оставили возможность задавать пользовательские значения для параметров ''filter'' и ''fun'', что оставляет простор для возможных экспериментов.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим функцию, объединяющую две предыдущие и выдающую растр с улучшенным разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
processingPansharp &amp;lt;- function(pan, multi, filter = 'auto', fun = mean){&lt;br /&gt;
    ' Улучшает разрешение мультиспектрального растра за счёт панхроматического растра '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, чьё разрешение необходимо улучшить, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return pansharp - растер 'multi' с улучшенным разрешением, объект типа Raster&lt;br /&gt;
 &lt;br /&gt;
    LPF &amp;lt;- extractLPF(pan, multi, filter, fun)&lt;br /&gt;
         &lt;br /&gt;
    multi &amp;lt;- resample(multi, pan) # приводим экстент и разрешение мультиспектрального растра к панхроматическому&lt;br /&gt;
         &lt;br /&gt;
    all &amp;lt;- stack(multi, pan, LPF)&lt;br /&gt;
     &lt;br /&gt;
    bands &amp;lt;- nbands(multi)&lt;br /&gt;
    pan_band &amp;lt;- bands + 1&lt;br /&gt;
    lpf_band &amp;lt;- bands + 2&lt;br /&gt;
     &lt;br /&gt;
    # Производим паншарпенинг каналов мультиспектрального растра по очереди&lt;br /&gt;
    pansharp_bands &amp;lt;- list()&lt;br /&gt;
    for (band in 1:bands) {&lt;br /&gt;
        subset &amp;lt;- all[[c(band, pan_band, lpf_band)]]&lt;br /&gt;
        raster &amp;lt;- calc(subset, pansharpFun)&lt;br /&gt;
        pansharp_bands[[band]] &amp;lt;- raster&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    pansharp &amp;lt;- stack(pansharp_bands) # итоговый растр&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ну, и наконец, последняя функция, носящая чисто утилитарный характер (позволяет использовать минимум параметров при сохранении растров) - обёртка к функции сохранения растра из пакета 'raster'. Идея состоит в том, что мы почти всегда будем хотеть сохранить результат в формате GeoTIFF, и при этом иметь целочисленный тип данных. Дело в том, что в большинстве случаев значения пикселей мультиспектрального растра - целые числа, а после паншарпенинга они становятся числами с плавающей запятой. Десятичные значения пикселя не несут никакой полезной информации, а занимают лишние сотни мегабайт места на диске. Использование целых чисел в качестве типа данных растра экономит более 0,5 Гб дискового пространства при паншарпенинге сцен WorldView-2.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
saveResult &amp;lt;- function(raster, path, format = 'GTiff', datatype = 'INT2S'){&lt;br /&gt;
    '  Сохраняет растр по указанному пути  '&lt;br /&gt;
    # @param raster - растр, который должен быть сохранён, объект типа Raser&lt;br /&gt;
    # @param path - путь к файлу (без расширения) - string&lt;br /&gt;
    # @param format - формат сохраняемого растра в соответствии с требованиями функции writeRaster() - string&lt;br /&gt;
    # @param datatype - тип данных сохраняемого растра в соответствии с требованиями функции to writeRaster() - string&lt;br /&gt;
     &lt;br /&gt;
    writeRaster(raster, &lt;br /&gt;
                path, &lt;br /&gt;
                format = format, &lt;br /&gt;
                datatype = datatype, &lt;br /&gt;
                overwrite = T)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
Посмотрим на результат работы скрипта.&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:R pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга в R]]&lt;br /&gt;
Результат можно сравнить с [http://%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox результатом паншарпенинга в Orfeo TollBox]:&lt;br /&gt;
[[Файл:OTB pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
Мы видим, что картинка, производимая нашим алгоритмом выглядит как-будто она обработана фильтром, увеличивающим резкость. Кроме того, на ней легче различить оттенки, чем на той, которая является результатом работы ''OTB''. Если копать глубже, то выяснится, что ''OTB'' сохранил (более-менее) диапазон значений исходного (очевидно, происходит нормализация данных на одном из этапов обработки), тогда как после использования нашего скрипта диапазон значений пикселей мультиспектрального снимка изменился кардинально. Это означает, что растр после паншарпенинга в ''OTB'' потенциально может быть использован для последующей радиометрической калибровки, а после паншарпенинга нашим скриптом - нет. Однако указанные различия в результатах работы нашего скрипта и ''OTB'' следует считать не недостатками, а особенностями, которые следует учитывать в работе.&lt;br /&gt;
&lt;br /&gt;
К сожалению, в raster не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
&lt;br /&gt;
==Скрипт для Processing Tollbox в QGIS==&lt;br /&gt;
==Заключение==&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21868</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21868"/>
		<updated>2015-04-18T22:27:22Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Результаты и обсуждение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую привязку в ''R'' есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster'']. На основании функций, доступных в этом пакете мы и разработаем наш скрипт. В использовании он будет чрезвычайно прост:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(raster)&lt;br /&gt;
&lt;br /&gt;
pan &amp;lt;- raster('pan.tif') # загружаем панхроматический растр&lt;br /&gt;
multi &amp;lt;- brick('multi.tif') # загружаем мультиспектральный растр&lt;br /&gt;
pansharp &amp;lt;- processingPansharp(pan, multi) # производим паншарпенинг (эту функцию мы создадим)&lt;br /&gt;
output_path &amp;lt;- 'путь_и_имя_файла_без_расширения' # зададим путь для сохранения результата&lt;br /&gt;
saveResult(pansharp, output_path) # сохраним результат&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начнём создавать необходимые функции. Первая функция - самая простая. Она всего-лишь реализовывает формулу, представленную выше.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
pansharpFun &amp;lt;- function(raster){&lt;br /&gt;
    ' Эта функция производит паншарпенинг  ' &lt;br /&gt;
    # @param raster - объект типа Raster с тремя каналами: 1)с низким разрешением, 2) с высоким разрешением, 3) низкочастотная компонента растра с высоким разрешением&lt;br /&gt;
    # @return pansharpened_raster - подвергшийся паншарпенингу  объект типа Raster&lt;br /&gt;
    # pansharp = Lowres * Highres / LPF[Highres]&lt;br /&gt;
     &lt;br /&gt;
    pansharpened_raster &amp;lt;- (raster[,1] * raster[,2]) / raster[,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вторая функция будет вычислять низкочастотную составляющую растра с высоким разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
extractLPF &amp;lt;- function(pan, multi, filter = 'auto', fun = mean) {&lt;br /&gt;
    ' Возвращает низкочастотную компоненту растра с высоким разрешением &lt;br /&gt;
        с использованием скользящего окна, соответствующего размеру пикселя растра с низким разрешением '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, который в последствии будет подвергнут паншарпенингу, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return LPF - низкочатотная компонента растра с высоким разрешением, объект типа Raster&lt;br /&gt;
     &lt;br /&gt;
    # Расчитаем размер скользящего окна, если его параметры не заданы&lt;br /&gt;
    if (filter == 'auto') {&lt;br /&gt;
        pan_res &amp;lt;- res(pan) # (x, y) пространственное разрешение растра с высоким разрешением в единицах CRS&lt;br /&gt;
        multi_res &amp;lt;- res(multi) # (x, y) пространственное разрешение растра с низким разрешением в единицах CRS&lt;br /&gt;
        x_res_ratio &amp;lt;- round(multi_res[1]/pan_res[1])&lt;br /&gt;
        y_res_ratio &amp;lt;- round(multi_res[2]/pan_res[2])&lt;br /&gt;
        total &amp;lt;- x_res_ratio + y_res_ratio&lt;br /&gt;
        filter &amp;lt;- matrix(1, nc = x_res_ratio, nr = y_res_ratio)&lt;br /&gt;
        }&lt;br /&gt;
         &lt;br /&gt;
        # Убедимся, что у скользящего окна нечётное количество столбцов и строк (требование функции focal() )&lt;br /&gt;
        if (nrow(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- rbind(filter, 0)&lt;br /&gt;
        } &lt;br /&gt;
        if (ncol(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- cbind(filter, 0)&lt;br /&gt;
       &lt;br /&gt;
         &lt;br /&gt;
    LPF &amp;lt;- focal(pan, w = filter, fun = fun) # получаем низкочастотную компоненту при помощи функции focal() пакета 'raster'&lt;br /&gt;
     &lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Обратите внимание, что мы оставили возможность задавать пользовательские значения для параметров ''filter'' и ''fun'', что оставляет простор для возможных экспериментов.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим функцию, объединяющую две предыдущие и выдающую растр с улучшенным разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
processingPansharp &amp;lt;- function(pan, multi, filter = 'auto', fun = mean){&lt;br /&gt;
    ' Улучшает разрешение мультиспектрального растра за счёт панхроматического растра '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, чьё разрешение необходимо улучшить, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return pansharp - растер 'multi' с улучшенным разрешением, объект типа Raster&lt;br /&gt;
 &lt;br /&gt;
    LPF &amp;lt;- extractLPF(pan, multi, filter, fun)&lt;br /&gt;
         &lt;br /&gt;
    multi &amp;lt;- resample(multi, pan) # приводим экстент и разрешение мультиспектрального растра к панхроматическому&lt;br /&gt;
         &lt;br /&gt;
    all &amp;lt;- stack(multi, pan, LPF)&lt;br /&gt;
     &lt;br /&gt;
    bands &amp;lt;- nbands(multi)&lt;br /&gt;
    pan_band &amp;lt;- bands + 1&lt;br /&gt;
    lpf_band &amp;lt;- bands + 2&lt;br /&gt;
     &lt;br /&gt;
    # Производим паншарпенинг каналов мультиспектрального растра по очереди&lt;br /&gt;
    pansharp_bands &amp;lt;- list()&lt;br /&gt;
    for (band in 1:bands) {&lt;br /&gt;
        subset &amp;lt;- all[[c(band, pan_band, lpf_band)]]&lt;br /&gt;
        raster &amp;lt;- calc(subset, pansharpFun)&lt;br /&gt;
        pansharp_bands[[band]] &amp;lt;- raster&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    pansharp &amp;lt;- stack(pansharp_bands) # итоговый растр&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ну, и наконец, последняя функция, носящая чисто утилитарный характер (позволяет использовать минимум параметров при сохранении растров) - обёртка к функции сохранения растра из пакета 'raster'. Идея состоит в том, что мы почти всегда будем хотеть сохранить результат в формате GeoTIFF, и при этом иметь целочисленный тип данных. Дело в том, что в большинстве случаев значения пикселей мультиспектрального растра - целые числа, а после паншарпенинга они становятся числами с плавающей запятой. Десятичные значения пикселя не несут никакой полезной информации, а занимают лишние сотни мегабайт места на диске. Использование целых чисел в качестве типа данных растра экономит более 0,5 Гб дискового пространства при паншарпенинге сцен WorldView-2.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
saveResult &amp;lt;- function(raster, path, format = 'GTiff', datatype = 'INT2S'){&lt;br /&gt;
    '  Сохраняет растр по указанному пути  '&lt;br /&gt;
    # @param raster - растр, который должен быть сохранён, объект типа Raser&lt;br /&gt;
    # @param path - путь к файлу (без расширения) - string&lt;br /&gt;
    # @param format - формат сохраняемого растра в соответствии с требованиями функции writeRaster() - string&lt;br /&gt;
    # @param datatype - тип данных сохраняемого растра в соответствии с требованиями функции to writeRaster() - string&lt;br /&gt;
     &lt;br /&gt;
    writeRaster(raster, &lt;br /&gt;
                path, &lt;br /&gt;
                format = format, &lt;br /&gt;
                datatype = datatype, &lt;br /&gt;
                overwrite = T)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:R pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга в R]]&lt;br /&gt;
Результат можно сравнить с [http://%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox результатом паншарпенинга в Orfeo TollBox]:&lt;br /&gt;
[[Файл:OTB pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
Мы видим, что картинка, производимая нашим алгоритмом выглядит как-будто она обработана фильтром, увеличивающим резкость. Кроме того, на ней легче различить оттенки, чем на той, которая является результатом работы ''OTB''. Если копать глубже, то выяснится, что ''OTB'' сохранил (более-менее) диапазон значений исходного (очевидно, происходит нормализация данных на одном из этапов обработки), тогда как после использования нашего скрипта диапазон значений пикселей мультиспектрального снимка изменился кардинально. Это означает, что растр после паншарпенинга в ''OTB'' потенциально может быть использован для последующей радиометрической калибровки, а после паншарпенинга нашим скриптом - нет. Однако указанные различия в результатах работы нашего скрипта и ''OTB'' следует считать не недостатками, а особенностями, которые следует учитывать в работе.&lt;br /&gt;
&lt;br /&gt;
К сожалению, в raster не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
&lt;br /&gt;
==Скрипт для Processing Tollbox в QGIS==&lt;br /&gt;
==Заключение==&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21867</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21867"/>
		<updated>2015-04-18T22:04:18Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Реализация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую привязку в ''R'' есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster'']. На основании функций, доступных в этом пакете мы и разработаем наш скрипт. В использовании он будет чрезвычайно прост:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(raster)&lt;br /&gt;
&lt;br /&gt;
pan &amp;lt;- raster('pan.tif') # загружаем панхроматический растр&lt;br /&gt;
multi &amp;lt;- brick('multi.tif') # загружаем мультиспектральный растр&lt;br /&gt;
pansharp &amp;lt;- processingPansharp(pan, multi) # производим паншарпенинг (эту функцию мы создадим)&lt;br /&gt;
output_path &amp;lt;- 'путь_и_имя_файла_без_расширения' # зададим путь для сохранения результата&lt;br /&gt;
saveResult(pansharp, output_path) # сохраним результат&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начнём создавать необходимые функции. Первая функция - самая простая. Она всего-лишь реализовывает формулу, представленную выше.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
pansharpFun &amp;lt;- function(raster){&lt;br /&gt;
    ' Эта функция производит паншарпенинг  ' &lt;br /&gt;
    # @param raster - объект типа Raster с тремя каналами: 1)с низким разрешением, 2) с высоким разрешением, 3) низкочастотная компонента растра с высоким разрешением&lt;br /&gt;
    # @return pansharpened_raster - подвергшийся паншарпенингу  объект типа Raster&lt;br /&gt;
    # pansharp = Lowres * Highres / LPF[Highres]&lt;br /&gt;
     &lt;br /&gt;
    pansharpened_raster &amp;lt;- (raster[,1] * raster[,2]) / raster[,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вторая функция будет вычислять низкочастотную составляющую растра с высоким разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
extractLPF &amp;lt;- function(pan, multi, filter = 'auto', fun = mean) {&lt;br /&gt;
    ' Возвращает низкочастотную компоненту растра с высоким разрешением &lt;br /&gt;
        с использованием скользящего окна, соответствующего размеру пикселя растра с низким разрешением '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, который в последствии будет подвергнут паншарпенингу, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return LPF - низкочатотная компонента растра с высоким разрешением, объект типа Raster&lt;br /&gt;
     &lt;br /&gt;
    # Расчитаем размер скользящего окна, если его параметры не заданы&lt;br /&gt;
    if (filter == 'auto') {&lt;br /&gt;
        pan_res &amp;lt;- res(pan) # (x, y) пространственное разрешение растра с высоким разрешением в единицах CRS&lt;br /&gt;
        multi_res &amp;lt;- res(multi) # (x, y) пространственное разрешение растра с низким разрешением в единицах CRS&lt;br /&gt;
        x_res_ratio &amp;lt;- round(multi_res[1]/pan_res[1])&lt;br /&gt;
        y_res_ratio &amp;lt;- round(multi_res[2]/pan_res[2])&lt;br /&gt;
        total &amp;lt;- x_res_ratio + y_res_ratio&lt;br /&gt;
        filter &amp;lt;- matrix(1, nc = x_res_ratio, nr = y_res_ratio)&lt;br /&gt;
        }&lt;br /&gt;
         &lt;br /&gt;
        # Убедимся, что у скользящего окна нечётное количество столбцов и строк (требование функции focal() )&lt;br /&gt;
        if (nrow(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- rbind(filter, 0)&lt;br /&gt;
        } &lt;br /&gt;
        if (ncol(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- cbind(filter, 0)&lt;br /&gt;
       &lt;br /&gt;
         &lt;br /&gt;
    LPF &amp;lt;- focal(pan, w = filter, fun = fun) # получаем низкочастотную компоненту при помощи функции focal() пакета 'raster'&lt;br /&gt;
     &lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Обратите внимание, что мы оставили возможность задавать пользовательские значения для параметров ''filter'' и ''fun'', что оставляет простор для возможных экспериментов.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим функцию, объединяющую две предыдущие и выдающую растр с улучшенным разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
processingPansharp &amp;lt;- function(pan, multi, filter = 'auto', fun = mean){&lt;br /&gt;
    ' Улучшает разрешение мультиспектрального растра за счёт панхроматического растра '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, чьё разрешение необходимо улучшить, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return pansharp - растер 'multi' с улучшенным разрешением, объект типа Raster&lt;br /&gt;
 &lt;br /&gt;
    LPF &amp;lt;- extractLPF(pan, multi, filter, fun)&lt;br /&gt;
         &lt;br /&gt;
    multi &amp;lt;- resample(multi, pan) # приводим экстент и разрешение мультиспектрального растра к панхроматическому&lt;br /&gt;
         &lt;br /&gt;
    all &amp;lt;- stack(multi, pan, LPF)&lt;br /&gt;
     &lt;br /&gt;
    bands &amp;lt;- nbands(multi)&lt;br /&gt;
    pan_band &amp;lt;- bands + 1&lt;br /&gt;
    lpf_band &amp;lt;- bands + 2&lt;br /&gt;
     &lt;br /&gt;
    # Производим паншарпенинг каналов мультиспектрального растра по очереди&lt;br /&gt;
    pansharp_bands &amp;lt;- list()&lt;br /&gt;
    for (band in 1:bands) {&lt;br /&gt;
        subset &amp;lt;- all[[c(band, pan_band, lpf_band)]]&lt;br /&gt;
        raster &amp;lt;- calc(subset, pansharpFun)&lt;br /&gt;
        pansharp_bands[[band]] &amp;lt;- raster&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    pansharp &amp;lt;- stack(pansharp_bands) # итоговый растр&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ну, и наконец, последняя функция, носящая чисто утилитарный характер (позволяет использовать минимум параметров при сохранении растров) - обёртка к функции сохранения растра из пакета 'raster'. Идея состоит в том, что мы почти всегда будем хотеть сохранить результат в формате GeoTIFF, и при этом иметь целочисленный тип данных. Дело в том, что в большинстве случаев значения пикселей мультиспектрального растра - целые числа, а после паншарпенинга они становятся числами с плавающей запятой. Десятичные значения пикселя не несут никакой полезной информации, а занимают лишние сотни мегабайт места на диске. Использование целых чисел в качестве типа данных растра экономит более 0,5 Гб дискового пространства при паншарпенинге сцен WorldView-2.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
saveResult &amp;lt;- function(raster, path, format = 'GTiff', datatype = 'INT2S'){&lt;br /&gt;
    '  Сохраняет растр по указанному пути  '&lt;br /&gt;
    # @param raster - растр, который должен быть сохранён, объект типа Raser&lt;br /&gt;
    # @param path - путь к файлу (без расширения) - string&lt;br /&gt;
    # @param format - формат сохраняемого растра в соответствии с требованиями функции writeRaster() - string&lt;br /&gt;
    # @param datatype - тип данных сохраняемого растра в соответствии с требованиями функции to writeRaster() - string&lt;br /&gt;
     &lt;br /&gt;
    writeRaster(raster, &lt;br /&gt;
                path, &lt;br /&gt;
                format = format, &lt;br /&gt;
                datatype = datatype, &lt;br /&gt;
                overwrite = T)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:R pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга в R]]&lt;br /&gt;
Результат можно сравнить с результатом паншарпенинга в Orfeo TollBox:&lt;br /&gt;
[[Файл:OTB pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
К сожалению, в raster не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
&lt;br /&gt;
==Скрипт для Processing Tollbox в QGIS==&lt;br /&gt;
==Заключение==&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21866</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21866"/>
		<updated>2015-04-18T21:46:22Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Результаты и обсуждение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую привязку в ''R'' есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster'']. На основании функций, доступных в этом пакете мы и разработаем наш скрипт. В использовании он будет чрезвычайно прост:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(raster)&lt;br /&gt;
&lt;br /&gt;
pan &amp;lt;- raster('pan.tif') # загружаем панхроматический растр&lt;br /&gt;
multi &amp;lt;- brick('multi.tif') # загружаем мультиспектральный растр&lt;br /&gt;
pansharp &amp;lt;- processingPansharp(pan, multi) # производим паншарпенинг (эту функцию мы создадим)&lt;br /&gt;
output_path &amp;lt;- 'путь_и_имя_файла_без_расширения' # зададим путь для сохранения результата&lt;br /&gt;
saveResult(pansharp, output_path) # сохраним результат&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начнём создавать необходимые функции. Первая функция - самая простая. Она всего-лишь реализовывает формулу, представленную выше.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
pansharpFun &amp;lt;- function(raster){&lt;br /&gt;
    ' Эта функция производит паншарпенинг  ' &lt;br /&gt;
    # @param raster - объект типа Raster с тремя каналами: 1)с низким разрешением, 2) с высоким разрешением, 3) низкочастотная компонента растра с высоким разрешением&lt;br /&gt;
    # @return pansharpened_raster - подвергшийся паншарпенингу  объект типа Raster&lt;br /&gt;
    # pansharp = Lowres * Highres / LPF[Highres]&lt;br /&gt;
     &lt;br /&gt;
    pansharpened_raster &amp;lt;- (raster[,1] * raster[,2]) / raster[,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вторая функция будет вычислять низкочастотную составляющую растра с высоким разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
extractLPF &amp;lt;- function(pan, multi, filter = 'auto', fun = mean) {&lt;br /&gt;
    ' Возвращает низкочастотную компоненту растра с высоким разрешением &lt;br /&gt;
        с использованием скользящего окна, соответствующего размеру пикселя растра с низким разрешением '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, который в последствии будет подвергнут паншарпенингу, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return LPF - низкочатотная компонента растра с высоким разрешением, объект типа Raster&lt;br /&gt;
     &lt;br /&gt;
    # Расчитаем размер скользящего окна, если его параметры не заданы&lt;br /&gt;
    if (filter == 'auto') {&lt;br /&gt;
        pan_res &amp;lt;- res(pan) # (x, y) пространственное разрешение растра с высоким разрешением в единицах CRS&lt;br /&gt;
        multi_res &amp;lt;- res(multi) # (x, y) пространственное разрешение растра с низким разрешением в единицах CRS&lt;br /&gt;
        x_res_ratio &amp;lt;- round(multi_res[1]/pan_res[1])&lt;br /&gt;
        y_res_ratio &amp;lt;- round(multi_res[2]/pan_res[2])&lt;br /&gt;
        total &amp;lt;- x_res_ratio + y_res_ratio&lt;br /&gt;
        filter &amp;lt;- matrix(1, nc = x_res_ratio, nr = y_res_ratio)&lt;br /&gt;
        }&lt;br /&gt;
         &lt;br /&gt;
        # Убедимся, что у скользящего окна нечётное количество столбцов и строк (требование функции focal() )&lt;br /&gt;
        if (nrow(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- rbind(filter, 0)&lt;br /&gt;
        } &lt;br /&gt;
        if (ncol(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- cbind(filter, 0)&lt;br /&gt;
       &lt;br /&gt;
         &lt;br /&gt;
    LPF &amp;lt;- focal(pan, w = filter, fun = fun) # получаем низкочастотную компоненту при помощи функции focal() пакета 'raster'&lt;br /&gt;
     &lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Обратите внимание, что мы оставили возможность задавать пользовательские значения для параметров ''filter'' и ''fun'', что оставляет простор для возможных экспериментов.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим функцию, объединяющую две предыдущие и выдающую растр с улучшенным разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
processingPansharp &amp;lt;- function(pan, multi, filter = 'auto', fun = mean){&lt;br /&gt;
    ' Улучшает разрешение мультиспектрального растра за счёт панхроматического растра '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, чьё разрешение необходимо улучшить, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return pansharp - растер 'multi' с улучшенным разрешением, объект типа Raster&lt;br /&gt;
 &lt;br /&gt;
    LPF &amp;lt;- extractLPF(pan, multi, filter, fun)&lt;br /&gt;
         &lt;br /&gt;
    multi &amp;lt;- resample(multi, pan) # приводим экстент и разрешение мультиспектрального растра к панхроматическому&lt;br /&gt;
         &lt;br /&gt;
    all &amp;lt;- stack(multi, pan, LPF)&lt;br /&gt;
     &lt;br /&gt;
    bands &amp;lt;- nbands(multi)&lt;br /&gt;
    pan_band &amp;lt;- bands + 1&lt;br /&gt;
    lpf_band &amp;lt;- bands + 2&lt;br /&gt;
     &lt;br /&gt;
    # Производим паншарпенинг каналов мультиспектрального растра по очереди&lt;br /&gt;
    pansharp_bands &amp;lt;- list()&lt;br /&gt;
    for (band in 1:bands) {&lt;br /&gt;
        subset &amp;lt;- all[[c(band, pan_band, lpf_band)]]&lt;br /&gt;
        raster &amp;lt;- calc(subset, pansharpFun)&lt;br /&gt;
        pansharp_bands[[band]] &amp;lt;- raster&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    pansharp &amp;lt;- stack(pansharp_bands) # итоговый растр&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:R pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга в R]]&lt;br /&gt;
Результат можно сравнить с результатом паншарпенинга в Orfeo TollBox:&lt;br /&gt;
[[Файл:OTB pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
К сожалению, в raster не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
&lt;br /&gt;
==Скрипт для Processing Tollbox в QGIS==&lt;br /&gt;
==Заключение==&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:R_pansharp_result.png&amp;diff=21865</id>
		<title>Файл:R pansharp result.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:R_pansharp_result.png&amp;diff=21865"/>
		<updated>2015-04-18T21:45:06Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: результат паншарпенинга в R&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;результат паншарпенинга в R&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21864</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21864"/>
		<updated>2015-04-18T21:39:10Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую привязку в ''R'' есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster'']. На основании функций, доступных в этом пакете мы и разработаем наш скрипт. В использовании он будет чрезвычайно прост:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(raster)&lt;br /&gt;
&lt;br /&gt;
pan &amp;lt;- raster('pan.tif') # загружаем панхроматический растр&lt;br /&gt;
multi &amp;lt;- brick('multi.tif') # загружаем мультиспектральный растр&lt;br /&gt;
pansharp &amp;lt;- processingPansharp(pan, multi) # производим паншарпенинг (эту функцию мы создадим)&lt;br /&gt;
output_path &amp;lt;- 'путь_и_имя_файла_без_расширения' # зададим путь для сохранения результата&lt;br /&gt;
saveResult(pansharp, output_path) # сохраним результат&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начнём создавать необходимые функции. Первая функция - самая простая. Она всего-лишь реализовывает формулу, представленную выше.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
pansharpFun &amp;lt;- function(raster){&lt;br /&gt;
    ' Эта функция производит паншарпенинг  ' &lt;br /&gt;
    # @param raster - объект типа Raster с тремя каналами: 1)с низким разрешением, 2) с высоким разрешением, 3) низкочастотная компонента растра с высоким разрешением&lt;br /&gt;
    # @return pansharpened_raster - подвергшийся паншарпенингу  объект типа Raster&lt;br /&gt;
    # pansharp = Lowres * Highres / LPF[Highres]&lt;br /&gt;
     &lt;br /&gt;
    pansharpened_raster &amp;lt;- (raster[,1] * raster[,2]) / raster[,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вторая функция будет вычислять низкочастотную составляющую растра с высоким разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
extractLPF &amp;lt;- function(pan, multi, filter = 'auto', fun = mean) {&lt;br /&gt;
    ' Возвращает низкочастотную компоненту растра с высоким разрешением &lt;br /&gt;
        с использованием скользящего окна, соответствующего размеру пикселя растра с низким разрешением '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, который в последствии будет подвергнут паншарпенингу, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return LPF - низкочатотная компонента растра с высоким разрешением, объект типа Raster&lt;br /&gt;
     &lt;br /&gt;
    # Расчитаем размер скользящего окна, если его параметры не заданы&lt;br /&gt;
    if (filter == 'auto') {&lt;br /&gt;
        pan_res &amp;lt;- res(pan) # (x, y) пространственное разрешение растра с высоким разрешением в единицах CRS&lt;br /&gt;
        multi_res &amp;lt;- res(multi) # (x, y) пространственное разрешение растра с низким разрешением в единицах CRS&lt;br /&gt;
        x_res_ratio &amp;lt;- round(multi_res[1]/pan_res[1])&lt;br /&gt;
        y_res_ratio &amp;lt;- round(multi_res[2]/pan_res[2])&lt;br /&gt;
        total &amp;lt;- x_res_ratio + y_res_ratio&lt;br /&gt;
        filter &amp;lt;- matrix(1, nc = x_res_ratio, nr = y_res_ratio)&lt;br /&gt;
        }&lt;br /&gt;
         &lt;br /&gt;
        # Убедимся, что у скользящего окна нечётное количество столбцов и строк (требование функции focal() )&lt;br /&gt;
        if (nrow(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- rbind(filter, 0)&lt;br /&gt;
        } &lt;br /&gt;
        if (ncol(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- cbind(filter, 0)&lt;br /&gt;
       &lt;br /&gt;
         &lt;br /&gt;
    LPF &amp;lt;- focal(pan, w = filter, fun = fun) # получаем низкочастотную компоненту при помощи функции focal() пакета 'raster'&lt;br /&gt;
     &lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Обратите внимание, что мы оставили возможность задавать пользовательские значения для параметров ''filter'' и ''fun'', что оставляет простор для возможных экспериментов.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим функцию, объединяющую две предыдущие и выдающую растр с улучшенным разрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
processingPansharp &amp;lt;- function(pan, multi, filter = 'auto', fun = mean){&lt;br /&gt;
    ' Улучшает разрешение мультиспектрального растра за счёт панхроматического растра '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, чьё разрешение необходимо улучшить, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return pansharp - растер 'multi' с улучшенным разрешением, объект типа Raster&lt;br /&gt;
 &lt;br /&gt;
    LPF &amp;lt;- extractLPF(pan, multi, filter, fun)&lt;br /&gt;
         &lt;br /&gt;
    multi &amp;lt;- resample(multi, pan) # приводим экстент и разрешение мультиспектрального растра к панхроматическому&lt;br /&gt;
         &lt;br /&gt;
    all &amp;lt;- stack(multi, pan, LPF)&lt;br /&gt;
     &lt;br /&gt;
    bands &amp;lt;- nbands(multi)&lt;br /&gt;
    pan_band &amp;lt;- bands + 1&lt;br /&gt;
    lpf_band &amp;lt;- bands + 2&lt;br /&gt;
     &lt;br /&gt;
    # Производим паншарпенинг каналов мультиспектрального растра по очереди&lt;br /&gt;
    pansharp_bands &amp;lt;- list()&lt;br /&gt;
    for (band in 1:bands) {&lt;br /&gt;
        subset &amp;lt;- all[[c(band, pan_band, lpf_band)]]&lt;br /&gt;
        raster &amp;lt;- calc(subset, pansharpFun)&lt;br /&gt;
        pansharp_bands[[band]] &amp;lt;- raster&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    pansharp &amp;lt;- stack(pansharp_bands) # итоговый растр&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
К сожалению, в raster не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
==Скрипт для Processing Tollbox в QGIS==&lt;br /&gt;
==Заключение==&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21863</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21863"/>
		<updated>2015-04-18T21:18:06Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую привязку в ''R'' есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster'']. На основании функций, доступных в этом пакете мы и разработаем наш скрипт. В использовании он будет чрезвычайно прост:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(raster)&lt;br /&gt;
&lt;br /&gt;
pan &amp;lt;- raster('pan.tif') # загружаем панхроматический растр&lt;br /&gt;
multi &amp;lt;- brick('multi.tif') # загружаем мультиспектральный растр&lt;br /&gt;
pansharp &amp;lt;- processingPansharp(pan, multi) # производим паншарпенинг (эту функцию мы создадим)&lt;br /&gt;
output_path &amp;lt;- 'путь_и_имя_файла_без_расширения' # зададим путь для сохранения результата&lt;br /&gt;
saveResult(pansharp, output_path) # сохраним результат&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начнём создавать необходимые функции. Первая функция - самая простая. Она всего-лишь реализовывает формулу, представленную выше.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
pansharpFun &amp;lt;- function(raster){&lt;br /&gt;
    ' Эта функция производит паншарпенинг  ' &lt;br /&gt;
    # @param raster - объект типа Raster с тремя каналами: 1)с низким разрешением, 2) с высоким разрешнеием, 3) низкочастотная компонента растра с высоким разрешением&lt;br /&gt;
    # @return pansharpened_raster - подвергшийся паншарпенингу  объект типа Raster&lt;br /&gt;
    # pansharp = Lowres * Highres / LPF[Highres]&lt;br /&gt;
     &lt;br /&gt;
    pansharpened_raster &amp;lt;- (raster[,1] * raster[,2]) / raster[,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вторая функция будет вычислять низкочастотную сотавляющую растра с высоким расзрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
extractLPF &amp;lt;- function(pan, multi, filter = 'auto', fun = mean) {&lt;br /&gt;
    ' Возвращает низкочастотную компоненту растра с высоким разрешением &lt;br /&gt;
        с использованием скользящего окна, соответствующего размеру пикселя растра с низким разрешением '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, который в последствии будет подвергнут паншарпенингу, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return LPF - низкочатотная компонента растра с высоким разрешением, объект типа Raster&lt;br /&gt;
     &lt;br /&gt;
    # Расчитаем размер скользящего окна, если его параметры не заданы&lt;br /&gt;
    if (filter == 'auto') {&lt;br /&gt;
        pan_res &amp;lt;- res(pan) # (x, y) пространственное разрешение растра с высоким разрешением в единицах CRS&lt;br /&gt;
        multi_res &amp;lt;- res(multi) # (x, y) пространственное разрешение растра с низким разрешением в единицах CRS&lt;br /&gt;
        x_res_ratio &amp;lt;- round(multi_res[1]/pan_res[1])&lt;br /&gt;
        y_res_ratio &amp;lt;- round(multi_res[2]/pan_res[2])&lt;br /&gt;
        total &amp;lt;- x_res_ratio + y_res_ratio&lt;br /&gt;
        filter &amp;lt;- matrix(1, nc = x_res_ratio, nr = y_res_ratio)&lt;br /&gt;
        }&lt;br /&gt;
         &lt;br /&gt;
        # Убедимся, что у скользящего окна нечётное количество столбцов и строк (требование функции focal() )&lt;br /&gt;
        if (nrow(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- rbind(filter, 0)&lt;br /&gt;
        } &lt;br /&gt;
        if (ncol(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- cbind(filter, 0)&lt;br /&gt;
       &lt;br /&gt;
         &lt;br /&gt;
    LPF &amp;lt;- focal(pan, w = filter, fun = fun) # получаем низкочастотную компоненту&lt;br /&gt;
     &lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Обратите внимание, что мы оставили возможность задавать пользовательские значения для параметров filter и fun, что оставляет простор для экспериментов.&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
К сожалению, в raster не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
==Скрипт для Processing Tollbox в QGIS==&lt;br /&gt;
==Заключение==&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21862</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21862"/>
		<updated>2015-04-18T21:13:17Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую привязку в ''R'' есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster'']. На основании функций, доступных в этом пакете мы и разработаем наш скрипт. В использовании он будет чрезвычайно прост:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(raster)&lt;br /&gt;
&lt;br /&gt;
pan &amp;lt;- raster('pan.tif') # загружаем панхроматический растр&lt;br /&gt;
multi &amp;lt;- brick('multi.tif') # загружаем мультиспектральный растр&lt;br /&gt;
pansharp &amp;lt;- processingPansharp(pan, multi) # производим паншарпенинг (эту функцию мы создадим)&lt;br /&gt;
output_path &amp;lt;- 'путь_и_имя_файла_без_расширения' # зададим путь для сохранения результата&lt;br /&gt;
saveResult(pansharp, output_path) # сохраним результат&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начнём создавать необходимые функции. Первая функция - самая простая. Она всего-лишь реализовывает формулу, представленную выше.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
pansharpFun &amp;lt;- function(raster){&lt;br /&gt;
    ' Эта функция производит паншарпенинг  ' &lt;br /&gt;
    # @param raster - объект типа Raster с тремя каналами: 1)с низким разрешением, 2) с высоким разрешнеием, 3) низкочастотная компонента растра с высоким разрешением&lt;br /&gt;
    # @return pansharpened_raster - подвергшийся паншарпенингу  объект типа Raster&lt;br /&gt;
    # pansharp = Lowres * Highres / LPF[Highres]&lt;br /&gt;
     &lt;br /&gt;
    pansharpened_raster &amp;lt;- (raster[,1] * raster[,2]) / raster[,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вторая функция будет вычислять низкочастотную сотавляющую растра с высоким расзрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
extractLPF &amp;lt;- function(pan, multi, filter = 'auto', fun = mean) {&lt;br /&gt;
    ' Возвращает низкочастотную компоненту растра с высоким разрешением &lt;br /&gt;
        с использованием скользящего окна, соответствующего размеру пикселя растра с низким разрешением '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, который в последствии будет подвергнут паншарпенингу, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return LPF - низкочатотная компонента растра с высоким разрешением, объект типа Raster&lt;br /&gt;
     &lt;br /&gt;
    # Расчитаем размер скользящего окна, если его параметры не заданы&lt;br /&gt;
    if (filter == 'auto') {&lt;br /&gt;
        pan_res &amp;lt;- res(pan) # (x, y) пространственное разрешение растра с высоким разрешением в единицах CRS&lt;br /&gt;
        multi_res &amp;lt;- res(multi) # (x, y) пространственное разрешение растра с низким разрешением в единицах CRS&lt;br /&gt;
        x_res_ratio &amp;lt;- round(multi_res[1]/pan_res[1])&lt;br /&gt;
        y_res_ratio &amp;lt;- round(multi_res[2]/pan_res[2])&lt;br /&gt;
        total &amp;lt;- x_res_ratio + y_res_ratio&lt;br /&gt;
        filter &amp;lt;- matrix(1, nc = x_res_ratio, nr = y_res_ratio)&lt;br /&gt;
        }&lt;br /&gt;
         &lt;br /&gt;
        # Убедимся, что у скользящего окна нечётное количество столбцов и строк (требование функции focal() )&lt;br /&gt;
        if (nrow(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- rbind(filter, 0)&lt;br /&gt;
        } &lt;br /&gt;
        if (ncol(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- cbind(filter, 0)&lt;br /&gt;
       &lt;br /&gt;
         &lt;br /&gt;
    LPF &amp;lt;- focal(pan, w = filter, fun = fun) # получаем низкочастотную компоненту&lt;br /&gt;
     &lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
К сожалению, в raster не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
==Скрипт для Processing Tollbox в QGIS==&lt;br /&gt;
==Заключение==&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21861</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21861"/>
		<updated>2015-04-18T21:09:18Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую привязку в ''R'' есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster'']. На основании функций, доступных в этом пакете мы и разработаем наш скрипт. В использовании он будет чрезвычайно прост:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(raster)&lt;br /&gt;
&lt;br /&gt;
pan &amp;lt;- raster('pan.tif') # загружаем панхроматический растр&lt;br /&gt;
multi &amp;lt;- brick('multi.tif') # загружаем мультиспектральный растр&lt;br /&gt;
pansharp &amp;lt;- processingPansharp(pan, multi) # производим паншарпенинг (эту функцию мы создадим)&lt;br /&gt;
output_path &amp;lt;- 'путь_и_имя_файла_без_расширения' # зададим путь для сохранения результата&lt;br /&gt;
saveResult(pansharp, output_path) # сохраним результат&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Начнём создавать необходимые функции. Первая функция - самая простая. Она всего-лишь реализовывает формулу, представленную выше.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
pansharpFun &amp;lt;- function(raster){&lt;br /&gt;
    ' Эта функция производит паншарпенинг  ' &lt;br /&gt;
    # @param raster - объект типа Raster с тремя каналами: 1)с низким разрешением, 2) с высоким разрешнеием, 3) низкочастотная компонента растра с высоким разрешением&lt;br /&gt;
    # @return pansharpened_raster - подвергшийся паншарпенингу  объект типа Raster&lt;br /&gt;
    # pansharp = Lowres * Highres / LPF[Highres]&lt;br /&gt;
     &lt;br /&gt;
    pansharpened_raster &amp;lt;- (raster[,1] * raster[,2]) / raster[,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Вторая функция будет вычислять низкочастотную сотавляющую растра с высоким расзрешением.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
extractLPF &amp;lt;- function(pan, multi, filter = 'auto', fun = mean) {&lt;br /&gt;
    ' Возвращает низкочастотную компоненту растра с высоким разрешением &lt;br /&gt;
        с использованием скользящего окна, соответствующего размеру пикселя растра с низким разрешением '&lt;br /&gt;
    # @param pan - растр с высоким разрешением, объект типа Raster&lt;br /&gt;
    # @param multi - растр с низким разрешением, который в последствии будет подвергнут паншарпенингу, объект типа Raster&lt;br /&gt;
    # @param filter - скользящее окно, объект типа матрица&lt;br /&gt;
    # @param fun - функция, которая производит вычисления на скользящем окне (параметр функции focal() )&lt;br /&gt;
    # @return LPF - низкочатотная компонента растра с высоким разрешением, объект типа Raster&lt;br /&gt;
     &lt;br /&gt;
    # Расчитаем размер скользящего окна, если его параметры не заданы&lt;br /&gt;
    if (filter == 'auto') {&lt;br /&gt;
        pan_res &amp;lt;- res(pan) # (x, y) пространственное разрешение растра с высоким разрешением в единицах CRS&lt;br /&gt;
        multi_res &amp;lt;- res(multi) # (x, y) пространственное разрешение растра с низким разрешением в единицах CRS&lt;br /&gt;
        x_res_ratio &amp;lt;- round(multi_res[1]/pan_res[1])&lt;br /&gt;
        y_res_ratio &amp;lt;- round(multi_res[2]/pan_res[2])&lt;br /&gt;
        total &amp;lt;- x_res_ratio + y_res_ratio&lt;br /&gt;
        filter &amp;lt;- matrix(1, nc = x_res_ratio, nr = y_res_ratio)&lt;br /&gt;
        }&lt;br /&gt;
         &lt;br /&gt;
        # Убедимся, что у скользящего окна нечётное количество столбцов и строк (требование функции focal() )&lt;br /&gt;
        if (nrow(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- rbind(filter, 0)&lt;br /&gt;
        } &lt;br /&gt;
        if (ncol(filter)%%2 == 0) {&lt;br /&gt;
            filter &amp;lt;- cbind(filter, 0)&lt;br /&gt;
       &lt;br /&gt;
         &lt;br /&gt;
    LPF &amp;lt;- focal(pan, w = filter, fun = fun) # получаем низкочастотную компоненту&lt;br /&gt;
     &lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
К сожалению, в raster не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
==Скрипт для Processing Tollbox в QGIS==&lt;br /&gt;
==Заключение==&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21860</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21860"/>
		<updated>2015-04-18T20:41:05Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую привязку в ''R'' есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster'']. На основании функций, доступных в этом пакете мы и разработаем наш скрипт. В использовании он будет чрезвычайно прост:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(raster)&lt;br /&gt;
&lt;br /&gt;
pan &amp;lt;- raster('pan.tif') # загружаем панхроматический растр&lt;br /&gt;
multi &amp;lt;- brick('multi.tif') # загружаем мультиспектральный растр&lt;br /&gt;
pansharp &amp;lt;- processingPansharp(pan, multi) # производим паншарпенинг (эту функцию мы создадим)&lt;br /&gt;
output_path &amp;lt;- 'путь_и_имя_файла_без_расширения' # зададим путь для сохранения результата&lt;br /&gt;
saveResult(pansharp, output_path) # сохраним результат&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Начнём создавать необходимые функции.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
pansharpFun &amp;lt;- function(raster){&lt;br /&gt;
    ' Эта функция производит паншарпенинг  ' &lt;br /&gt;
    # @param raster - объект типа Raster с тремя каналами: 1)с низким разрешением, 2) с высоким разрешнеием, 3) низкочастотная компонента растра с высоким разрешением&lt;br /&gt;
    # @return pansharpened_raster - подвергшийся паншарпенингу  объект типа Raster&lt;br /&gt;
    # pansharp = Lowres * Highres / LPF[Highres]&lt;br /&gt;
     &lt;br /&gt;
    pansharpened_raster &amp;lt;- (raster[,1] * raster[,2]) / raster[,3]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
К сожалению, в raster не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
==Скрипт для Processing Tollbox в QGIS==&lt;br /&gt;
==Заключение==&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21859</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21859"/>
		<updated>2015-04-18T20:33:26Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую привязку в ''R'' есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster'']. На основании функций, доступных в этом пакете мы и разработаем наш скрипт. В использовании он будет чрезвычайно прост:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
library(raster)&lt;br /&gt;
&lt;br /&gt;
pan &amp;lt;- raster('pan.tif') # загружаем панхроматический растр&lt;br /&gt;
multi &amp;lt;- brick('multi.tif') # загружаем мультиспектральный растр&lt;br /&gt;
pansharp &amp;lt;- processingPansharp(pan, multi) # производим паншарпенинг (эту функцию мы создадим)&lt;br /&gt;
output_path &amp;lt;- 'путь и имя файла без расширения' # зададим путь для сохранения результата&lt;br /&gt;
saveResult(pansharp, output_path) # сохраним результат&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
К сожалению, в raster не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
==Скрипт для Processing Tollbox в QGIS==&lt;br /&gt;
==Заключение==&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21858</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21858"/>
		<updated>2015-04-18T20:25:08Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую привязку в R есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster''].&lt;br /&gt;
  pan &amp;lt;- raster('pan.tif')&lt;br /&gt;
  multi &amp;lt;- brick('multi.tif')&lt;br /&gt;
  pansharp &amp;lt;- processingPansharp(pan, multi)&lt;br /&gt;
  output_path &amp;lt;- 'path_and_filename_without_extention' &lt;br /&gt;
  saveResult(pansharp, output_path)&lt;br /&gt;
&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
К сожалению, в raster не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
==Скрипт для Processing Tollbox в QGIS==&lt;br /&gt;
==Заключение==&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21857</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21857"/>
		<updated>2015-04-18T20:19:49Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Для работы с растрами, имеющими географическую привязку в R есть замечательный пакет [http://cran.r-project.org/web/packages/raster/index.html ''raster''].&lt;br /&gt;
&lt;br /&gt;
==Скрипт для Processing Tollbox в QGIS==&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
К сожалению, в raster не реализована многопоточность, поэтому производительность операций по обработке больших растров оставляет желать лучшего.&lt;br /&gt;
==Заключение==&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21856</id>
		<title>Паншарпенинг при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21856"/>
		<updated>2015-04-18T20:11:27Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: Создал статью про паншарпенинг в R&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в программной среде R. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/02/pan-sharpening-using-r.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
Одной из наиболее рапространённых задач при работе со спутниковыми снимками является паншарпенинг. С этой задачёй успешно справляются и проприетарные и открытые программы для работы с ДДЗЗ. Но в некоторых случаях вам может захотеться иметь больший контроль над проводиммыми операциями или, быть может использовать алгоритм, ещё не реализованный ни в одном ПО. В таком случае на помощь придёт один из языков программирования, например, [https://ru.wikipedia.org/wiki/R_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 R].&lt;br /&gt;
&lt;br /&gt;
В данной статье будет продемонстрирована реализация наиболее простого алгоритма паншарпенига - модуляции высоких частот.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
&lt;br /&gt;
==Результаты и обсуждение==&lt;br /&gt;
==Заключение==&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21855</id>
		<title>Паншарпенинг в QGIS с использованием Orfeo ToolBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21855"/>
		<updated>2015-04-18T19:52:52Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в QGIS посредством инструментария Orfeo ToolBox. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/01/pansharpening-in-qgis-using-qtb.html Misanthrope's Thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
При работе с данными дистанционного зондирования Земли зачастую приходится решать задачу улучшения снимков с низким разрешением за счёт снимков с высоким. В QGIS нет встроенного инструмента паншарпенинга, но есть возможность подключения инструментов [https://www.orfeo-toolbox.org/ Orfeo ToolBox] (OTB), где они есть.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Паншарпенинг в OTB и QGIS==&lt;br /&gt;
С программной точки зрения процесс паншарпенинга делится на две стадии: 1) подготовительную, во время которой разрешение и экстент мультиспектрального растра приводится в соответствие с экстентом и разрешением панхроматического растра (это необходимо для проведения операций растровой алгебры, вовлекающих оба растра); 2) непосредственно паншарпенинг.&lt;br /&gt;
===Использование утилиты OTB===&lt;br /&gt;
OTB по своей сути является набором консольных утилит и приложений. За паншарпенинг отвечает приложение [https://www.orfeo-toolbox.org//CookBook/CookBooksu36.html#x57-770004.2.2 otbcli_BundleToPerfectSensor]. Оно совмещает в себе обе стадии, описанные выше, и запускается следующей консольной командой: &lt;br /&gt;
  otbcli_BundleToPerfectSensor -inp pan_image -inxs xs_image -out output_image&lt;br /&gt;
где pan_image, xs_image и output_image соответсвенно - пути к панхроматическому, мультиспектральному и результирующему растрам. О дополнительных опциях читайте в документации.&lt;br /&gt;
===Запуск паншарпенинга из QGIS===&lt;br /&gt;
В QGIS инструменты OTB подключаются через модуль Processing. После установки OTB на компьютер  зайдите в QGIS в настройки модуля Processing (''Processing -&amp;gt; Options -&amp;gt; Providers'') и активируйте интеграцию с OTB ([http://docs.qgis.org/2.6/ru/docs/user_manual/processing/3rdParty.html#orfeo-toolbox инструкция] на английском):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Enable OTB.png|center]]&lt;br /&gt;
&lt;br /&gt;
Теперь в ''Processing Toolbox'' у вас появится набор инструментов ''Orfeo Toolbox''. К сожалению, в инструментарий входят только консольные утилиты, но не приложения (то есть модуль otbcli_BundleToPerfectSensor не доступен из QGIS). Поэтому не спешите сразу запускать утилиты паншарпенинга (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; [https://www.orfeo-toolbox.org/CookBook/CookBooksu88.html#x119-4740005.4.9 Pansharpening]''), так как здесь требуется, чтобы все входные растры имели идентичный экстент и разрешение, то есть выполняется только вторая стадия. Чтобы выполнить первую - необходимо воспользоваться модулем [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Superimpose sensor''] (''Orfeo Toolbox -&amp;gt; Geometry -&amp;gt; Superimpose sensor'').&lt;br /&gt;
&lt;br /&gt;
Модуль ''Superimpose sensor'' имеет следующие параметры:&lt;br /&gt;
* '''Reference input''' - базовое изображение, к параметрам которого будет приведено обрабатываемое изображение (здесь выбираем панхроматическое).&lt;br /&gt;
* '''The image to reproject''' - изображение, чьи параметры будут приведены к параметрам базового изображения (здесь выбираем мультиспектральное).&lt;br /&gt;
* '''Default elevation''' - средняя высота изображения над эллипсоидом.&lt;br /&gt;
* '''Spacing of the deformation field''' - интервал расстояния поля деформации (coarser deformation field).&lt;br /&gt;
* '''Interpolation''' - тип интерполяции.&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти. (Если изменение дефолтного значения [http://gis-lab.info/forum/viewtopic.php?f=3&amp;amp;t=18913&amp;amp;p=127347#p127344 приводит к вылету модуля] - обновите Processing.) &lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Superimpose sensor.png|thumb|center|x500px|Интерфейс модуля Superimpose sensor]]&lt;br /&gt;
&lt;br /&gt;
После трансформации мультиспектрального растра можно переходить непосредственно к паншарпенингу. Модуль [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Pansharpening(rsc)''] имеет следующие параметры:&lt;br /&gt;
* '''Input PAN image''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Input XS image''' - мультиспектральное изображение, приведённое к параметрам панхроматического.&lt;br /&gt;
* '''Algorithm''' - алгоритм для паншарпенинга (не изменяется, для использования других алгоритмов (LMVM и Bayesian) используйте соответсвующие модули ''Pansharpening(bayes) и Pansharpening(lvmv)'')&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти. (Если изменение дефолтного значения [http://gis-lab.info/forum/viewtopic.php?f=3&amp;amp;t=18913&amp;amp;p=127347#p127344 приводит к вылету модуля] - обновите Processing.) &lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp dialogue.png|thumb|center|x500px|Интерфейс модуля ''Pansharpening(rsc)'']]&lt;br /&gt;
&lt;br /&gt;
Давайте посмотрим на результат паншарпенинга при помощи указанных модулей.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:OTB pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
&lt;br /&gt;
Результат выглядит довольно неплохо, и что немаловажно, был получен очень бытро - ''OTB'' использует многопоточную обработку и задействует все ядра вашего процессора.&lt;br /&gt;
&lt;br /&gt;
===Создание модели===&lt;br /&gt;
Согласитесь, гораздо удобнее было бы обойтись без промежуточных операций и растров. Этого можно добиться путём [http://gis-lab.info/qa/sextante-qgis.html#.D0.9F.D0.BE.D1.81.D1.82.D1.80.D0.BE.D0.B8.D1.82.D0.B5.D0.BB.D1.8C_.D0.BC.D0.BE.D0.B4.D0.B5.D0.BB.D0.B5.D0.B9_.28Modeler.29 создания соответствующей модели для Processing Toolbox]. В качестве входных параметров модели следует использовать панхроматический и мультиспектральный растры. Последний сначала подготавливается при помощи ''Superimpose sensor'', а затем обрабатывается при помощи ''Pansharpening(rsc)''.&lt;br /&gt;
[[Файл:Model pansharp OTB.png|thumb|center|x550px|Модель паншарпенига]]&lt;br /&gt;
Интерфейс модели будет выглядеть следующим образом:&lt;br /&gt;
* '''High resolution panchrome raster''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Low resolution raster''' - мультиспектральное изображение низкого разрешения.&lt;br /&gt;
* '''pansharpened OTB''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp model dialogue.png|thumb|center|x500px|Интерфейс модели паншарпенига]]&lt;br /&gt;
====Файл модели====&lt;br /&gt;
Вы можете скачать модель в виде текстового файла [http://wiki.gis-lab.info/images/5/56/Pansharpening_OTBl.zip отсюда]. Архив необходимо распаковать в папку &amp;quot;.../.qgis2/processing/models/&amp;quot;. После этого она появится у вас в списке моделей Processing toolbox (необходим рестарт QGIS).&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье был рассмотрен процесс паншарпенинга изображений при помощи инструментов OTB, запускаемых при помощи модуля Processing в QGIS. OTB позволяет получить качественный и быстрый (благодаря многопоточной обработке) результат. Для паншарпенинга в QGIS удобнее всего создать соответствующую модель при помощи Model Builder, чтобы избежать проволочек, связанных с промежуточными файлами.&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html#.D0.9F.D0.B0.D0.BD.D1.88.D0.B0.D1.80.D0.BF.D0.B5.D0.BD.D0.B8.D0.BD.D0.B3 Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7 [раздел Паншарпенинг в GRASS]]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%B2%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D1%85_%D0%B4%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC_%D0%B8_%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%BE%D0%B2_%D0%B2_QGIS_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21826</id>
		<title>Создание и визуализация пользовательских диаграмм и графиков в QGIS при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%B2%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D1%85_%D0%B4%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC_%D0%B8_%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%BE%D0%B2_%D0%B2_QGIS_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21826"/>
		<updated>2015-04-09T09:24:25Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Скрипт на R для Processing Toolbox в QGIS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Опубликована|qgis-custom-plots-r}}&lt;br /&gt;
{{Аннотация|В QGIS есть встроенные инструменты построения графиков. С их помощью вы можете построить гистограммы, круговые и текстовые диаграммы. К сожалению, встроенные инструменты обладают рядом недостатков: множественные артефакты при рендеринге, громоздкость при отображении больших объёмов данных, непривлекательный вид. Частично эти проблемы можно решить путём создания собственных графиков и диаграмм. В данной статье показано, как, используя программную среду R, можно создавать пользовательские диаграммы и графики для QGIS. }}&lt;br /&gt;
&lt;br /&gt;
==Идея==&lt;br /&gt;
Мы можем создать необходимые графики в формате SVG сторонними инструментами и отображать их в качестве [части] условного знака необходимого объекта. Для создания диаграмм мы будем использовать программную среду [https://ru.wikipedia.org/wiki/R_%28%FF%E7%FB%EA_%EF%F0%EE%E3%F0%E0%EC%EC%E8%F0%EE%E2%E0%ED%E8%FF%29 '''''R'''''], в частности, пакет [http://ggplot2.org/ &amp;quot;ggplot2&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
Смоделируем ситуацию. Предположим, нам надо отобразить на диаграмме некоторые величины, находящиеся в атрибутах векторного слоя. Пусть у нас будет 12 атрибутов с необходимыми значениями, но мы знаем, что в будущем их количество увеличится до 20.&lt;br /&gt;
&lt;br /&gt;
Если мы попытаемся использовать встроенные инструменты, то полученные диаграммы загромоздят значительную область экрана (гистограммы), либо будут практически нечитаемы (текстовые диаграммы). Нам же больше всего подойдут радиальные диаграммы.&lt;br /&gt;
&lt;br /&gt;
Вот так будет выглядеть конечный результат (два варианта):&lt;br /&gt;
[[Файл:Spider chart grid.png|thumb|center|x350px|Радиальная диаграмма с сеткой]]&lt;br /&gt;
[[Файл:Spider chart no grid.png|thumb|center|x350px|Радиальная диаграмма без сетки]]&lt;br /&gt;
&lt;br /&gt;
Итак, нам нужно решить следующие задачи:&lt;br /&gt;
# Создать диаграммы в формате SVG.&lt;br /&gt;
# Вывести их на карту в качестве элемента условного знака объекта.&lt;br /&gt;
&lt;br /&gt;
Так как вторая задача проще и, возможно, вы предпочитаете использовать другое ПО для создания диаграмм, то сначала объясним, как визуализировать уже готовые диаграммы.&lt;br /&gt;
&lt;br /&gt;
==Визуализация диаграмм в QGIS==&lt;br /&gt;
Здесь всё довольно просто. Поместите все диаграммы в одну папку и дайте им имена, соответствующие уникальным идентификаторам объектов в таблице атрибутов к которым они относятся. Например, если у векторного слоя есть атрибут &amp;quot;ID&amp;quot;, содержащий значения типа 0, 1, 2..., то назовите соответствующие им диаграммы 0.svg, 1.svg, 2.svg... &lt;br /&gt;
&lt;br /&gt;
Теперь перейдём к редактированию векторного слоя. В таблице атрибутов создайте текстовое поле, в котором будет храниться путь к диаграммам (убедитесь, что поле будет способно вместить достаточное количество символов). Для заполнения атрибутов воспользуемся калькулятором полей. Вот это простое выражение позволит справиться с задачей:&lt;br /&gt;
  '/путь/к/папке/с/диаграммами/' || &amp;quot;ID&amp;quot; || '.svg'&lt;br /&gt;
[[Файл:Field calculator.png|thumb|center|x500px|Добавляем путь к файлам через калькулятор полей]]&lt;br /&gt;
Приведённое выражение создаёт строку текста путём присоединения к пути к папке значения атрибута &amp;quot;ID&amp;quot; и расширения файла. Таким образом, для каждого объекта слоя будет записан путь к файлу с его диаграммой. Обратите внимание, что статические (неизменные) значения заключены в одинарные кавычки ('), а динамические (извлекаемые из соответствующего атрибута слоя) - в двойные (&amp;quot;). Кроме того, не забывайте, что последним символом в пути к папке должен быть слеш, в противном случае, полученный путь будет неправильным (например, 'путь0.svg' вместо 'путь/0.svg'). Создание атрибута для сохранения пути и его заполнение можно произвести одновременно — выберите опцию &amp;quot;создать новое поле&amp;quot; в калькуляторе полей.&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы отобразить диаграммы в качестве условного знака, надо зайти в свойства точечного слоя и на вкладке ''Style'' задать тип символа слоя — SVG-маркер (если у вас полигональный слой, то ''Centroid Fill -&amp;gt; Marker -&amp;gt; SVG-marker''). Справа от адресной строки задания пути к файлу нажмите кнопку &amp;quot;Data defined override&amp;quot; и выберите ''Field type: sting'' и задайте нужный атрибут, см. скриншот:&lt;br /&gt;
[[Файл:Svg from field.png|thumb|center|x450px|Задание SVG-маркера из значения атрибута]]&lt;br /&gt;
&lt;br /&gt;
Обязательно задайте размеры маркера побольше — от 15 мм, иначе диаграмма будет нечитаема.&lt;br /&gt;
&lt;br /&gt;
==Создание скрипта на R для построения диаграмм==&lt;br /&gt;
Это — самая сложная часть задачи. Неискушённому пользователю придётся порядочно покопаться в документации к пакету ''ggplot2'' и соответствующих примерах, чтобы разобраться, как контролировать различные аспекты визуализации. Не будем вдаваться во все тонкости (читайте мануалы), отметим только основные моменты.&lt;br /&gt;
&lt;br /&gt;
Вот какие задачи необходимо решить на этапе создания диаграмм:&lt;br /&gt;
* '''Подобрать палитру'''&lt;br /&gt;
Для этого как нельзя лучше подходит инструмент для подбора палитры [http://colorbrewer2.org/ Color Brewer]. К сожалению, обеспечить отчётливое восприятие отдельных цветов и оттенков возможно только при довольно ограниченном наборе объектов для раскрашивания. Естественное ограничение — примерно 10 цветов, нам же нужно составить палитру для 20(!). Но выход есть — можно объединить [http://colorbrewer2.org/?type=qualitative&amp;amp;scheme=Paired&amp;amp;n=10 две &amp;quot;качественные&amp;quot; палитры по 10 цветов]:&lt;br /&gt;
[[Файл:Color palettes.png|thumb|center|x200px|Две &amp;quot;качественные&amp;quot; палитры]]&lt;br /&gt;
* '''Добавить несуществующие данные'''&lt;br /&gt;
Это необходимо для того, чтобы внешний облик диаграмм не претерпевал значительных изменений при добавлении новых значений (см. код скрипта ниже).&lt;br /&gt;
* '''Сделать фон диаграммы прозрачным'''&lt;br /&gt;
(Здесь и далее приведены параметры для построения графиков в пакете &amp;quot;ggplot2&amp;quot;)&lt;br /&gt;
  plot.background = element_blank()&lt;br /&gt;
* '''Сделать фон области значений диаграммы прозрачным'''&lt;br /&gt;
  panel.background = element_blank()&lt;br /&gt;
* '''Удалить сетку области значений диаграммы (опционально)'''&lt;br /&gt;
  panel.grid = element_blank()&lt;br /&gt;
* '''Удалить легенду'''&lt;br /&gt;
  legend.position = 'none'&lt;br /&gt;
* '''Удалить подписи к осям и объектам'''&lt;br /&gt;
  axis.text.x = element_blank(),&lt;br /&gt;
  axis.text.y = element_blank()&lt;br /&gt;
* '''Обрезать поля диаграммы''' &lt;br /&gt;
  plot.margin = unit(c(0,0,-0.3,-0.3), 'cm')&lt;br /&gt;
* '''Сохранить диаграммы на диск с сохранением прозрачности фона'''&lt;br /&gt;
  ggsave(file = 'имя_файла_и_путь', plot = p, width = 5, height = 5, units = 'cm', bg = &amp;quot;transparent&amp;quot;)&lt;br /&gt;
* '''Создать полноценную диаграмму-легенду для расшифровки созданных диаграмм'''&lt;br /&gt;
Для этого нужно построить диаграмму такого же типа, как и для объектов слоя, но с легендой, подписями и максимальными значениями данных.&lt;br /&gt;
&lt;br /&gt;
==Скрипт на R для Processing Toolbox в QGIS==&lt;br /&gt;
Удобно было бы иметь прямо в QGIS инструмент, который позволил бы генерировать необходимые диаграммы. Приведём пример скрипта для запуска из QGIS Processing Tiilbox. Можете запустить окно создания R-скрипта в Processing Toolbox, вставить туда код, приведённый ниже, и сохранить (необходимо предварительно установить R и подключить его в QGIS). Скрипт появится в разделе ''R-scripts -&amp;gt; Plotting''. &lt;br /&gt;
&lt;br /&gt;
Вот так выглядит окно настраиваемых параметров скрипта при его запуске из Processing Toolbox:&lt;br /&gt;
[[Файл:Processing script SVG.png|thumb|center|x550px|Окно скрипта]]&lt;br /&gt;
Список параметров:&lt;br /&gt;
* '''layer'''  — Векторный слой с данными для диаграммы.&lt;br /&gt;
* '''ID'''  — Атрибут, содержащий уникальные значения.&lt;br /&gt;
* '''start_field''' — Атрибут, с которого начинается серия атрибутов, содержащих значения для построения диаграмм (атрибуты должны идти подряд).&lt;br /&gt;
* '''end_field''' — Атрибут, на котором заканчивается серия атрибутов, содержащих значения для построения диаграмм (атрибуты должны идти подряд).&lt;br /&gt;
* '''add_ghost_data''' — Требуется ли добавлять несуществующие атрибуты? Ставьте галочку, если планируете в будущем добавить дополнительные атрибуты и переделывать диаграммы.&lt;br /&gt;
* '''total_bins_including_ghosts''' — Если требуется добавить несуществующие атрибуты, указать общее количество атрибутов по которым будут строиться диаграммы в будущем.&lt;br /&gt;
*'''ghost_value''' — Если требуется добавить несуществующие значения, укажите значение, которое будет присвоено дополнительным атрибутам на данный момент.&lt;br /&gt;
* '''plot_width''' — Ширина SVG-диаграмм в сантиметрах.&lt;br /&gt;
*'''plot_height''' — Высота SVG-диаграмм в сантиметрах.&lt;br /&gt;
*'''palette''' — Палитра для раскраски значений атрибутов диаграммы в виде HEX-кодов (наличие решётки &amp;quot;#&amp;quot; необязательно), разделённых запятой. Если количество элементов палитры будет меньше количества атрибутов, то часть атрибутов не будет отображена на диаграмме. Количество элементов палитры может превышать количество атрибутов.&lt;br /&gt;
* '''out_folder''' — Папка в которую будут записаны диаграммы. Несмотря на приписку &amp;quot;[optional]&amp;quot;, этот параметр является обязательным.&lt;br /&gt;
* '''R plots''' — Путь, по которому будет сохранена диаграмма-легенда&lt;br /&gt;
&lt;br /&gt;
После окончания работы скрипта в папке, указанной в '''out_folder''', появятся SVG-диаграммы, а пользователю будет показана диаграмма-легенда:&lt;br /&gt;
[[Файл:Reference chart.png|thumb|center|x550px|Диаграмма-легенда]]&lt;br /&gt;
&lt;br /&gt;
Ниже приведён код скрипта для запуска посредством Processing Toolbox, снабжённый необходимыми комментариями. Обратите внимание, что элементы графического интерфейса (входные параметры скрипта) задаются двойным знаком &amp;quot;#&amp;quot;:&lt;br /&gt;
  ##Переменная = параметр дефолтное_значение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
##Plotting = group&lt;br /&gt;
##layer=vector&lt;br /&gt;
##ID=field layer&lt;br /&gt;
##start_field= field layer&lt;br /&gt;
##end_field= field layer&lt;br /&gt;
##add_ghost_data=boolean False&lt;br /&gt;
##total_bins_including_ghosts=number 20&lt;br /&gt;
##ghost_value=number 0&lt;br /&gt;
##plot_width=number 5&lt;br /&gt;
##plot_height=number 5&lt;br /&gt;
##palette=string #a6cee3,#1f78b4,#b2df8a,#33a02c,#fb9a99,#e31a1c,#fdbf6f,#ff7f00,#cab2d6,#6a3d9a,#8dd3c7,#ffffb3,#bebada,#fb8072,#80b1d3,#fdb462,#b3de69,#fccde5,#d9d9d9,#bc80bd&lt;br /&gt;
##out_folder=folder&lt;br /&gt;
##showplots&lt;br /&gt;
&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(reshape2)&lt;br /&gt;
library(grid)&lt;br /&gt;
&lt;br /&gt;
# R не допускает пробелов в именах атрибутов, а также начала имени атрибута с цифры.&lt;br /&gt;
# Необходимо привести загруженные в R имена атрибутов в соответсвие с их именами в векторном слое&lt;br /&gt;
fixFieldName &amp;lt;- function(field_name){&lt;br /&gt;
field_name &amp;lt;- gsub(' ', '.', field_name)&lt;br /&gt;
if( is.na(as.integer(substr(field_name,1,1))) == F ) {&lt;br /&gt;
    field_name &amp;lt;- paste('X', field_name, sep = '')&lt;br /&gt;
    }&lt;br /&gt;
    field_name&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
palette &amp;lt;- strsplit(palette, ',')&lt;br /&gt;
palette_1 &amp;lt;- c()&lt;br /&gt;
&lt;br /&gt;
# Processing удаляет знак '#' из строки параметров — надо это исправить&lt;br /&gt;
for (i in palette) {&lt;br /&gt;
    char = substr(i,1,1)&lt;br /&gt;
    print(char)&lt;br /&gt;
    if ( char != '#') {&lt;br /&gt;
    colour &amp;lt;- paste('#', i, sep = '')&lt;br /&gt;
    palette_1 &amp;lt;- c(palette_1, colour)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
palette &amp;lt;- palette_1&lt;br /&gt;
&lt;br /&gt;
# Processing не добавляет слеш в конец адреса папки. Надо это исправить.&lt;br /&gt;
slash &amp;lt;- substr(out_folder, nchar(out_folder), nchar(out_folder))&lt;br /&gt;
if (slash != '/' | slash != '\\' ) {&lt;br /&gt;
    out_folder &amp;lt;- paste(out_folder, '/', sep = '')&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ID &amp;lt;- fixFieldName(ID)&lt;br /&gt;
start_field &amp;lt;- fixFieldName(start_field)&lt;br /&gt;
end_field &amp;lt;- fixFieldName(end_field)&lt;br /&gt;
&lt;br /&gt;
dFrame &amp;lt;- as.data.frame(layer)&lt;br /&gt;
ID &amp;lt;- match(ID, names(dFrame))&lt;br /&gt;
start_field &amp;lt;- match(start_field, names(dFrame))&lt;br /&gt;
end_field &amp;lt;- match(end_field, names(dFrame))&lt;br /&gt;
print(start_field)&lt;br /&gt;
print(end_field)&lt;br /&gt;
max_value &amp;lt;- max(dFrame[,start_field:end_field])&lt;br /&gt;
&lt;br /&gt;
addGhostData &amp;lt;- function(temp_df, d_value = 0, n_bins = 20){&lt;br /&gt;
    # Эта функция добавляет несуществующие данные&lt;br /&gt;
    temp_df$variable &amp;lt;- as.character(temp_df$variable) # необходимо для добавления новых строк&lt;br /&gt;
&lt;br /&gt;
    # создаём необходимое количество записей&lt;br /&gt;
    if (total_columns &amp;lt; n_bins) {&lt;br /&gt;
    for (col in (total_columns + 1):n_bins) {&lt;br /&gt;
    row &amp;lt;- c(paste('X', 'ZZ99', col, sep = ''), d_value) # так в 90% случаев добавленные записи будут в конце легенды на диаграмме ;-)&lt;br /&gt;
    temp_df &amp;lt;- rbind(temp_df, row)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # возвращаем датафрейм в нормальное состояние&lt;br /&gt;
    temp_df$variable &amp;lt;- as.factor(temp_df$variable)&lt;br /&gt;
    temp_df$value &amp;lt;- as.integer(temp_df$value)&lt;br /&gt;
    temp_df&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# создаём и записываем диаграммы&lt;br /&gt;
for (i in c( 1:nrow(dFrame) ) ) {&lt;br /&gt;
&lt;br /&gt;
    # подготовка данных&lt;br /&gt;
    total_columns &amp;lt;- end_field - start_field +1&lt;br /&gt;
    temp_df &amp;lt;- dFrame[,start_field:end_field][i,]&lt;br /&gt;
    temp_df &amp;lt;- melt(temp_df)&lt;br /&gt;
    &lt;br /&gt;
    # добавляем несуществующие атрибуты, если требуется&lt;br /&gt;
    if (add_ghost_data) {&lt;br /&gt;
    temp_df &amp;lt;- addGhostData(temp_df, ghost_value, total_bins_including_ghosts)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # рисуем диаграмму&lt;br /&gt;
    p &amp;lt;- ggplot(temp_df, aes(x = variable, y = value)) +&lt;br /&gt;
        geom_bar(aes(fill = variable), colour = 'white', stat=&amp;quot;identity&amp;quot;)+&lt;br /&gt;
        coord_polar()+&lt;br /&gt;
        ylim(0, max_value)+ # set y limits so all charts will be comparable&lt;br /&gt;
        theme(axis.text.x = element_blank(),&lt;br /&gt;
        axis.text.y = element_blank(),&lt;br /&gt;
        axis.title = element_blank(),&lt;br /&gt;
        axis.ticks = element_blank(),&lt;br /&gt;
        title = element_text(face = 'bold', size = 16),&lt;br /&gt;
        legend.position = 'none',&lt;br /&gt;
        legend.title = element_blank(),&lt;br /&gt;
        legend.text = element_text(size = 10),&lt;br /&gt;
        plot.margin = unit(c(0,0,-0.3,-0.3), 'cm'), # удаляем поля!!!&lt;br /&gt;
        plot.background = element_blank(), # прозрачный фон диаграммы&lt;br /&gt;
        panel.background = element_blank(), # прозрачный фон области значений диаграммы&lt;br /&gt;
        panel.grid = element_blank() # удаляем сетку области диаграммы (закомментируйте эту строку и запятую на предыдущей строке, чтобы оставить сетку)&lt;br /&gt;
        )+&lt;br /&gt;
        labs(x=NULL, y=NULL, title = NULL)+ # ещё раз удалим все подписи ;-)&lt;br /&gt;
        scale_fill_manual(values = palette) # раскрасим диаграмму в нужные цвета&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # получаем имя файла&lt;br /&gt;
    fid &amp;lt;- dFrame[,ID][i]&lt;br /&gt;
    file_name &amp;lt;- paste(out_folder, fid, '.svg', sep = '')&lt;br /&gt;
    &lt;br /&gt;
    # сохраняем диаграмму&lt;br /&gt;
    ggsave(file = file_name, plot = p, width = plot_width, height = plot_height, units = 'cm', bg = &amp;quot;transparent&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Создаём диаграмму-легенду&lt;br /&gt;
temp_df &amp;lt;- dFrame[,start_field:end_field]&lt;br /&gt;
l &amp;lt;- list(NULL)&lt;br /&gt;
for ( i in (1:ncol(temp_df)) ){l[[i]] = max_value}&lt;br /&gt;
&lt;br /&gt;
temp_df &amp;lt;- rbind(temp_df, l)&lt;br /&gt;
row &amp;lt;- nrow(temp_df)&lt;br /&gt;
new_df &amp;lt;- temp_df[row,]&lt;br /&gt;
new_df &amp;lt;- melt(new_df)&lt;br /&gt;
&lt;br /&gt;
# добавляем несуществующие атрибуты, если надо&lt;br /&gt;
if (add_ghost_data) {&lt;br /&gt;
    new_df &amp;lt;- addGhostData(new_df, ghost_value, total_bins_including_ghosts)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# удаляем нежелательные знаки из имён атрибутов, а в 5% случаев — нужные (но ничего не поделать!)&lt;br /&gt;
new_df$variable &amp;lt;- as.character(new_df$variable)&lt;br /&gt;
for (i in (1:nrow(new_df))) {&lt;br /&gt;
variable &amp;lt;- new_df[,1][i]&lt;br /&gt;
print(variable)&lt;br /&gt;
new_df[,1][i] &amp;lt;- substr(variable, 2, nchar(variable))&lt;br /&gt;
}&lt;br /&gt;
new_df$variable &amp;lt;- as.factor(new_df$variable)&lt;br /&gt;
&lt;br /&gt;
# Строим диаграмму-легенду&lt;br /&gt;
p &amp;lt;- ggplot(new_df, aes(x = variable, y = value)) +&lt;br /&gt;
    geom_bar(aes(fill = variable), colour = 'white', stat=&amp;quot;identity&amp;quot;)+&lt;br /&gt;
    coord_polar()+&lt;br /&gt;
    ylim(0, max_value)+ # set y limits so all charts will be comparable&lt;br /&gt;
    labs(title = 'Reference chart',&lt;br /&gt;
    legend = 'Attribute') +&lt;br /&gt;
    theme(axis.text.x = element_text(angle=0, hjust = NULL, size = 10, color = 'black'),&lt;br /&gt;
    axis.text.y = element_text(angle=0, hjust = NULL, size = 10, color = 'black'),&lt;br /&gt;
    axis.title = element_blank(),#element_text(face = 'bold', size = 16),&lt;br /&gt;
    title = element_text(face = 'bold', size = 16),&lt;br /&gt;
    legend.position = 'right',&lt;br /&gt;
    legend.title = element_blank(),#element_text(angle=0, hjust = NULL, size = 14, color = 'black'),&lt;br /&gt;
    legend.text = element_text(size = 10)&lt;br /&gt;
    )+&lt;br /&gt;
    scale_fill_manual(values = palette)&lt;br /&gt;
&lt;br /&gt;
plot(p)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье было продемонстрировано создание пользовательских диаграмм на основе значений атрибутов векторных данных и их отображение в качестве условных знаков для объектов векторного слоя. Приведённый скрипт для ''Processing Toolbox'' в QGIS позволяет генерировать необходимые диаграммы, и может быть использован как основа для создания диаграмм и графиков других типов.&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%B2%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D1%85_%D0%B4%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC_%D0%B8_%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%BE%D0%B2_%D0%B2_QGIS_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21825</id>
		<title>Создание и визуализация пользовательских диаграмм и графиков в QGIS при помощи R</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%B2%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D1%85_%D0%B4%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC_%D0%B8_%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%BE%D0%B2_%D0%B2_QGIS_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_R&amp;diff=21825"/>
		<updated>2015-04-08T23:46:53Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Создание скрипта на R для построения диаграмм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Опубликована|qgis-custom-plots-r}}&lt;br /&gt;
{{Аннотация|В QGIS есть встроенные инструменты построения графиков. С их помощью вы можете построить гистограммы, круговые и текстовые диаграммы. К сожалению, встроенные инструменты обладают рядом недостатков: множественные артефакты при рендеринге, громоздкость при отображении больших объёмов данных, непривлекательный вид. Частично эти проблемы можно решить путём создания собственных графиков и диаграмм. В данной статье показано, как, используя программную среду R, можно создавать пользовательские диаграммы и графики для QGIS. }}&lt;br /&gt;
&lt;br /&gt;
==Идея==&lt;br /&gt;
Мы можем создать необходимые графики в формате SVG сторонними инструментами и отображать их в качестве [части] условного знака необходимого объекта. Для создания диаграмм мы будем использовать программную среду [https://ru.wikipedia.org/wiki/R_%28%FF%E7%FB%EA_%EF%F0%EE%E3%F0%E0%EC%EC%E8%F0%EE%E2%E0%ED%E8%FF%29 '''''R'''''], в частности, пакет [http://ggplot2.org/ &amp;quot;ggplot2&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
Смоделируем ситуацию. Предположим, нам надо отобразить на диаграмме некоторые величины, находящиеся в атрибутах векторного слоя. Пусть у нас будет 12 атрибутов с необходимыми значениями, но мы знаем, что в будущем их количество увеличится до 20.&lt;br /&gt;
&lt;br /&gt;
Если мы попытаемся использовать встроенные инструменты, то полученные диаграммы загромоздят значительную область экрана (гистограммы), либо будут практически нечитаемы (текстовые диаграммы). Нам же больше всего подойдут радиальные диаграммы.&lt;br /&gt;
&lt;br /&gt;
Вот так будет выглядеть конечный результат (два варианта):&lt;br /&gt;
[[Файл:Spider chart grid.png|thumb|center|x350px|Радиальная диаграмма с сеткой]]&lt;br /&gt;
[[Файл:Spider chart no grid.png|thumb|center|x350px|Радиальная диаграмма без сетки]]&lt;br /&gt;
&lt;br /&gt;
Итак, нам нужно решить следующие задачи:&lt;br /&gt;
# Создать диаграммы в формате SVG.&lt;br /&gt;
# Вывести их на карту в качестве элемента условного знака объекта.&lt;br /&gt;
&lt;br /&gt;
Так как вторая задача проще и, возможно, вы предпочитаете использовать другое ПО для создания диаграмм, то сначала объясним, как визуализировать уже готовые диаграммы.&lt;br /&gt;
&lt;br /&gt;
==Визуализация диаграмм в QGIS==&lt;br /&gt;
Здесь всё довольно просто. Поместите все диаграммы в одну папку и дайте им имена, соответствующие уникальным идентификаторам объектов в таблице атрибутов к которым они относятся. Например, если у векторного слоя есть атрибут &amp;quot;ID&amp;quot;, содержащий значения типа 0, 1, 2..., то назовите соответствующие им диаграммы 0.svg, 1.svg, 2.svg... &lt;br /&gt;
&lt;br /&gt;
Теперь перейдём к редактированию векторного слоя. В таблице атрибутов создайте текстовое поле, в котором будет храниться путь к диаграммам (убедитесь, что поле будет способно вместить достаточное количество символов). Для заполнения атрибутов воспользуемся калькулятором полей. Вот это простое выражение позволит справиться с задачей:&lt;br /&gt;
  '/путь/к/папке/с/диаграммами/' || &amp;quot;ID&amp;quot; || '.svg'&lt;br /&gt;
[[Файл:Field calculator.png|thumb|center|x500px|Добавляем путь к файлам через калькулятор полей]]&lt;br /&gt;
Приведённое выражение создаёт строку текста путём присоединения к пути к папке значения атрибута &amp;quot;ID&amp;quot; и расширения файла. Таким образом, для каждого объекта слоя будет записан путь к файлу с его диаграммой. Обратите внимание, что статические (неизменные) значения заключены в одинарные кавычки ('), а динамические (извлекаемые из соответствующего атрибута слоя) - в двойные (&amp;quot;). Кроме того, не забывайте, что последним символом в пути к папке должен быть слеш, в противном случае, полученный путь будет неправильным (например, 'путь0.svg' вместо 'путь/0.svg'). Создание атрибута для сохранения пути и его заполнение можно произвести одновременно — выберите опцию &amp;quot;создать новое поле&amp;quot; в калькуляторе полей.&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы отобразить диаграммы в качестве условного знака, надо зайти в свойства точечного слоя и на вкладке ''Style'' задать тип символа слоя — SVG-маркер (если у вас полигональный слой, то ''Centroid Fill -&amp;gt; Marker -&amp;gt; SVG-marker''). Справа от адресной строки задания пути к файлу нажмите кнопку &amp;quot;Data defined override&amp;quot; и выберите ''Field type: sting'' и задайте нужный атрибут, см. скриншот:&lt;br /&gt;
[[Файл:Svg from field.png|thumb|center|x450px|Задание SVG-маркера из значения атрибута]]&lt;br /&gt;
&lt;br /&gt;
Обязательно задайте размеры маркера побольше — от 15 мм, иначе диаграмма будет нечитаема.&lt;br /&gt;
&lt;br /&gt;
==Создание скрипта на R для построения диаграмм==&lt;br /&gt;
Это — самая сложная часть задачи. Неискушённому пользователю придётся порядочно покопаться в документации к пакету ''ggplot2'' и соответствующих примерах, чтобы разобраться, как контролировать различные аспекты визуализации. Не будем вдаваться во все тонкости (читайте мануалы), отметим только основные моменты.&lt;br /&gt;
&lt;br /&gt;
Вот какие задачи необходимо решить на этапе создания диаграмм:&lt;br /&gt;
* '''Подобрать палитру'''&lt;br /&gt;
Для этого как нельзя лучше подходит инструмент для подбора палитры [http://colorbrewer2.org/ Color Brewer]. К сожалению, обеспечить отчётливое восприятие отдельных цветов и оттенков возможно только при довольно ограниченном наборе объектов для раскрашивания. Естественное ограничение — примерно 10 цветов, нам же нужно составить палитру для 20(!). Но выход есть — можно объединить [http://colorbrewer2.org/?type=qualitative&amp;amp;scheme=Paired&amp;amp;n=10 две &amp;quot;качественные&amp;quot; палитры по 10 цветов]:&lt;br /&gt;
[[Файл:Color palettes.png|thumb|center|x200px|Две &amp;quot;качественные&amp;quot; палитры]]&lt;br /&gt;
* '''Добавить несуществующие данные'''&lt;br /&gt;
Это необходимо для того, чтобы внешний облик диаграмм не претерпевал значительных изменений при добавлении новых значений (см. код скрипта ниже).&lt;br /&gt;
* '''Сделать фон диаграммы прозрачным'''&lt;br /&gt;
(Здесь и далее приведены параметры для построения графиков в пакете &amp;quot;ggplot2&amp;quot;)&lt;br /&gt;
  plot.background = element_blank()&lt;br /&gt;
* '''Сделать фон области значений диаграммы прозрачным'''&lt;br /&gt;
  panel.background = element_blank()&lt;br /&gt;
* '''Удалить сетку области значений диаграммы (опционально)'''&lt;br /&gt;
  panel.grid = element_blank()&lt;br /&gt;
* '''Удалить легенду'''&lt;br /&gt;
  legend.position = 'none'&lt;br /&gt;
* '''Удалить подписи к осям и объектам'''&lt;br /&gt;
  axis.text.x = element_blank(),&lt;br /&gt;
  axis.text.y = element_blank()&lt;br /&gt;
* '''Обрезать поля диаграммы''' &lt;br /&gt;
  plot.margin = unit(c(0,0,-0.3,-0.3), 'cm')&lt;br /&gt;
* '''Сохранить диаграммы на диск с сохранением прозрачности фона'''&lt;br /&gt;
  ggsave(file = 'имя_файла_и_путь', plot = p, width = 5, height = 5, units = 'cm', bg = &amp;quot;transparent&amp;quot;)&lt;br /&gt;
* '''Создать полноценную диаграмму-легенду для расшифровки созданных диаграмм'''&lt;br /&gt;
Для этого нужно построить диаграмму такого же типа, как и для объектов слоя, но с легендой, подписями и максимальными значениями данных.&lt;br /&gt;
&lt;br /&gt;
==Скрипт на R для Processing Toolbox в QGIS==&lt;br /&gt;
Теперь приведём пример скрипта для QGIS. Можете запустить окно создания R-скрипта в Processing Toolbox, вставить туда этот скрипт и сохранить (необходимо предварительно установить R и подключить его в QGIS). Он появится в разделе ''R-scripts -&amp;gt; Plotting''. &lt;br /&gt;
&lt;br /&gt;
Вот так выглядит окно настраиваемых параметров скрипта при его запуске из Processing Toolbox:&lt;br /&gt;
[[Файл:Processing script SVG.png|thumb|center|x550px|Окно скрипта]]&lt;br /&gt;
Список параметров:&lt;br /&gt;
* '''layer'''  — Векторный слой с данными для диаграммы.&lt;br /&gt;
* '''ID'''  — Атрибут, содержащий уникальные значения.&lt;br /&gt;
* '''start_field''' — Атрибут, с которого начинается серия атрибутов, содержащих значения для построения диаграмм (атрибуты должны идти подряд).&lt;br /&gt;
* '''end_field''' — Атрибут, на котором заканчивается серия атрибутов, содержащих значения для построения диаграмм (атрибуты должны идти подряд).&lt;br /&gt;
* '''add_ghost_data''' — Требуется ли добавлять несуществующие атрибуты? Ставьте галочку, если планируете в будущем добавить дополнительные атрибуты и переделывать диаграммы.&lt;br /&gt;
* '''total_bins_including_ghosts''' — Если требуется добавить несуществующие атрибуты, указать общее количество атрибутов по которым будут строиться диаграммы в будущем.&lt;br /&gt;
*'''ghost_value''' — Если требуется добавить несуществующие значения, укажите значение, которое будет присвоено дополнительным атрибутам на данный момент.&lt;br /&gt;
* '''plot_width''' — Ширина SVG-диаграмм в сантиметрах.&lt;br /&gt;
*'''plot_height''' — Высота SVG-диаграмм в сантиметрах.&lt;br /&gt;
*'''palette''' — Палитра для раскраски значений атрибутов диаграммы в виде HEX-кодов (наличие решётки &amp;quot;#&amp;quot; необязательно), разделённых запятой. Если количество элементов палитры будет меньше количества атрибутов, то часть атрибутов не будет отображена на диаграмме. Количество элементов палитры может превышать количество атрибутов.&lt;br /&gt;
* '''out_folder''' — Папка в которую будут записаны диаграммы. Несмотря на приписку &amp;quot;[optional]&amp;quot;, этот параметр является обязательным.&lt;br /&gt;
* '''R plots''' — Путь, по которому будет сохранена диаграмма-легенда&lt;br /&gt;
&lt;br /&gt;
После окончания работы скрипта в папке, указанной в '''out_folder''', появятся SVG-диаграммы, а пользователю будет показана диаграмма-легенда:&lt;br /&gt;
[[Файл:Reference chart.png|thumb|center|x550px|Диаграмма-легенда]]&lt;br /&gt;
&lt;br /&gt;
Ниже приведён код скрипта для запуска посредством Processing Toolbox, снабжённый необходимыми комментариями. Обратите внимание, что элементы графического интерфейса (входные параметры скрипта) задаются двойным знаком &amp;quot;#&amp;quot;:&lt;br /&gt;
  ##Переменная = параметр дефолтное_значение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
##Plotting = group&lt;br /&gt;
##layer=vector&lt;br /&gt;
##ID=field layer&lt;br /&gt;
##start_field= field layer&lt;br /&gt;
##end_field= field layer&lt;br /&gt;
##add_ghost_data=boolean False&lt;br /&gt;
##total_bins_including_ghosts=number 20&lt;br /&gt;
##ghost_value=number 0&lt;br /&gt;
##plot_width=number 5&lt;br /&gt;
##plot_height=number 5&lt;br /&gt;
##palette=string #a6cee3,#1f78b4,#b2df8a,#33a02c,#fb9a99,#e31a1c,#fdbf6f,#ff7f00,#cab2d6,#6a3d9a,#8dd3c7,#ffffb3,#bebada,#fb8072,#80b1d3,#fdb462,#b3de69,#fccde5,#d9d9d9,#bc80bd&lt;br /&gt;
##out_folder=folder&lt;br /&gt;
##showplots&lt;br /&gt;
&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(reshape2)&lt;br /&gt;
library(grid)&lt;br /&gt;
&lt;br /&gt;
# R не допускает пробелов в именах атрибутов, а также начала имени атрибута с цифры.&lt;br /&gt;
# Необходимо привести загруженные в R имена атрибутов в соответсвие с их именами в векторном слое&lt;br /&gt;
fixFieldName &amp;lt;- function(field_name){&lt;br /&gt;
field_name &amp;lt;- gsub(' ', '.', field_name)&lt;br /&gt;
if( is.na(as.integer(substr(field_name,1,1))) == F ) {&lt;br /&gt;
    field_name &amp;lt;- paste('X', field_name, sep = '')&lt;br /&gt;
    }&lt;br /&gt;
    field_name&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
palette &amp;lt;- strsplit(palette, ',')&lt;br /&gt;
palette_1 &amp;lt;- c()&lt;br /&gt;
&lt;br /&gt;
# Processing удаляет знак '#' из строки параметров — надо это исправить&lt;br /&gt;
for (i in palette) {&lt;br /&gt;
    char = substr(i,1,1)&lt;br /&gt;
    print(char)&lt;br /&gt;
    if ( char != '#') {&lt;br /&gt;
    colour &amp;lt;- paste('#', i, sep = '')&lt;br /&gt;
    palette_1 &amp;lt;- c(palette_1, colour)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
palette &amp;lt;- palette_1&lt;br /&gt;
&lt;br /&gt;
# Processing не добавляет слеш в конец адреса папки. Надо это исправить.&lt;br /&gt;
slash &amp;lt;- substr(out_folder, nchar(out_folder), nchar(out_folder))&lt;br /&gt;
if (slash != '/' | slash != '\\' ) {&lt;br /&gt;
    out_folder &amp;lt;- paste(out_folder, '/', sep = '')&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ID &amp;lt;- fixFieldName(ID)&lt;br /&gt;
start_field &amp;lt;- fixFieldName(start_field)&lt;br /&gt;
end_field &amp;lt;- fixFieldName(end_field)&lt;br /&gt;
&lt;br /&gt;
dFrame &amp;lt;- as.data.frame(layer)&lt;br /&gt;
ID &amp;lt;- match(ID, names(dFrame))&lt;br /&gt;
start_field &amp;lt;- match(start_field, names(dFrame))&lt;br /&gt;
end_field &amp;lt;- match(end_field, names(dFrame))&lt;br /&gt;
print(start_field)&lt;br /&gt;
print(end_field)&lt;br /&gt;
max_value &amp;lt;- max(dFrame[,start_field:end_field])&lt;br /&gt;
&lt;br /&gt;
addGhostData &amp;lt;- function(temp_df, d_value = 0, n_bins = 20){&lt;br /&gt;
    # Эта функция добавляет несуществующие данные&lt;br /&gt;
    temp_df$variable &amp;lt;- as.character(temp_df$variable) # необходимо для добавления новых строк&lt;br /&gt;
&lt;br /&gt;
    # создаём необходимое количество записей&lt;br /&gt;
    if (total_columns &amp;lt; n_bins) {&lt;br /&gt;
    for (col in (total_columns + 1):n_bins) {&lt;br /&gt;
    row &amp;lt;- c(paste('X', 'ZZ99', col, sep = ''), d_value) # так в 90% случаев добавленные записи будут в конце легенды на диаграмме ;-)&lt;br /&gt;
    temp_df &amp;lt;- rbind(temp_df, row)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # возвращаем датафрейм в нормальное состояние&lt;br /&gt;
    temp_df$variable &amp;lt;- as.factor(temp_df$variable)&lt;br /&gt;
    temp_df$value &amp;lt;- as.integer(temp_df$value)&lt;br /&gt;
    temp_df&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# создаём и записываем диаграммы&lt;br /&gt;
for (i in c( 1:nrow(dFrame) ) ) {&lt;br /&gt;
&lt;br /&gt;
    # подготовка данных&lt;br /&gt;
    total_columns &amp;lt;- end_field - start_field +1&lt;br /&gt;
    temp_df &amp;lt;- dFrame[,start_field:end_field][i,]&lt;br /&gt;
    temp_df &amp;lt;- melt(temp_df)&lt;br /&gt;
    &lt;br /&gt;
    # добавляем несуществующие атрибуты, если требуется&lt;br /&gt;
    if (add_ghost_data) {&lt;br /&gt;
    temp_df &amp;lt;- addGhostData(temp_df, ghost_value, total_bins_including_ghosts)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # рисуем диаграмму&lt;br /&gt;
    p &amp;lt;- ggplot(temp_df, aes(x = variable, y = value)) +&lt;br /&gt;
        geom_bar(aes(fill = variable), colour = 'white', stat=&amp;quot;identity&amp;quot;)+&lt;br /&gt;
        coord_polar()+&lt;br /&gt;
        ylim(0, max_value)+ # set y limits so all charts will be comparable&lt;br /&gt;
        theme(axis.text.x = element_blank(),&lt;br /&gt;
        axis.text.y = element_blank(),&lt;br /&gt;
        axis.title = element_blank(),&lt;br /&gt;
        axis.ticks = element_blank(),&lt;br /&gt;
        title = element_text(face = 'bold', size = 16),&lt;br /&gt;
        legend.position = 'none',&lt;br /&gt;
        legend.title = element_blank(),&lt;br /&gt;
        legend.text = element_text(size = 10),&lt;br /&gt;
        plot.margin = unit(c(0,0,-0.3,-0.3), 'cm'), # удаляем поля!!!&lt;br /&gt;
        plot.background = element_blank(), # прозрачный фон диаграммы&lt;br /&gt;
        panel.background = element_blank(), # прозрачный фон области значений диаграммы&lt;br /&gt;
        panel.grid = element_blank() # удаляем сетку области диаграммы (закомментируйте эту строку и запятую на предыдущей строке, чтобы оставить сетку)&lt;br /&gt;
        )+&lt;br /&gt;
        labs(x=NULL, y=NULL, title = NULL)+ # ещё раз удалим все подписи ;-)&lt;br /&gt;
        scale_fill_manual(values = palette) # раскрасим диаграмму в нужные цвета&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # получаем имя файла&lt;br /&gt;
    fid &amp;lt;- dFrame[,ID][i]&lt;br /&gt;
    file_name &amp;lt;- paste(out_folder, fid, '.svg', sep = '')&lt;br /&gt;
    &lt;br /&gt;
    # сохраняем диаграмму&lt;br /&gt;
    ggsave(file = file_name, plot = p, width = plot_width, height = plot_height, units = 'cm', bg = &amp;quot;transparent&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Создаём диаграмму-легенду&lt;br /&gt;
temp_df &amp;lt;- dFrame[,start_field:end_field]&lt;br /&gt;
l &amp;lt;- list(NULL)&lt;br /&gt;
for ( i in (1:ncol(temp_df)) ){l[[i]] = max_value}&lt;br /&gt;
&lt;br /&gt;
temp_df &amp;lt;- rbind(temp_df, l)&lt;br /&gt;
row &amp;lt;- nrow(temp_df)&lt;br /&gt;
new_df &amp;lt;- temp_df[row,]&lt;br /&gt;
new_df &amp;lt;- melt(new_df)&lt;br /&gt;
&lt;br /&gt;
# добавляем несуществующие атрибуты, если надо&lt;br /&gt;
if (add_ghost_data) {&lt;br /&gt;
    new_df &amp;lt;- addGhostData(new_df, ghost_value, total_bins_including_ghosts)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# удаляем нежелательные знаки из имён атрибутов, а в 5% случаев — нужные (но ничего не поделать!)&lt;br /&gt;
new_df$variable &amp;lt;- as.character(new_df$variable)&lt;br /&gt;
for (i in (1:nrow(new_df))) {&lt;br /&gt;
variable &amp;lt;- new_df[,1][i]&lt;br /&gt;
print(variable)&lt;br /&gt;
new_df[,1][i] &amp;lt;- substr(variable, 2, nchar(variable))&lt;br /&gt;
}&lt;br /&gt;
new_df$variable &amp;lt;- as.factor(new_df$variable)&lt;br /&gt;
&lt;br /&gt;
# Строим диаграмму-легенду&lt;br /&gt;
p &amp;lt;- ggplot(new_df, aes(x = variable, y = value)) +&lt;br /&gt;
    geom_bar(aes(fill = variable), colour = 'white', stat=&amp;quot;identity&amp;quot;)+&lt;br /&gt;
    coord_polar()+&lt;br /&gt;
    ylim(0, max_value)+ # set y limits so all charts will be comparable&lt;br /&gt;
    labs(title = 'Reference chart',&lt;br /&gt;
    legend = 'Attribute') +&lt;br /&gt;
    theme(axis.text.x = element_text(angle=0, hjust = NULL, size = 10, color = 'black'),&lt;br /&gt;
    axis.text.y = element_text(angle=0, hjust = NULL, size = 10, color = 'black'),&lt;br /&gt;
    axis.title = element_blank(),#element_text(face = 'bold', size = 16),&lt;br /&gt;
    title = element_text(face = 'bold', size = 16),&lt;br /&gt;
    legend.position = 'right',&lt;br /&gt;
    legend.title = element_blank(),#element_text(angle=0, hjust = NULL, size = 14, color = 'black'),&lt;br /&gt;
    legend.text = element_text(size = 10)&lt;br /&gt;
    )+&lt;br /&gt;
    scale_fill_manual(values = palette)&lt;br /&gt;
&lt;br /&gt;
plot(p)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье было продемонстрировано создание пользовательских диаграмм на основе значений атрибутов векторных данных и их отображение в качестве условных знаков для объектов векторного слоя. Приведённый скрипт для ''Processing Toolbox'' в QGIS позволяет генерировать необходимые диаграммы, и может быть использован как основа для создания диаграмм и графиков других типов.&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21804</id>
		<title>Паншарпенинг в QGIS с использованием Orfeo ToolBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21804"/>
		<updated>2015-04-05T12:54:14Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Запуск паншарпенинга из QGIS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в QGIS посредством инструментария Orfeo ToolBox. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/01/pansharpening-in-qgis-using-qtb.html Misanthrope's thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
При работе с данными дистанционного зондирования Земли зачастую приходится решать задачу улучшения снимков с низким разрешением за счёт снимков с высоким. В QGIS нет встроенного инструмента паншарпенинга, но есть возможность подключения инструментов [https://www.orfeo-toolbox.org/ Orfeo ToolBox] (OTB), где они есть.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Паншарпенинг в OTB и QGIS==&lt;br /&gt;
С программной точки зрения процесс паншарпенинга делится на две стадии: 1) подготовительную, во время которой разрешение и экстент мультиспектрального растра приводится в соответствие с экстентом и разрешением панхроматического растра (это необходимо для проведения операций растровой алгебры, вовлекающих оба растра); 2) непосредственно паншарпенинг.&lt;br /&gt;
===Использование утилиты OTB===&lt;br /&gt;
OTB по своей сути является набором консольных утилит и приложений. За паншарпенинг отвечает приложение [https://www.orfeo-toolbox.org//CookBook/CookBooksu36.html#x57-770004.2.2 otbcli_BundleToPerfectSensor]. Оно совмещает в себе обе стадии, описанные выше, и запускается следующей консольной командой: &lt;br /&gt;
  otbcli_BundleToPerfectSensor -inp pan_image -inxs xs_image -out output_image&lt;br /&gt;
где pan_image, xs_image и output_image соответсвенно - пути к панхроматическому, мультиспектральному и результирующему растрам. О дополнительных опциях читайте в документации.&lt;br /&gt;
===Запуск паншарпенинга из QGIS===&lt;br /&gt;
В QGIS инструменты OTB подключаются через модуль Processing. После установки OTB на компьютер  зайдите в QGIS в настройки модуля Processing (''Processing -&amp;gt; Options -&amp;gt; Providers'') и активируйте интеграцию с OTB ([http://docs.qgis.org/2.6/ru/docs/user_manual/processing/3rdParty.html#orfeo-toolbox инструкция] на английском):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Enable OTB.png|center]]&lt;br /&gt;
&lt;br /&gt;
Теперь в ''Processing Toolbox'' у вас появится набор инструментов ''Orfeo Toolbox''. К сожалению, в инструментарий входят только консольные утилиты, но не приложения (то есть модуль otbcli_BundleToPerfectSensor не доступен из QGIS). Поэтому не спешите сразу запускать утилиты паншарпенинга (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; [https://www.orfeo-toolbox.org/CookBook/CookBooksu88.html#x119-4740005.4.9 Pansharpening]''), так как здесь требуется, чтобы все входные растры имели идентичный экстент и разрешение, то есть выполняется только вторая стадия. Чтобы выполнить первую - необходимо воспользоваться модулем [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Superimpose sensor''] (''Orfeo Toolbox -&amp;gt; Geometry -&amp;gt; Superimpose sensor'').&lt;br /&gt;
&lt;br /&gt;
Модуль ''Superimpose sensor'' имеет следующие параметры:&lt;br /&gt;
* '''Reference input''' - базовое изображение, к параметрам которого будет приведено обрабатываемое изображение (здесь выбираем панхроматическое).&lt;br /&gt;
* '''The image to reproject''' - изображение, чьи параметры будут приведены к параметрам базового изображения (здесь выбираем мультиспектральное).&lt;br /&gt;
* '''Default elevation''' - средняя высота изображения над эллипсоидом.&lt;br /&gt;
* '''Spacing of the deformation field''' - интервал расстояния поля деформации (coarser deformation field).&lt;br /&gt;
* '''Interpolation''' - тип интерполяции.&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти. (Если изменение дефолтного значения [http://gis-lab.info/forum/viewtopic.php?f=3&amp;amp;t=18913&amp;amp;p=127347#p127344 приводит к вылету модуля] - обновите Processing.) &lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Superimpose sensor.png|thumb|center|x500px|Интерфейс модуля Superimpose sensor]]&lt;br /&gt;
&lt;br /&gt;
После трансформации мультиспектрального растра можно переходить непосредственно к паншарпенингу. Модуль [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Pansharpening(rsc)''] имеет следующие параметры:&lt;br /&gt;
* '''Input PAN image''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Input XS image''' - мультиспектральное изображение, приведённое к параметрам панхроматического.&lt;br /&gt;
* '''Algorithm''' - алгоритм для паншарпенинга (не изменяется, для использования других алгоритмов (LMVM и Bayesian) используйте соответсвующие модули ''Pansharpening(bayes) и Pansharpening(lvmv)'')&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти. (Если изменение дефолтного значения [http://gis-lab.info/forum/viewtopic.php?f=3&amp;amp;t=18913&amp;amp;p=127347#p127344 приводит к вылету модуля] - обновите Processing.) &lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp dialogue.png|thumb|center|x500px|Интерфейс модуля ''Pansharpening(rsc)'']]&lt;br /&gt;
&lt;br /&gt;
Давайте посмотрим на результат паншарпенинга при помощи указанных модулей.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:OTB pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
&lt;br /&gt;
Результат выглядит довольно неплохо, и что немаловажно, был получен очень бытро - ''OTB'' использует многопоточную обработку и задействует все ядра вашего процессора.&lt;br /&gt;
&lt;br /&gt;
===Создание модели===&lt;br /&gt;
Согласитесь, гораздо удобнее было бы обойтись без промежуточных операций и растров. Этого можно добиться путём [http://gis-lab.info/qa/sextante-qgis.html#.D0.9F.D0.BE.D1.81.D1.82.D1.80.D0.BE.D0.B8.D1.82.D0.B5.D0.BB.D1.8C_.D0.BC.D0.BE.D0.B4.D0.B5.D0.BB.D0.B5.D0.B9_.28Modeler.29 создания соответствующей модели для Processing Toolbox]. В качестве входных параметров модели следует использовать панхроматический и мультиспектральный растры. Последний сначала подготавливается при помощи ''Superimpose sensor'', а затем обрабатывается при помощи ''Pansharpening(rsc)''.&lt;br /&gt;
[[Файл:Model pansharp OTB.png|thumb|center|x550px|Модель паншарпенига]]&lt;br /&gt;
Интерфейс модели будет выглядеть следующим образом:&lt;br /&gt;
* '''High resolution panchrome raster''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Low resolution raster''' - мультиспектральное изображение низкого разрешения.&lt;br /&gt;
* '''pansharpened OTB''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp model dialogue.png|thumb|center|x500px|Интерфейс модели паншарпенига]]&lt;br /&gt;
====Файл модели====&lt;br /&gt;
Вы можете скачать модель в виде текстового файла [http://wiki.gis-lab.info/images/5/56/Pansharpening_OTBl.zip отсюда]. Архив необходимо распаковать в папку &amp;quot;.../.qgis2/processing/models/&amp;quot;. После этого она появится у вас в списке моделей Processing toolbox (необходим рестарт QGIS).&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье был рассмотрен процесс паншарпенинга изображений при помощи инструментов OTB, запускаемых при помощи модуля Processing в QGIS. OTB позволяет получить качественный и быстрый (благодаря многопоточной обработке) результат. Для паншарпенинга в QGIS удобнее всего создать соответствующую модель при помощи Model Builder, чтобы избежать проволочек, связанных с промежуточными файлами.&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html#.D0.9F.D0.B0.D0.BD.D1.88.D0.B0.D1.80.D0.BF.D0.B5.D0.BD.D0.B8.D0.BD.D0.B3 Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7 [раздел Паншарпенинг в GRASS]]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21803</id>
		<title>Паншарпенинг в QGIS с использованием Orfeo ToolBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21803"/>
		<updated>2015-04-05T12:52:16Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в QGIS посредством инструментария Orfeo ToolBox. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/01/pansharpening-in-qgis-using-qtb.html Misanthrope's thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
При работе с данными дистанционного зондирования Земли зачастую приходится решать задачу улучшения снимков с низким разрешением за счёт снимков с высоким. В QGIS нет встроенного инструмента паншарпенинга, но есть возможность подключения инструментов [https://www.orfeo-toolbox.org/ Orfeo ToolBox] (OTB), где они есть.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Паншарпенинг в OTB и QGIS==&lt;br /&gt;
С программной точки зрения процесс паншарпенинга делится на две стадии: 1) подготовительную, во время которой разрешение и экстент мультиспектрального растра приводится в соответствие с экстентом и разрешением панхроматического растра (это необходимо для проведения операций растровой алгебры, вовлекающих оба растра); 2) непосредственно паншарпенинг.&lt;br /&gt;
===Использование утилиты OTB===&lt;br /&gt;
OTB по своей сути является набором консольных утилит и приложений. За паншарпенинг отвечает приложение [https://www.orfeo-toolbox.org//CookBook/CookBooksu36.html#x57-770004.2.2 otbcli_BundleToPerfectSensor]. Оно совмещает в себе обе стадии, описанные выше, и запускается следующей консольной командой: &lt;br /&gt;
  otbcli_BundleToPerfectSensor -inp pan_image -inxs xs_image -out output_image&lt;br /&gt;
где pan_image, xs_image и output_image соответсвенно - пути к панхроматическому, мультиспектральному и результирующему растрам. О дополнительных опциях читайте в документации.&lt;br /&gt;
===Запуск паншарпенинга из QGIS===&lt;br /&gt;
В QGIS инструменты OTB подключаются через модуль Processing. После установки OTB на компьютер  зайдите в QGIS в настройки модуля Processing (''Processing -&amp;gt; Options -&amp;gt; Providers'') и активируйте интеграцию с OTB ([http://docs.qgis.org/2.6/ru/docs/user_manual/processing/3rdParty.html#orfeo-toolbox инструкция] на английском):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Enable OTB.png|center]]&lt;br /&gt;
&lt;br /&gt;
Теперь в ''Processing Toolbox'' у вас появится набор инструментов ''Orfeo Toolbox''. К сожалению, в инструментарий входят только консольные утилиты, но не приложения (то есть модуль otbcli_BundleToPerfectSensor не доступен из QGIS). Поэтому не спешите сразу запускать утилиты паншарпенинга (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; [https://www.orfeo-toolbox.org/CookBook/CookBooksu88.html#x119-4740005.4.9 Pansharpening]''), так как здесь требуется, чтобы все входные растры имели идентичный экстент и разрешение, то есть выполняется только вторая стадия. Чтобы выполнить первую - необходимо воспользоваться модулем [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Superimpose sensor''] (''Orfeo Toolbox -&amp;gt; Geometry -&amp;gt; Superimpose sensor'').&lt;br /&gt;
&lt;br /&gt;
Модуль ''Superimpose sensor'' имеет следующие параметры:&lt;br /&gt;
* '''Reference input''' - базовое изображение, к параметрам которого будет приведено обрабатываемое изображение (здесь выбираем панхроматическое).&lt;br /&gt;
* '''The image to reproject''' - изображение, чьи параметры будут приведены к параметрам базового изображения (здесь выбираем мультиспектральное).&lt;br /&gt;
* '''Default elevation''' - средняя высота изображения над эллипсоидом.&lt;br /&gt;
* '''Spacing of the deformation field''' - интервал расстояния поля деформации (coarser deformation field).&lt;br /&gt;
* '''Interpolation''' - тип интерполяции.&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти. (Изменение дефолтного значения [http://gis-lab.info/forum/viewtopic.php?f=3&amp;amp;t=18913&amp;amp;p=127347#p127344 в некоторых случаях] может привести к вылету модуля.) &lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Superimpose sensor.png|thumb|center|x500px|Интерфейс модуля Superimpose sensor]]&lt;br /&gt;
&lt;br /&gt;
После трансформации мультиспектрального растра можно переходить непосредственно к паншарпенингу. Модуль [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Pansharpening(rsc)''] имеет следующие параметры:&lt;br /&gt;
* '''Input PAN image''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Input XS image''' - мультиспектральное изображение, приведённое к параметрам панхроматического.&lt;br /&gt;
* '''Algorithm''' - алгоритм для паншарпенинга (не изменяется, для использования других алгоритмов (LMVM и Bayesian) используйте соответсвующие модули ''Pansharpening(bayes) и Pansharpening(lvmv)'')&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти. (Изменение дефолтного значения [http://gis-lab.info/forum/viewtopic.php?f=3&amp;amp;t=18913&amp;amp;p=127347#p127344 в некоторых случаях] может привести к вылету модуля.) &lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp dialogue.png|thumb|center|x500px|Интерфейс модуля ''Pansharpening(rsc)'']]&lt;br /&gt;
&lt;br /&gt;
Давайте посмотрим на результат паншарпенинга при помощи указанных модулей.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:OTB pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
&lt;br /&gt;
Результат выглядит довольно неплохо, и что немаловажно, был получен очень бытро - ''OTB'' использует многопоточную обработку и задействует все ядра вашего процессора.&lt;br /&gt;
&lt;br /&gt;
===Создание модели===&lt;br /&gt;
Согласитесь, гораздо удобнее было бы обойтись без промежуточных операций и растров. Этого можно добиться путём [http://gis-lab.info/qa/sextante-qgis.html#.D0.9F.D0.BE.D1.81.D1.82.D1.80.D0.BE.D0.B8.D1.82.D0.B5.D0.BB.D1.8C_.D0.BC.D0.BE.D0.B4.D0.B5.D0.BB.D0.B5.D0.B9_.28Modeler.29 создания соответствующей модели для Processing Toolbox]. В качестве входных параметров модели следует использовать панхроматический и мультиспектральный растры. Последний сначала подготавливается при помощи ''Superimpose sensor'', а затем обрабатывается при помощи ''Pansharpening(rsc)''.&lt;br /&gt;
[[Файл:Model pansharp OTB.png|thumb|center|x550px|Модель паншарпенига]]&lt;br /&gt;
Интерфейс модели будет выглядеть следующим образом:&lt;br /&gt;
* '''High resolution panchrome raster''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Low resolution raster''' - мультиспектральное изображение низкого разрешения.&lt;br /&gt;
* '''pansharpened OTB''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp model dialogue.png|thumb|center|x500px|Интерфейс модели паншарпенига]]&lt;br /&gt;
====Файл модели====&lt;br /&gt;
Вы можете скачать модель в виде текстового файла [http://wiki.gis-lab.info/images/5/56/Pansharpening_OTBl.zip отсюда]. Архив необходимо распаковать в папку &amp;quot;.../.qgis2/processing/models/&amp;quot;. После этого она появится у вас в списке моделей Processing toolbox (необходим рестарт QGIS).&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье был рассмотрен процесс паншарпенинга изображений при помощи инструментов OTB, запускаемых при помощи модуля Processing в QGIS. OTB позволяет получить качественный и быстрый (благодаря многопоточной обработке) результат. Для паншарпенинга в QGIS удобнее всего создать соответствующую модель при помощи Model Builder, чтобы избежать проволочек, связанных с промежуточными файлами.&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html#.D0.9F.D0.B0.D0.BD.D1.88.D0.B0.D1.80.D0.BF.D0.B5.D0.BD.D0.B8.D0.BD.D0.B3 Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7 [раздел Паншарпенинг в GRASS]]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21802</id>
		<title>Паншарпенинг в QGIS с использованием Orfeo ToolBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21802"/>
		<updated>2015-04-05T11:14:37Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Запуск паншарпенинга из QGIS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в QGIS посредством инструментария Orfeo ToolBox. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/01/pansharpening-in-qgis-using-qtb.html Misanthrope's thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
При работе с данными дистанционного зондирования Земли зачастую приходится решать задачу улучшения снимков с низким разрешением за счёт снимков с высоким. В QGIS нет встроенного инструмента паншарпенинга, но есть возможность подключения инструментов [https://www.orfeo-toolbox.org/ Orfeo ToolBox] (OTB), где они есть.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Паншарпенинг в OTB и QGIS==&lt;br /&gt;
С программной точки зрения процесс паншарпенинга делится на две стадии: 1) подготовительную, во время которой разрешение и экстент мультиспектрального растра приводится в соответствие с экстентом и разрешением панхроматического растра (это необходимо для проведения операций растровой алгебры, вовлекающих оба растра); 2) непосредственно паншарпенинг.&lt;br /&gt;
===Использование утилиты OTB===&lt;br /&gt;
OTB по своей сути является набором консольных утилит и приложений. За паншарпенинг отвечает приложение [https://www.orfeo-toolbox.org//CookBook/CookBooksu36.html#x57-770004.2.2 otbcli_BundleToPerfectSensor]. Оно совмещает в себе обе стадии, описанные выше, и запускается следующей консольной командой: &lt;br /&gt;
  otbcli_BundleToPerfectSensor -inp pan_image -inxs xs_image -out output_image&lt;br /&gt;
где pan_image, xs_image и output_image соответсвенно - пути к панхроматическому, мультиспектральному и результирующему растрам. О дополнительных опциях читайте в документации.&lt;br /&gt;
===Запуск паншарпенинга из QGIS===&lt;br /&gt;
В QGIS инструменты OTB подключаются через модуль Processing. После установки OTB на компьютер зайдите в QGIS в настройки модуля Processing (''Processing -&amp;gt; Options -&amp;gt; Providers'') и активируйте интеграцию с OTB:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Enable OTB.png|center]]&lt;br /&gt;
&lt;br /&gt;
Теперь в ''Processing Toolbox'' у вас появится набор инструментов ''Orfeo Toolbox''. К сожалению, в инструментарий входят только консольные утилиты, но не приложения (то есть модуль otbcli_BundleToPerfectSensor не доступен из QGIS). Поэтому не спешите сразу запускать утилиты паншарпенинга (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; [https://www.orfeo-toolbox.org/CookBook/CookBooksu88.html#x119-4740005.4.9 Pansharpening]''), так как здесь требуется, чтобы все входные растры имели идентичный экстент и разрешение, то есть выполняется только вторая стадия. Чтобы выполнить первую - необходимо воспользоваться модулем [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Superimpose sensor''] (''Orfeo Toolbox -&amp;gt; Geometry -&amp;gt; Superimpose sensor'').&lt;br /&gt;
&lt;br /&gt;
Модуль ''Superimpose sensor'' имеет следующие параметры:&lt;br /&gt;
* '''Reference input''' - базовое изображение, к параметрам которого будет приведено обрабатываемое изображение (здесь выбираем панхроматическое).&lt;br /&gt;
* '''The image to reproject''' - изображение, чьи параметры будут приведены к параметрам базового изображения (здесь выбираем мультиспектральное).&lt;br /&gt;
* '''Default elevation''' - средняя высота изображения над эллипсоидом.&lt;br /&gt;
* '''Spacing of the deformation field''' - интервал расстояния поля деформации (coarser deformation field).&lt;br /&gt;
* '''Interpolation''' - тип интерполяции.&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти. (Изменение дефолтного значения [http://gis-lab.info/forum/viewtopic.php?f=3&amp;amp;t=18913&amp;amp;p=127347#p127344 в некоторых случаях] может привести к вылету модуля.) &lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Superimpose sensor.png|thumb|center|x500px|Интерфейс модуля Superimpose sensor]]&lt;br /&gt;
&lt;br /&gt;
После трансформации мультиспектрального растра можно переходить непосредственно к паншарпенингу. Модуль [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Pansharpening(rsc)''] имеет следующие параметры:&lt;br /&gt;
* '''Input PAN image''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Input XS image''' - мультиспектральное изображение, приведённое к параметрам панхроматического.&lt;br /&gt;
* '''Algorithm''' - алгоритм для паншарпенинга (не изменяется, для использования других алгоритмов (LMVM и Bayesian) используйте соответсвующие модули ''Pansharpening(bayes) и Pansharpening(lvmv)'')&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти. (Изменение дефолтного значения [http://gis-lab.info/forum/viewtopic.php?f=3&amp;amp;t=18913&amp;amp;p=127347#p127344 в некоторых случаях] может привести к вылету модуля.) &lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp dialogue.png|thumb|center|x500px|Интерфейс модуля ''Pansharpening(rsc)'']]&lt;br /&gt;
&lt;br /&gt;
Давайте посмотрим на результат паншарпенинга при помощи указанных модулей.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:OTB pansharp result.png|thumb|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
&lt;br /&gt;
Результат выглядит довольно неплохо, и что немаловажно, был получен очень бытро - ''OTB'' использует многопоточную обработку и задействует все ядра вашего процессора.&lt;br /&gt;
&lt;br /&gt;
===Создание модели===&lt;br /&gt;
Согласитесь, гораздо удобнее было бы обойтись без промежуточных операций и растров. Этого можно добиться путём [http://gis-lab.info/qa/sextante-qgis.html#.D0.9F.D0.BE.D1.81.D1.82.D1.80.D0.BE.D0.B8.D1.82.D0.B5.D0.BB.D1.8C_.D0.BC.D0.BE.D0.B4.D0.B5.D0.BB.D0.B5.D0.B9_.28Modeler.29 создания соответствующей модели для Processing Toolbox]. В качестве входных параметров модели следует использовать панхроматический и мультиспектральный растры. Последний сначала подготавливается при помощи ''Superimpose sensor'', а затем обрабатывается при помощи ''Pansharpening(rsc)''.&lt;br /&gt;
[[Файл:Model pansharp OTB.png|thumb|center|x550px|Модель паншарпенига]]&lt;br /&gt;
Интерфейс модели будет выглядеть следующим образом:&lt;br /&gt;
* '''High resolution panchrome raster''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Low resolution raster''' - мультиспектральное изображение низкого разрешения.&lt;br /&gt;
* '''pansharpened OTB''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp model dialogue.png|thumb|center|x500px|Интерфейс модели паншарпенига]]&lt;br /&gt;
====Файл модели====&lt;br /&gt;
Вы можете скачать модель в виде текстового файла [http://wiki.gis-lab.info/images/5/56/Pansharpening_OTBl.zip отсюда]. Архив необходимо распаковать в папку &amp;quot;.../.qgis2/processing/models/&amp;quot;. После этого она появится у вас в списке моделей Processing toolbox (необходим рестарт QGIS).&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье был рассмотрен процесс паншарпенинга изображений при помощи инструментов OTB, запускаемых при помощи модуля Processing в QGIS. OTB позволяет получить качественный и быстрый (благодаря многопоточной обработке) результат. Для паншарпенинга в QGIS удобнее всего создать соответствующую модель при помощи Model Builder, чтобы избежать проволочек, связанных с промежуточными файлами.&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html#.D0.9F.D0.B0.D0.BD.D1.88.D0.B0.D1.80.D0.BF.D0.B5.D0.BD.D0.B8.D0.BD.D0.B3 Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7 [раздел Паншарпенинг в GRASS]]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21801</id>
		<title>Паншарпенинг в QGIS с использованием Orfeo ToolBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21801"/>
		<updated>2015-04-05T11:06:37Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Запуск паншарпенинга из QGIS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в QGIS посредством инструментария Orfeo ToolBox. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/01/pansharpening-in-qgis-using-qtb.html Misanthrope's thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
При работе с данными дистанционного зондирования Земли зачастую приходится решать задачу улучшения снимков с низким разрешением за счёт снимков с высоким. В QGIS нет встроенного инструмента паншарпенинга, но есть возможность подключения инструментов [https://www.orfeo-toolbox.org/ Orfeo ToolBox] (OTB), где они есть.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Паншарпенинг в OTB и QGIS==&lt;br /&gt;
С программной точки зрения процесс паншарпенинга делится на две стадии: 1) подготовительную, во время которой разрешение и экстент мультиспектрального растра приводится в соответствие с экстентом и разрешением панхроматического растра (это необходимо для проведения операций растровой алгебры, вовлекающих оба растра); 2) непосредственно паншарпенинг.&lt;br /&gt;
===Использование утилиты OTB===&lt;br /&gt;
OTB по своей сути является набором консольных утилит и приложений. За паншарпенинг отвечает приложение [https://www.orfeo-toolbox.org//CookBook/CookBooksu36.html#x57-770004.2.2 otbcli_BundleToPerfectSensor]. Оно совмещает в себе обе стадии, описанные выше, и запускается следующей консольной командой: &lt;br /&gt;
  otbcli_BundleToPerfectSensor -inp pan_image -inxs xs_image -out output_image&lt;br /&gt;
где pan_image, xs_image и output_image соответсвенно - пути к панхроматическому, мультиспектральному и результирующему растрам. О дополнительных опциях читайте в документации.&lt;br /&gt;
===Запуск паншарпенинга из QGIS===&lt;br /&gt;
В QGIS инструменты OTB подключаются через модуль Processing. После установки OTB на компьютер зайдите в QGIS в настройки модуля Processing (''Processing -&amp;gt; Options -&amp;gt; Providers'') и активируйте интеграцию с OTB:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Enable OTB.png|center]]&lt;br /&gt;
&lt;br /&gt;
Теперь в ''Processing Toolbox'' у вас появится набор инструментов ''Orfeo Toolbox''. К сожалению, в инструментарий входят только консольные утилиты, но не приложения (то есть модуль otbcli_BundleToPerfectSensor не доступен из QGIS). Поэтому не спешите сразу запускать утилиты паншарпенинга (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; [https://www.orfeo-toolbox.org/CookBook/CookBooksu88.html#x119-4740005.4.9 Pansharpening]''), так как здесь требуется, чтобы все входные растры имели идентичный экстент и разрешение, то есть выполняется только вторая стадия. Чтобы выполнить первую - необходимо воспользоваться модулем [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Superimpose sensor''] (''Orfeo Toolbox -&amp;gt; Geometry -&amp;gt; Superimpose sensor'').&lt;br /&gt;
&lt;br /&gt;
Модуль ''Superimpose sensor'' имеет следующие параметры:&lt;br /&gt;
* '''Reference input''' - базовое изображение, к параметрам которого будет приведено обрабатываемое изображение (здесь выбираем панхроматическое).&lt;br /&gt;
* '''The image to reproject''' - изображение, чьи параметры будут приведены к параметрам базового изображения (здесь выбираем мультиспектральное).&lt;br /&gt;
* '''Default elevation''' - средняя высота изображения над эллипсоидом.&lt;br /&gt;
* '''Spacing of the deformation field''' - интервал расстояния поля деформации (coarser deformation field).&lt;br /&gt;
* '''Interpolation''' - тип интерполяции.&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти. (Изменение дефолтного значения [http://gis-lab.info/forum/viewtopic.php?f=3&amp;amp;t=18913&amp;amp;p=127347#p127344 в некоторых случаях] может привести к вылету модуля.) &lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Superimpose sensor.png|thumb|center|x500px|Интерфейс модуля Superimpose sensor]]&lt;br /&gt;
&lt;br /&gt;
После трансформации мультиспектрального растра можно переходить непосредственно к паншарпенингу. Модуль [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Pansharpening(rsc)''] имеет следующие параметры:&lt;br /&gt;
* '''Input PAN image''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Input XS image''' - мультиспектральное изображение, приведённое к параметрам панхроматического.&lt;br /&gt;
* '''Algorithm''' - алгоритм для паншарпенинга (не изменяется, для использования других алгоритмов (LMVM и Bayesian) используйте соответсвующие модули ''Pansharpening(bayes) и Pansharpening(lvmv)'')&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти. (Изменение дефолтного значения [http://gis-lab.info/forum/viewtopic.php?f=3&amp;amp;t=18913&amp;amp;p=127347#p127344 в некоторых случаях] может привести к вылету модуля.) &lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp dialogue.png|thumb|center|x500px|Интерфейс модуля ''Pansharpening(rsc)'']]&lt;br /&gt;
&lt;br /&gt;
Давайте посмотрим на результат паншарпенинга при помощи указанных модулей.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:OTB pansharp result.png|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
&lt;br /&gt;
Результат выглядит довольно неплохо, и что немаловажно, был получен очень бытро - ''OTB'' использует многопоточную обработку и задействует все ядра вашего процессора.&lt;br /&gt;
&lt;br /&gt;
===Создание модели===&lt;br /&gt;
Согласитесь, гораздо удобнее было бы обойтись без промежуточных операций и растров. Этого можно добиться путём [http://gis-lab.info/qa/sextante-qgis.html#.D0.9F.D0.BE.D1.81.D1.82.D1.80.D0.BE.D0.B8.D1.82.D0.B5.D0.BB.D1.8C_.D0.BC.D0.BE.D0.B4.D0.B5.D0.BB.D0.B5.D0.B9_.28Modeler.29 создания соответствующей модели для Processing Toolbox]. В качестве входных параметров модели следует использовать панхроматический и мультиспектральный растры. Последний сначала подготавливается при помощи ''Superimpose sensor'', а затем обрабатывается при помощи ''Pansharpening(rsc)''.&lt;br /&gt;
[[Файл:Model pansharp OTB.png|thumb|center|x550px|Модель паншарпенига]]&lt;br /&gt;
Интерфейс модели будет выглядеть следующим образом:&lt;br /&gt;
* '''High resolution panchrome raster''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Low resolution raster''' - мультиспектральное изображение низкого разрешения.&lt;br /&gt;
* '''pansharpened OTB''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp model dialogue.png|thumb|center|x500px|Интерфейс модели паншарпенига]]&lt;br /&gt;
====Файл модели====&lt;br /&gt;
Вы можете скачать модель в виде текстового файла [http://wiki.gis-lab.info/images/5/56/Pansharpening_OTBl.zip отсюда]. Архив необходимо распаковать в папку &amp;quot;.../.qgis2/processing/models/&amp;quot;. После этого она появится у вас в списке моделей Processing toolbox (необходим рестарт QGIS).&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье был рассмотрен процесс паншарпенинга изображений при помощи инструментов OTB, запускаемых при помощи модуля Processing в QGIS. OTB позволяет получить качественный и быстрый (благодаря многопоточной обработке) результат. Для паншарпенинга в QGIS удобнее всего создать соответствующую модель при помощи Model Builder, чтобы избежать проволочек, связанных с промежуточными файлами.&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html#.D0.9F.D0.B0.D0.BD.D1.88.D0.B0.D1.80.D0.BF.D0.B5.D0.BD.D0.B8.D0.BD.D0.B3 Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7 [раздел Паншарпенинг в GRASS]]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21787</id>
		<title>Паншарпенинг в QGIS с использованием Orfeo ToolBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21787"/>
		<updated>2015-04-04T13:41:39Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Код модели */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в QGIS посредством инструментария Orfeo ToolBox. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/01/pansharpening-in-qgis-using-qtb.html Misanthrope's thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
При работе с данными дистанционного зондирования Земли зачастую приходится решать задачу улучшения снимков с низким разрешением за счёт снимков с высоким. В QGIS нет встроенного инструмента паншарпенинга, но есть возможность подключения инструментов [https://www.orfeo-toolbox.org/ Orfeo ToolBox] (OTB), где они есть.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Паншарпенинг в OTB и QGIS==&lt;br /&gt;
С программной точки зрения процесс паншарпенинга делится на две стадии: 1) подготовительную, во время которой разрешение и экстент мультиспектрального растра приводится в соответствие с экстентом и разрешением панхроматического растра (это необходимо для проведения операций растровой алгебры, вовлекающих оба растра); 2) непосредственно паншарпенинг.&lt;br /&gt;
===Использование утилиты OTB===&lt;br /&gt;
OTB по своей сути является набором консольных утилит и приложений. За паншарпенинг отвечает приложение [https://www.orfeo-toolbox.org//CookBook/CookBooksu36.html#x57-770004.2.2 otbcli_BundleToPerfectSensor]. Оно совмещает в себе обе стадии, описанные выше, и запускается следующей консольной командой: &lt;br /&gt;
  otbcli_BundleToPerfectSensor -inp pan_image -inxs xs_image -out output_image&lt;br /&gt;
где pan_image, xs_image и output_image соответсвенно - пути к панхроматическому, мультиспектральному и результирующему растрам. О дополнительных опциях читайте в документации.&lt;br /&gt;
===Запуск паншарпенинга из QGIS===&lt;br /&gt;
В QGIS инструменты OTB подключаются через модуль Processing. После установки OTB на компьютер зайдите в QGIS в настройки модуля Processing (''Processing -&amp;gt; Options -&amp;gt; Providers'') и активируйте интеграцию с OTB:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Enable OTB.png|center]]&lt;br /&gt;
&lt;br /&gt;
Теперь в ''Processing Toolbox'' у вас появится набор инструментов ''Orfeo Toolbox''. К сожалению, в инструментарий входят только консольные утилиты, но не приложения (то есть модуль otbcli_BundleToPerfectSensor не доступен из QGIS). Поэтому не спешите сразу запускать утилиты паншарпенинга (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; [https://www.orfeo-toolbox.org/CookBook/CookBooksu88.html#x119-4740005.4.9 Pansharpening]''), так как здесь требуется, чтобы все входные растры имели идентичный экстент и разрешение, то есть выполняется только вторая стадия. Чтобы выполнить первую - необходимо воспользоваться модулем [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Superimpose sensor''] (''Orfeo Toolbox -&amp;gt; Geometry -&amp;gt; Superimpose sensor'').&lt;br /&gt;
&lt;br /&gt;
Модуль ''Superimpose sensor'' имеет следующие параметры:&lt;br /&gt;
* '''Reference input''' - базовое изображение, к параметрам которого будет приведено обрабатываемое изображение (здесь выбираем панхроматическое).&lt;br /&gt;
* '''The image to reproject''' - изображение, чьи параметры будут приведены к параметрам базового изображения (здесь выбираем мультиспектральное).&lt;br /&gt;
* '''Default elevation''' - средняя высота изображения над эллипсоидом.&lt;br /&gt;
* '''Spacing of the deformation field''' - интервал расстояния поля деформации (coarser deformation field).&lt;br /&gt;
* '''Interpolation''' - тип интерполяции.&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Superimpose sensor.png|thumb|center|x500px|Интерфейс модуля Superimpose sensor]]&lt;br /&gt;
&lt;br /&gt;
После трансформации мультиспектрального растра можно переходить непосредственно к паншарпенингу. Модуль [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Pansharpening(rsc)''] имеет следующие параметры:&lt;br /&gt;
* '''Input PAN image''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Input XS image''' - мультиспектральное изображение, приведённое к параметрам панхроматического.&lt;br /&gt;
* '''Algorithm''' - алгоритм для паншарпенинга (не изменяется, для использования других алгоритмов (LMVM и Bayesian) используйте соответсвующие модули ''Pansharpening(bayes) и Pansharpening(lvmv)'')&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp dialogue.png|thumb|center|x500px|Интерфейс модуля ''Pansharpening(rsc)'']]&lt;br /&gt;
&lt;br /&gt;
Давайте посмотрим на результат паншарпенинга при помощи указанных модулей.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:OTB pansharp result.png|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
&lt;br /&gt;
Результат выглядит довольно неплохо, и что немаловажно, был получен очень бытро - ''OTB'' использует многопоточную обработку и задействует все ядра вашего процессора.&lt;br /&gt;
&lt;br /&gt;
===Создание модели===&lt;br /&gt;
Согласитесь, гораздо удобнее было бы обойтись без промежуточных операций и растров. Этого можно добиться путём [http://gis-lab.info/qa/sextante-qgis.html#.D0.9F.D0.BE.D1.81.D1.82.D1.80.D0.BE.D0.B8.D1.82.D0.B5.D0.BB.D1.8C_.D0.BC.D0.BE.D0.B4.D0.B5.D0.BB.D0.B5.D0.B9_.28Modeler.29 создания соответствующей модели для Processing Toolbox]. В качестве входных параметров модели следует использовать панхроматический и мультиспектральный растры. Последний сначала подготавливается при помощи ''Superimpose sensor'', а затем обрабатывается при помощи ''Pansharpening(rsc)''.&lt;br /&gt;
[[Файл:Model pansharp OTB.png|thumb|center|x550px|Модель паншарпенига]]&lt;br /&gt;
Интерфейс модели будет выглядеть следующим образом:&lt;br /&gt;
* '''High resolution panchrome raster''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Low resolution raster''' - мультиспектральное изображение низкого разрешения.&lt;br /&gt;
* '''pansharpened OTB''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp model dialogue.png|thumb|center|x500px|Интерфейс модели паншарпенига]]&lt;br /&gt;
====Файл модели====&lt;br /&gt;
Вы можете скачать модель в виде текстового файла [http://wiki.gis-lab.info/images/5/56/Pansharpening_OTBl.zip отсюда]. Архив необходимо распаковать в папку &amp;quot;.../.qgis2/processing/models/&amp;quot;. После этого она появится у вас в списке моделей Processing toolbox (необходим рестарт QGIS).&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье был рассмотрен процесс паншарпенинга изображений при помощи инструментов OTB, запускаемых при помощи модуля Processing в QGIS. OTB позволяет получить качественный и быстрый (благодаря многопоточной обработке) результат. Для паншарпенинга в QGIS удобнее всего создать соответствующую модель при помощи Model Builder, чтобы избежать проволочек, связанных с промежуточными файлами.&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html#.D0.9F.D0.B0.D0.BD.D1.88.D0.B0.D1.80.D0.BF.D0.B5.D0.BD.D0.B8.D0.BD.D0.B3 Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7 [раздел Паншарпенинг в GRASS]]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Pansharpening_OTBl.zip&amp;diff=21786</id>
		<title>Файл:Pansharpening OTBl.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Pansharpening_OTBl.zip&amp;diff=21786"/>
		<updated>2015-04-04T13:37:28Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: Модель для паншарпенинга в QGIS средствами OTB&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Модель для паншарпенинга в QGIS средствами OTB&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21785</id>
		<title>Паншарпенинг в QGIS с использованием Orfeo ToolBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21785"/>
		<updated>2015-04-04T13:32:23Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в QGIS посредством инструментария Orfeo ToolBox. &lt;br /&gt;
&lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/01/pansharpening-in-qgis-using-qtb.html Misanthrope's thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
При работе с данными дистанционного зондирования Земли зачастую приходится решать задачу улучшения снимков с низким разрешением за счёт снимков с высоким. В QGIS нет встроенного инструмента паншарпенинга, но есть возможность подключения инструментов [https://www.orfeo-toolbox.org/ Orfeo ToolBox] (OTB), где они есть.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Паншарпенинг в OTB и QGIS==&lt;br /&gt;
С программной точки зрения процесс паншарпенинга делится на две стадии: 1) подготовительную, во время которой разрешение и экстент мультиспектрального растра приводится в соответствие с экстентом и разрешением панхроматического растра (это необходимо для проведения операций растровой алгебры, вовлекающих оба растра); 2) непосредственно паншарпенинг.&lt;br /&gt;
===Использование утилиты OTB===&lt;br /&gt;
OTB по своей сути является набором консольных утилит и приложений. За паншарпенинг отвечает приложение [https://www.orfeo-toolbox.org//CookBook/CookBooksu36.html#x57-770004.2.2 otbcli_BundleToPerfectSensor]. Оно совмещает в себе обе стадии, описанные выше, и запускается следующей консольной командой: &lt;br /&gt;
  otbcli_BundleToPerfectSensor -inp pan_image -inxs xs_image -out output_image&lt;br /&gt;
где pan_image, xs_image и output_image соответсвенно - пути к панхроматическому, мультиспектральному и результирующему растрам. О дополнительных опциях читайте в документации.&lt;br /&gt;
===Запуск паншарпенинга из QGIS===&lt;br /&gt;
В QGIS инструменты OTB подключаются через модуль Processing. После установки OTB на компьютер зайдите в QGIS в настройки модуля Processing (''Processing -&amp;gt; Options -&amp;gt; Providers'') и активируйте интеграцию с OTB:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Enable OTB.png|center]]&lt;br /&gt;
&lt;br /&gt;
Теперь в ''Processing Toolbox'' у вас появится набор инструментов ''Orfeo Toolbox''. К сожалению, в инструментарий входят только консольные утилиты, но не приложения (то есть модуль otbcli_BundleToPerfectSensor не доступен из QGIS). Поэтому не спешите сразу запускать утилиты паншарпенинга (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; [https://www.orfeo-toolbox.org/CookBook/CookBooksu88.html#x119-4740005.4.9 Pansharpening]''), так как здесь требуется, чтобы все входные растры имели идентичный экстент и разрешение, то есть выполняется только вторая стадия. Чтобы выполнить первую - необходимо воспользоваться модулем [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Superimpose sensor''] (''Orfeo Toolbox -&amp;gt; Geometry -&amp;gt; Superimpose sensor'').&lt;br /&gt;
&lt;br /&gt;
Модуль ''Superimpose sensor'' имеет следующие параметры:&lt;br /&gt;
* '''Reference input''' - базовое изображение, к параметрам которого будет приведено обрабатываемое изображение (здесь выбираем панхроматическое).&lt;br /&gt;
* '''The image to reproject''' - изображение, чьи параметры будут приведены к параметрам базового изображения (здесь выбираем мультиспектральное).&lt;br /&gt;
* '''Default elevation''' - средняя высота изображения над эллипсоидом.&lt;br /&gt;
* '''Spacing of the deformation field''' - интервал расстояния поля деформации (coarser deformation field).&lt;br /&gt;
* '''Interpolation''' - тип интерполяции.&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Superimpose sensor.png|thumb|center|x500px|Интерфейс модуля Superimpose sensor]]&lt;br /&gt;
&lt;br /&gt;
После трансформации мультиспектрального растра можно переходить непосредственно к паншарпенингу. Модуль [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Pansharpening(rsc)''] имеет следующие параметры:&lt;br /&gt;
* '''Input PAN image''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Input XS image''' - мультиспектральное изображение, приведённое к параметрам панхроматического.&lt;br /&gt;
* '''Algorithm''' - алгоритм для паншарпенинга (не изменяется, для использования других алгоритмов (LMVM и Bayesian) используйте соответсвующие модули ''Pansharpening(bayes) и Pansharpening(lvmv)'')&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp dialogue.png|thumb|center|x500px|Интерфейс модуля ''Pansharpening(rsc)'']]&lt;br /&gt;
&lt;br /&gt;
Давайте посмотрим на результат паншарпенинга при помощи указанных модулей.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:OTB pansharp result.png|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
&lt;br /&gt;
Результат выглядит довольно неплохо, и что немаловажно, был получен очень бытро - ''OTB'' использует многопоточную обработку и задействует все ядра вашего процессора.&lt;br /&gt;
&lt;br /&gt;
===Создание модели===&lt;br /&gt;
Согласитесь, гораздо удобнее было бы обойтись без промежуточных операций и растров. Этого можно добиться путём [http://gis-lab.info/qa/sextante-qgis.html#.D0.9F.D0.BE.D1.81.D1.82.D1.80.D0.BE.D0.B8.D1.82.D0.B5.D0.BB.D1.8C_.D0.BC.D0.BE.D0.B4.D0.B5.D0.BB.D0.B5.D0.B9_.28Modeler.29 создания соответствующей модели для Processing Toolbox]. В качестве входных параметров модели следует использовать панхроматический и мультиспектральный растры. Последний сначала подготавливается при помощи ''Superimpose sensor'', а затем обрабатывается при помощи ''Pansharpening(rsc)''.&lt;br /&gt;
[[Файл:Model pansharp OTB.png|thumb|center|x550px|Модель паншарпенига]]&lt;br /&gt;
Интерфейс модели будет выглядеть следующим образом:&lt;br /&gt;
* '''High resolution panchrome raster''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Low resolution raster''' - мультиспектральное изображение низкого разрешения.&lt;br /&gt;
* '''pansharpened OTB''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp model dialogue.png|thumb|center|x500px|Интерфейс модели паншарпенига]]&lt;br /&gt;
====Код модели====&lt;br /&gt;
Ниже вы найдёте код, описывающий модель, приведённую выше. Вы можете сохранить его в виде текстового файла с расширением .model (например, ''Pansharp_OTB.model'') и сохранить в папку &amp;quot;.../.qgis2/processing/models/&amp;quot;. После этого она появится у вас в списке моделей Processing toolbox (необходим рестарт QGIS).&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;values&amp;quot;: {&lt;br /&gt;
        &amp;quot;inputs&amp;quot;: {&lt;br /&gt;
            &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 55.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 121.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;param&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;isAdvanced&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;, &lt;br /&gt;
                            &amp;quot;showSublayersDialog&amp;quot;: true, &lt;br /&gt;
                            &amp;quot;value&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;exported&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;hidden&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;optional&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;description&amp;quot;: &amp;quot;High_resolution_panchromatic_raster&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;processing.core.parameters.ParameterRaster&amp;quot;&lt;br /&gt;
                    }&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerParameter&amp;quot;&lt;br /&gt;
            }, &lt;br /&gt;
            &amp;quot;RASTERLAYER_LOWRESOLUTIONMULTISPECTRALRASTER&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 55.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 342.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;param&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;isAdvanced&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_LOWRESOLUTIONMULTISPECTRALRASTER&amp;quot;, &lt;br /&gt;
                            &amp;quot;showSublayersDialog&amp;quot;: true, &lt;br /&gt;
                            &amp;quot;value&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;exported&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;hidden&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;optional&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;description&amp;quot;: &amp;quot;Low_resolution_multispectral_raster&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;processing.core.parameters.ParameterRaster&amp;quot;&lt;br /&gt;
                    }&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerParameter&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;helpContent&amp;quot;: {}, &lt;br /&gt;
        &amp;quot;group&amp;quot;: &amp;quot;Raster processing&amp;quot;, &lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;OTB Pan-sharpening&amp;quot;, &lt;br /&gt;
        &amp;quot;algs&amp;quot;: {&lt;br /&gt;
            &amp;quot;OTBPANSHARPENINGRCS_1&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: &amp;quot;OTBPANSHARPENINGRCS_1&amp;quot;, &lt;br /&gt;
                    &amp;quot;paramsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;outputs&amp;quot;: {&lt;br /&gt;
                        &amp;quot;-out&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;description&amp;quot;: &amp;quot;Panshrpened_OTB&amp;quot;, &lt;br /&gt;
                                &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                                    &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                        &amp;quot;y&amp;quot;: 311.0, &lt;br /&gt;
                                        &amp;quot;x&amp;quot;: 556.0&lt;br /&gt;
                                    }, &lt;br /&gt;
                                    &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                                }&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerOutput&amp;quot;&lt;br /&gt;
                        }&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 266.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 356.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;outputsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;dependencies&amp;quot;: [], &lt;br /&gt;
                    &amp;quot;params&amp;quot;: {&lt;br /&gt;
                        &amp;quot;-inp&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromInput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-inxs&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;alg&amp;quot;: &amp;quot;OTBSUPERIMPOSESENSOR_1&amp;quot;, &lt;br /&gt;
                                &amp;quot;output&amp;quot;: &amp;quot;-out&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromOutput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-ram&amp;quot;: 2048.0, &lt;br /&gt;
                        &amp;quot;-method&amp;quot;: 0&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;active&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;consoleName&amp;quot;: &amp;quot;otb:pansharpeningrcs&amp;quot;, &lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Pansharpening (rcs)&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.Algorithm&amp;quot;&lt;br /&gt;
            }, &lt;br /&gt;
            &amp;quot;OTBSUPERIMPOSESENSOR_1&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: &amp;quot;OTBSUPERIMPOSESENSOR_1&amp;quot;, &lt;br /&gt;
                    &amp;quot;paramsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;outputs&amp;quot;: {}, &lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 182.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 133.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;outputsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;dependencies&amp;quot;: [], &lt;br /&gt;
                    &amp;quot;params&amp;quot;: {&lt;br /&gt;
                        &amp;quot;-interpolator&amp;quot;: 0, &lt;br /&gt;
                        &amp;quot;-inm&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_LOWRESOLUTIONMULTISPECTRALRASTER&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromInput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-ram&amp;quot;: 2048.0, &lt;br /&gt;
                        &amp;quot;-interpolator.bco.radius&amp;quot;: 2.0, &lt;br /&gt;
                        &amp;quot;-lms&amp;quot;: 4.0, &lt;br /&gt;
                        &amp;quot;-inr&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromInput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-elev.default&amp;quot;: 0.0&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;active&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;consoleName&amp;quot;: &amp;quot;otb:superimposesensor&amp;quot;, &lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Superimpose sensor&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.Algorithm&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerAlgorithm&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье был рассмотрен процесс паншарпенинга изображений при помощи инструментов OTB, запускаемых при помощи модуля Processing в QGIS. OTB позволяет получить качественный и быстрый (благодаря многопоточной обработке) результат. Для паншарпенинга в QGIS удобнее всего создать соответствующую модель при помощи Model Builder, чтобы избежать проволочек, связанных с промежуточными файлами.&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html#.D0.9F.D0.B0.D0.BD.D1.88.D0.B0.D1.80.D0.BF.D0.B5.D0.BD.D0.B8.D0.BD.D0.B3 Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7 [раздел Паншарпенинг в GRASS]]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21784</id>
		<title>Паншарпенинг в QGIS с использованием Orfeo ToolBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21784"/>
		<updated>2015-04-04T13:32:07Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в QGIS посредством инструментария Orfeo ToolBox. &lt;br /&gt;
[via [http://ssrebelious.blogspot.ru/2015/01/pansharpening-in-qgis-using-qtb.html Misanthrope's thoughts]]}}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
При работе с данными дистанционного зондирования Земли зачастую приходится решать задачу улучшения снимков с низким разрешением за счёт снимков с высоким. В QGIS нет встроенного инструмента паншарпенинга, но есть возможность подключения инструментов [https://www.orfeo-toolbox.org/ Orfeo ToolBox] (OTB), где они есть.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Паншарпенинг в OTB и QGIS==&lt;br /&gt;
С программной точки зрения процесс паншарпенинга делится на две стадии: 1) подготовительную, во время которой разрешение и экстент мультиспектрального растра приводится в соответствие с экстентом и разрешением панхроматического растра (это необходимо для проведения операций растровой алгебры, вовлекающих оба растра); 2) непосредственно паншарпенинг.&lt;br /&gt;
===Использование утилиты OTB===&lt;br /&gt;
OTB по своей сути является набором консольных утилит и приложений. За паншарпенинг отвечает приложение [https://www.orfeo-toolbox.org//CookBook/CookBooksu36.html#x57-770004.2.2 otbcli_BundleToPerfectSensor]. Оно совмещает в себе обе стадии, описанные выше, и запускается следующей консольной командой: &lt;br /&gt;
  otbcli_BundleToPerfectSensor -inp pan_image -inxs xs_image -out output_image&lt;br /&gt;
где pan_image, xs_image и output_image соответсвенно - пути к панхроматическому, мультиспектральному и результирующему растрам. О дополнительных опциях читайте в документации.&lt;br /&gt;
===Запуск паншарпенинга из QGIS===&lt;br /&gt;
В QGIS инструменты OTB подключаются через модуль Processing. После установки OTB на компьютер зайдите в QGIS в настройки модуля Processing (''Processing -&amp;gt; Options -&amp;gt; Providers'') и активируйте интеграцию с OTB:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Enable OTB.png|center]]&lt;br /&gt;
&lt;br /&gt;
Теперь в ''Processing Toolbox'' у вас появится набор инструментов ''Orfeo Toolbox''. К сожалению, в инструментарий входят только консольные утилиты, но не приложения (то есть модуль otbcli_BundleToPerfectSensor не доступен из QGIS). Поэтому не спешите сразу запускать утилиты паншарпенинга (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; [https://www.orfeo-toolbox.org/CookBook/CookBooksu88.html#x119-4740005.4.9 Pansharpening]''), так как здесь требуется, чтобы все входные растры имели идентичный экстент и разрешение, то есть выполняется только вторая стадия. Чтобы выполнить первую - необходимо воспользоваться модулем [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Superimpose sensor''] (''Orfeo Toolbox -&amp;gt; Geometry -&amp;gt; Superimpose sensor'').&lt;br /&gt;
&lt;br /&gt;
Модуль ''Superimpose sensor'' имеет следующие параметры:&lt;br /&gt;
* '''Reference input''' - базовое изображение, к параметрам которого будет приведено обрабатываемое изображение (здесь выбираем панхроматическое).&lt;br /&gt;
* '''The image to reproject''' - изображение, чьи параметры будут приведены к параметрам базового изображения (здесь выбираем мультиспектральное).&lt;br /&gt;
* '''Default elevation''' - средняя высота изображения над эллипсоидом.&lt;br /&gt;
* '''Spacing of the deformation field''' - интервал расстояния поля деформации (coarser deformation field).&lt;br /&gt;
* '''Interpolation''' - тип интерполяции.&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Superimpose sensor.png|thumb|center|x500px|Интерфейс модуля Superimpose sensor]]&lt;br /&gt;
&lt;br /&gt;
После трансформации мультиспектрального растра можно переходить непосредственно к паншарпенингу. Модуль [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Pansharpening(rsc)''] имеет следующие параметры:&lt;br /&gt;
* '''Input PAN image''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Input XS image''' - мультиспектральное изображение, приведённое к параметрам панхроматического.&lt;br /&gt;
* '''Algorithm''' - алгоритм для паншарпенинга (не изменяется, для использования других алгоритмов (LMVM и Bayesian) используйте соответсвующие модули ''Pansharpening(bayes) и Pansharpening(lvmv)'')&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp dialogue.png|thumb|center|x500px|Интерфейс модуля ''Pansharpening(rsc)'']]&lt;br /&gt;
&lt;br /&gt;
Давайте посмотрим на результат паншарпенинга при помощи указанных модулей.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:OTB pansharp result.png|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
&lt;br /&gt;
Результат выглядит довольно неплохо, и что немаловажно, был получен очень бытро - ''OTB'' использует многопоточную обработку и задействует все ядра вашего процессора.&lt;br /&gt;
&lt;br /&gt;
===Создание модели===&lt;br /&gt;
Согласитесь, гораздо удобнее было бы обойтись без промежуточных операций и растров. Этого можно добиться путём [http://gis-lab.info/qa/sextante-qgis.html#.D0.9F.D0.BE.D1.81.D1.82.D1.80.D0.BE.D0.B8.D1.82.D0.B5.D0.BB.D1.8C_.D0.BC.D0.BE.D0.B4.D0.B5.D0.BB.D0.B5.D0.B9_.28Modeler.29 создания соответствующей модели для Processing Toolbox]. В качестве входных параметров модели следует использовать панхроматический и мультиспектральный растры. Последний сначала подготавливается при помощи ''Superimpose sensor'', а затем обрабатывается при помощи ''Pansharpening(rsc)''.&lt;br /&gt;
[[Файл:Model pansharp OTB.png|thumb|center|x550px|Модель паншарпенига]]&lt;br /&gt;
Интерфейс модели будет выглядеть следующим образом:&lt;br /&gt;
* '''High resolution panchrome raster''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Low resolution raster''' - мультиспектральное изображение низкого разрешения.&lt;br /&gt;
* '''pansharpened OTB''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp model dialogue.png|thumb|center|x500px|Интерфейс модели паншарпенига]]&lt;br /&gt;
====Код модели====&lt;br /&gt;
Ниже вы найдёте код, описывающий модель, приведённую выше. Вы можете сохранить его в виде текстового файла с расширением .model (например, ''Pansharp_OTB.model'') и сохранить в папку &amp;quot;.../.qgis2/processing/models/&amp;quot;. После этого она появится у вас в списке моделей Processing toolbox (необходим рестарт QGIS).&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;values&amp;quot;: {&lt;br /&gt;
        &amp;quot;inputs&amp;quot;: {&lt;br /&gt;
            &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 55.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 121.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;param&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;isAdvanced&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;, &lt;br /&gt;
                            &amp;quot;showSublayersDialog&amp;quot;: true, &lt;br /&gt;
                            &amp;quot;value&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;exported&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;hidden&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;optional&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;description&amp;quot;: &amp;quot;High_resolution_panchromatic_raster&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;processing.core.parameters.ParameterRaster&amp;quot;&lt;br /&gt;
                    }&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerParameter&amp;quot;&lt;br /&gt;
            }, &lt;br /&gt;
            &amp;quot;RASTERLAYER_LOWRESOLUTIONMULTISPECTRALRASTER&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 55.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 342.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;param&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;isAdvanced&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_LOWRESOLUTIONMULTISPECTRALRASTER&amp;quot;, &lt;br /&gt;
                            &amp;quot;showSublayersDialog&amp;quot;: true, &lt;br /&gt;
                            &amp;quot;value&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;exported&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;hidden&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;optional&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;description&amp;quot;: &amp;quot;Low_resolution_multispectral_raster&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;processing.core.parameters.ParameterRaster&amp;quot;&lt;br /&gt;
                    }&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerParameter&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;helpContent&amp;quot;: {}, &lt;br /&gt;
        &amp;quot;group&amp;quot;: &amp;quot;Raster processing&amp;quot;, &lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;OTB Pan-sharpening&amp;quot;, &lt;br /&gt;
        &amp;quot;algs&amp;quot;: {&lt;br /&gt;
            &amp;quot;OTBPANSHARPENINGRCS_1&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: &amp;quot;OTBPANSHARPENINGRCS_1&amp;quot;, &lt;br /&gt;
                    &amp;quot;paramsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;outputs&amp;quot;: {&lt;br /&gt;
                        &amp;quot;-out&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;description&amp;quot;: &amp;quot;Panshrpened_OTB&amp;quot;, &lt;br /&gt;
                                &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                                    &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                        &amp;quot;y&amp;quot;: 311.0, &lt;br /&gt;
                                        &amp;quot;x&amp;quot;: 556.0&lt;br /&gt;
                                    }, &lt;br /&gt;
                                    &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                                }&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerOutput&amp;quot;&lt;br /&gt;
                        }&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 266.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 356.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;outputsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;dependencies&amp;quot;: [], &lt;br /&gt;
                    &amp;quot;params&amp;quot;: {&lt;br /&gt;
                        &amp;quot;-inp&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromInput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-inxs&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;alg&amp;quot;: &amp;quot;OTBSUPERIMPOSESENSOR_1&amp;quot;, &lt;br /&gt;
                                &amp;quot;output&amp;quot;: &amp;quot;-out&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromOutput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-ram&amp;quot;: 2048.0, &lt;br /&gt;
                        &amp;quot;-method&amp;quot;: 0&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;active&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;consoleName&amp;quot;: &amp;quot;otb:pansharpeningrcs&amp;quot;, &lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Pansharpening (rcs)&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.Algorithm&amp;quot;&lt;br /&gt;
            }, &lt;br /&gt;
            &amp;quot;OTBSUPERIMPOSESENSOR_1&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: &amp;quot;OTBSUPERIMPOSESENSOR_1&amp;quot;, &lt;br /&gt;
                    &amp;quot;paramsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;outputs&amp;quot;: {}, &lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 182.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 133.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;outputsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;dependencies&amp;quot;: [], &lt;br /&gt;
                    &amp;quot;params&amp;quot;: {&lt;br /&gt;
                        &amp;quot;-interpolator&amp;quot;: 0, &lt;br /&gt;
                        &amp;quot;-inm&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_LOWRESOLUTIONMULTISPECTRALRASTER&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromInput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-ram&amp;quot;: 2048.0, &lt;br /&gt;
                        &amp;quot;-interpolator.bco.radius&amp;quot;: 2.0, &lt;br /&gt;
                        &amp;quot;-lms&amp;quot;: 4.0, &lt;br /&gt;
                        &amp;quot;-inr&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromInput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-elev.default&amp;quot;: 0.0&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;active&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;consoleName&amp;quot;: &amp;quot;otb:superimposesensor&amp;quot;, &lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Superimpose sensor&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.Algorithm&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerAlgorithm&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье был рассмотрен процесс паншарпенинга изображений при помощи инструментов OTB, запускаемых при помощи модуля Processing в QGIS. OTB позволяет получить качественный и быстрый (благодаря многопоточной обработке) результат. Для паншарпенинга в QGIS удобнее всего создать соответствующую модель при помощи Model Builder, чтобы избежать проволочек, связанных с промежуточными файлами.&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html#.D0.9F.D0.B0.D0.BD.D1.88.D0.B0.D1.80.D0.BF.D0.B5.D0.BD.D0.B8.D0.BD.D0.B3 Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7 [раздел Паншарпенинг в GRASS]]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21783</id>
		<title>Паншарпенинг в QGIS с использованием Orfeo ToolBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21783"/>
		<updated>2015-04-04T13:30:11Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Ссылки по теме */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в QGIS посредством инструментария Orfeo ToolBox. }}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
При работе с данными дистанционного зондирования Земли зачастую приходится решать задачу улучшения снимков с низким разрешением за счёт снимков с высоким. В QGIS нет встроенного инструмента паншарпенинга, но есть возможность подключения инструментов [https://www.orfeo-toolbox.org/ Orfeo ToolBox] (OTB), где они есть.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Паншарпенинг в OTB и QGIS==&lt;br /&gt;
С программной точки зрения процесс паншарпенинга делится на две стадии: 1) подготовительную, во время которой разрешение и экстент мультиспектрального растра приводится в соответствие с экстентом и разрешением панхроматического растра (это необходимо для проведения операций растровой алгебры, вовлекающих оба растра); 2) непосредственно паншарпенинг.&lt;br /&gt;
===Использование утилиты OTB===&lt;br /&gt;
OTB по своей сути является набором консольных утилит и приложений. За паншарпенинг отвечает приложение [https://www.orfeo-toolbox.org//CookBook/CookBooksu36.html#x57-770004.2.2 otbcli_BundleToPerfectSensor]. Оно совмещает в себе обе стадии, описанные выше, и запускается следующей консольной командой: &lt;br /&gt;
  otbcli_BundleToPerfectSensor -inp pan_image -inxs xs_image -out output_image&lt;br /&gt;
где pan_image, xs_image и output_image соответсвенно - пути к панхроматическому, мультиспектральному и результирующему растрам. О дополнительных опциях читайте в документации.&lt;br /&gt;
===Запуск паншарпенинга из QGIS===&lt;br /&gt;
В QGIS инструменты OTB подключаются через модуль Processing. После установки OTB на компьютер зайдите в QGIS в настройки модуля Processing (''Processing -&amp;gt; Options -&amp;gt; Providers'') и активируйте интеграцию с OTB:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Enable OTB.png|center]]&lt;br /&gt;
&lt;br /&gt;
Теперь в ''Processing Toolbox'' у вас появится набор инструментов ''Orfeo Toolbox''. К сожалению, в инструментарий входят только консольные утилиты, но не приложения (то есть модуль otbcli_BundleToPerfectSensor не доступен из QGIS). Поэтому не спешите сразу запускать утилиты паншарпенинга (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; [https://www.orfeo-toolbox.org/CookBook/CookBooksu88.html#x119-4740005.4.9 Pansharpening]''), так как здесь требуется, чтобы все входные растры имели идентичный экстент и разрешение, то есть выполняется только вторая стадия. Чтобы выполнить первую - необходимо воспользоваться модулем [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Superimpose sensor''] (''Orfeo Toolbox -&amp;gt; Geometry -&amp;gt; Superimpose sensor'').&lt;br /&gt;
&lt;br /&gt;
Модуль ''Superimpose sensor'' имеет следующие параметры:&lt;br /&gt;
* '''Reference input''' - базовое изображение, к параметрам которого будет приведено обрабатываемое изображение (здесь выбираем панхроматическое).&lt;br /&gt;
* '''The image to reproject''' - изображение, чьи параметры будут приведены к параметрам базового изображения (здесь выбираем мультиспектральное).&lt;br /&gt;
* '''Default elevation''' - средняя высота изображения над эллипсоидом.&lt;br /&gt;
* '''Spacing of the deformation field''' - интервал расстояния поля деформации (coarser deformation field).&lt;br /&gt;
* '''Interpolation''' - тип интерполяции.&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Superimpose sensor.png|thumb|center|x500px|Интерфейс модуля Superimpose sensor]]&lt;br /&gt;
&lt;br /&gt;
После трансформации мультиспектрального растра можно переходить непосредственно к паншарпенингу. Модуль [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Pansharpening(rsc)''] имеет следующие параметры:&lt;br /&gt;
* '''Input PAN image''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Input XS image''' - мультиспектральное изображение, приведённое к параметрам панхроматического.&lt;br /&gt;
* '''Algorithm''' - алгоритм для паншарпенинга (не изменяется, для использования других алгоритмов (LMVM и Bayesian) используйте соответсвующие модули ''Pansharpening(bayes) и Pansharpening(lvmv)'')&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp dialogue.png|thumb|center|x500px|Интерфейс модуля ''Pansharpening(rsc)'']]&lt;br /&gt;
&lt;br /&gt;
Давайте посмотрим на результат паншарпенинга при помощи указанных модулей.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:OTB pansharp result.png|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
&lt;br /&gt;
Результат выглядит довольно неплохо, и что немаловажно, был получен очень бытро - ''OTB'' использует многопоточную обработку и задействует все ядра вашего процессора.&lt;br /&gt;
&lt;br /&gt;
===Создание модели===&lt;br /&gt;
Согласитесь, гораздо удобнее было бы обойтись без промежуточных операций и растров. Этого можно добиться путём [http://gis-lab.info/qa/sextante-qgis.html#.D0.9F.D0.BE.D1.81.D1.82.D1.80.D0.BE.D0.B8.D1.82.D0.B5.D0.BB.D1.8C_.D0.BC.D0.BE.D0.B4.D0.B5.D0.BB.D0.B5.D0.B9_.28Modeler.29 создания соответствующей модели для Processing Toolbox]. В качестве входных параметров модели следует использовать панхроматический и мультиспектральный растры. Последний сначала подготавливается при помощи ''Superimpose sensor'', а затем обрабатывается при помощи ''Pansharpening(rsc)''.&lt;br /&gt;
[[Файл:Model pansharp OTB.png|thumb|center|x550px|Модель паншарпенига]]&lt;br /&gt;
Интерфейс модели будет выглядеть следующим образом:&lt;br /&gt;
* '''High resolution panchrome raster''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Low resolution raster''' - мультиспектральное изображение низкого разрешения.&lt;br /&gt;
* '''pansharpened OTB''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp model dialogue.png|thumb|center|x500px|Интерфейс модели паншарпенига]]&lt;br /&gt;
====Код модели====&lt;br /&gt;
Ниже вы найдёте код, описывающий модель, приведённую выше. Вы можете сохранить его в виде текстового файла с расширением .model (например, ''Pansharp_OTB.model'') и сохранить в папку &amp;quot;.../.qgis2/processing/models/&amp;quot;. После этого она появится у вас в списке моделей Processing toolbox (необходим рестарт QGIS).&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;values&amp;quot;: {&lt;br /&gt;
        &amp;quot;inputs&amp;quot;: {&lt;br /&gt;
            &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 55.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 121.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;param&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;isAdvanced&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;, &lt;br /&gt;
                            &amp;quot;showSublayersDialog&amp;quot;: true, &lt;br /&gt;
                            &amp;quot;value&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;exported&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;hidden&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;optional&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;description&amp;quot;: &amp;quot;High_resolution_panchromatic_raster&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;processing.core.parameters.ParameterRaster&amp;quot;&lt;br /&gt;
                    }&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerParameter&amp;quot;&lt;br /&gt;
            }, &lt;br /&gt;
            &amp;quot;RASTERLAYER_LOWRESOLUTIONMULTISPECTRALRASTER&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 55.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 342.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;param&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;isAdvanced&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_LOWRESOLUTIONMULTISPECTRALRASTER&amp;quot;, &lt;br /&gt;
                            &amp;quot;showSublayersDialog&amp;quot;: true, &lt;br /&gt;
                            &amp;quot;value&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;exported&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;hidden&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;optional&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;description&amp;quot;: &amp;quot;Low_resolution_multispectral_raster&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;processing.core.parameters.ParameterRaster&amp;quot;&lt;br /&gt;
                    }&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerParameter&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;helpContent&amp;quot;: {}, &lt;br /&gt;
        &amp;quot;group&amp;quot;: &amp;quot;Raster processing&amp;quot;, &lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;OTB Pan-sharpening&amp;quot;, &lt;br /&gt;
        &amp;quot;algs&amp;quot;: {&lt;br /&gt;
            &amp;quot;OTBPANSHARPENINGRCS_1&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: &amp;quot;OTBPANSHARPENINGRCS_1&amp;quot;, &lt;br /&gt;
                    &amp;quot;paramsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;outputs&amp;quot;: {&lt;br /&gt;
                        &amp;quot;-out&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;description&amp;quot;: &amp;quot;Panshrpened_OTB&amp;quot;, &lt;br /&gt;
                                &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                                    &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                        &amp;quot;y&amp;quot;: 311.0, &lt;br /&gt;
                                        &amp;quot;x&amp;quot;: 556.0&lt;br /&gt;
                                    }, &lt;br /&gt;
                                    &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                                }&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerOutput&amp;quot;&lt;br /&gt;
                        }&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 266.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 356.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;outputsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;dependencies&amp;quot;: [], &lt;br /&gt;
                    &amp;quot;params&amp;quot;: {&lt;br /&gt;
                        &amp;quot;-inp&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromInput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-inxs&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;alg&amp;quot;: &amp;quot;OTBSUPERIMPOSESENSOR_1&amp;quot;, &lt;br /&gt;
                                &amp;quot;output&amp;quot;: &amp;quot;-out&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromOutput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-ram&amp;quot;: 2048.0, &lt;br /&gt;
                        &amp;quot;-method&amp;quot;: 0&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;active&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;consoleName&amp;quot;: &amp;quot;otb:pansharpeningrcs&amp;quot;, &lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Pansharpening (rcs)&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.Algorithm&amp;quot;&lt;br /&gt;
            }, &lt;br /&gt;
            &amp;quot;OTBSUPERIMPOSESENSOR_1&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: &amp;quot;OTBSUPERIMPOSESENSOR_1&amp;quot;, &lt;br /&gt;
                    &amp;quot;paramsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;outputs&amp;quot;: {}, &lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 182.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 133.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;outputsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;dependencies&amp;quot;: [], &lt;br /&gt;
                    &amp;quot;params&amp;quot;: {&lt;br /&gt;
                        &amp;quot;-interpolator&amp;quot;: 0, &lt;br /&gt;
                        &amp;quot;-inm&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_LOWRESOLUTIONMULTISPECTRALRASTER&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromInput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-ram&amp;quot;: 2048.0, &lt;br /&gt;
                        &amp;quot;-interpolator.bco.radius&amp;quot;: 2.0, &lt;br /&gt;
                        &amp;quot;-lms&amp;quot;: 4.0, &lt;br /&gt;
                        &amp;quot;-inr&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromInput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-elev.default&amp;quot;: 0.0&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;active&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;consoleName&amp;quot;: &amp;quot;otb:superimposesensor&amp;quot;, &lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Superimpose sensor&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.Algorithm&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerAlgorithm&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье был рассмотрен процесс паншарпенинга изображений при помощи инструментов OTB, запускаемых при помощи модуля Processing в QGIS. OTB позволяет получить качественный и быстрый (благодаря многопоточной обработке) результат. Для паншарпенинга в QGIS удобнее всего создать соответствующую модель при помощи Model Builder, чтобы избежать проволочек, связанных с промежуточными файлами.&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html#.D0.9F.D0.B0.D0.BD.D1.88.D0.B0.D1.80.D0.BF.D0.B5.D0.BD.D0.B8.D0.BD.D0.B3 Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7 [раздел Паншарпенинг в GRASS]]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21782</id>
		<title>Паншарпенинг в QGIS с использованием Orfeo ToolBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21782"/>
		<updated>2015-04-04T13:20:57Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в QGIS посредством инструментария Orfeo ToolBox. }}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
При работе с данными дистанционного зондирования Земли зачастую приходится решать задачу улучшения снимков с низким разрешением за счёт снимков с высоким. В QGIS нет встроенного инструмента паншарпенинга, но есть возможность подключения инструментов [https://www.orfeo-toolbox.org/ Orfeo ToolBox] (OTB), где они есть.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Паншарпенинг в OTB и QGIS==&lt;br /&gt;
С программной точки зрения процесс паншарпенинга делится на две стадии: 1) подготовительную, во время которой разрешение и экстент мультиспектрального растра приводится в соответствие с экстентом и разрешением панхроматического растра (это необходимо для проведения операций растровой алгебры, вовлекающих оба растра); 2) непосредственно паншарпенинг.&lt;br /&gt;
===Использование утилиты OTB===&lt;br /&gt;
OTB по своей сути является набором консольных утилит и приложений. За паншарпенинг отвечает приложение [https://www.orfeo-toolbox.org//CookBook/CookBooksu36.html#x57-770004.2.2 otbcli_BundleToPerfectSensor]. Оно совмещает в себе обе стадии, описанные выше, и запускается следующей консольной командой: &lt;br /&gt;
  otbcli_BundleToPerfectSensor -inp pan_image -inxs xs_image -out output_image&lt;br /&gt;
где pan_image, xs_image и output_image соответсвенно - пути к панхроматическому, мультиспектральному и результирующему растрам. О дополнительных опциях читайте в документации.&lt;br /&gt;
===Запуск паншарпенинга из QGIS===&lt;br /&gt;
В QGIS инструменты OTB подключаются через модуль Processing. После установки OTB на компьютер зайдите в QGIS в настройки модуля Processing (''Processing -&amp;gt; Options -&amp;gt; Providers'') и активируйте интеграцию с OTB:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Enable OTB.png|center]]&lt;br /&gt;
&lt;br /&gt;
Теперь в ''Processing Toolbox'' у вас появится набор инструментов ''Orfeo Toolbox''. К сожалению, в инструментарий входят только консольные утилиты, но не приложения (то есть модуль otbcli_BundleToPerfectSensor не доступен из QGIS). Поэтому не спешите сразу запускать утилиты паншарпенинга (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; [https://www.orfeo-toolbox.org/CookBook/CookBooksu88.html#x119-4740005.4.9 Pansharpening]''), так как здесь требуется, чтобы все входные растры имели идентичный экстент и разрешение, то есть выполняется только вторая стадия. Чтобы выполнить первую - необходимо воспользоваться модулем [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Superimpose sensor''] (''Orfeo Toolbox -&amp;gt; Geometry -&amp;gt; Superimpose sensor'').&lt;br /&gt;
&lt;br /&gt;
Модуль ''Superimpose sensor'' имеет следующие параметры:&lt;br /&gt;
* '''Reference input''' - базовое изображение, к параметрам которого будет приведено обрабатываемое изображение (здесь выбираем панхроматическое).&lt;br /&gt;
* '''The image to reproject''' - изображение, чьи параметры будут приведены к параметрам базового изображения (здесь выбираем мультиспектральное).&lt;br /&gt;
* '''Default elevation''' - средняя высота изображения над эллипсоидом.&lt;br /&gt;
* '''Spacing of the deformation field''' - интервал расстояния поля деформации (coarser deformation field).&lt;br /&gt;
* '''Interpolation''' - тип интерполяции.&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Superimpose sensor.png|thumb|center|x500px|Интерфейс модуля Superimpose sensor]]&lt;br /&gt;
&lt;br /&gt;
После трансформации мультиспектрального растра можно переходить непосредственно к паншарпенингу. Модуль [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Pansharpening(rsc)''] имеет следующие параметры:&lt;br /&gt;
* '''Input PAN image''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Input XS image''' - мультиспектральное изображение, приведённое к параметрам панхроматического.&lt;br /&gt;
* '''Algorithm''' - алгоритм для паншарпенинга (не изменяется, для использования других алгоритмов (LMVM и Bayesian) используйте соответсвующие модули ''Pansharpening(bayes) и Pansharpening(lvmv)'')&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp dialogue.png|thumb|center|x500px|Интерфейс модуля ''Pansharpening(rsc)'']]&lt;br /&gt;
&lt;br /&gt;
Давайте посмотрим на результат паншарпенинга при помощи указанных модулей.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:OTB pansharp result.png|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
&lt;br /&gt;
Результат выглядит довольно неплохо, и что немаловажно, был получен очень бытро - ''OTB'' использует многопоточную обработку и задействует все ядра вашего процессора.&lt;br /&gt;
&lt;br /&gt;
===Создание модели===&lt;br /&gt;
Согласитесь, гораздо удобнее было бы обойтись без промежуточных операций и растров. Этого можно добиться путём [http://gis-lab.info/qa/sextante-qgis.html#.D0.9F.D0.BE.D1.81.D1.82.D1.80.D0.BE.D0.B8.D1.82.D0.B5.D0.BB.D1.8C_.D0.BC.D0.BE.D0.B4.D0.B5.D0.BB.D0.B5.D0.B9_.28Modeler.29 создания соответствующей модели для Processing Toolbox]. В качестве входных параметров модели следует использовать панхроматический и мультиспектральный растры. Последний сначала подготавливается при помощи ''Superimpose sensor'', а затем обрабатывается при помощи ''Pansharpening(rsc)''.&lt;br /&gt;
[[Файл:Model pansharp OTB.png|thumb|center|x550px|Модель паншарпенига]]&lt;br /&gt;
Интерфейс модели будет выглядеть следующим образом:&lt;br /&gt;
* '''High resolution panchrome raster''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Low resolution raster''' - мультиспектральное изображение низкого разрешения.&lt;br /&gt;
* '''pansharpened OTB''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp model dialogue.png|thumb|center|x500px|Интерфейс модели паншарпенига]]&lt;br /&gt;
====Код модели====&lt;br /&gt;
Ниже вы найдёте код, описывающий модель, приведённую выше. Вы можете сохранить его в виде текстового файла с расширением .model (например, ''Pansharp_OTB.model'') и сохранить в папку &amp;quot;.../.qgis2/processing/models/&amp;quot;. После этого она появится у вас в списке моделей Processing toolbox (необходим рестарт QGIS).&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;values&amp;quot;: {&lt;br /&gt;
        &amp;quot;inputs&amp;quot;: {&lt;br /&gt;
            &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 55.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 121.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;param&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;isAdvanced&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;, &lt;br /&gt;
                            &amp;quot;showSublayersDialog&amp;quot;: true, &lt;br /&gt;
                            &amp;quot;value&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;exported&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;hidden&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;optional&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;description&amp;quot;: &amp;quot;High_resolution_panchromatic_raster&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;processing.core.parameters.ParameterRaster&amp;quot;&lt;br /&gt;
                    }&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerParameter&amp;quot;&lt;br /&gt;
            }, &lt;br /&gt;
            &amp;quot;RASTERLAYER_LOWRESOLUTIONMULTISPECTRALRASTER&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 55.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 342.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;param&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;isAdvanced&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_LOWRESOLUTIONMULTISPECTRALRASTER&amp;quot;, &lt;br /&gt;
                            &amp;quot;showSublayersDialog&amp;quot;: true, &lt;br /&gt;
                            &amp;quot;value&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;exported&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;hidden&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;optional&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;description&amp;quot;: &amp;quot;Low_resolution_multispectral_raster&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;processing.core.parameters.ParameterRaster&amp;quot;&lt;br /&gt;
                    }&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerParameter&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;helpContent&amp;quot;: {}, &lt;br /&gt;
        &amp;quot;group&amp;quot;: &amp;quot;Raster processing&amp;quot;, &lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;OTB Pan-sharpening&amp;quot;, &lt;br /&gt;
        &amp;quot;algs&amp;quot;: {&lt;br /&gt;
            &amp;quot;OTBPANSHARPENINGRCS_1&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: &amp;quot;OTBPANSHARPENINGRCS_1&amp;quot;, &lt;br /&gt;
                    &amp;quot;paramsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;outputs&amp;quot;: {&lt;br /&gt;
                        &amp;quot;-out&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;description&amp;quot;: &amp;quot;Panshrpened_OTB&amp;quot;, &lt;br /&gt;
                                &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                                    &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                        &amp;quot;y&amp;quot;: 311.0, &lt;br /&gt;
                                        &amp;quot;x&amp;quot;: 556.0&lt;br /&gt;
                                    }, &lt;br /&gt;
                                    &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                                }&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerOutput&amp;quot;&lt;br /&gt;
                        }&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 266.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 356.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;outputsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;dependencies&amp;quot;: [], &lt;br /&gt;
                    &amp;quot;params&amp;quot;: {&lt;br /&gt;
                        &amp;quot;-inp&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromInput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-inxs&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;alg&amp;quot;: &amp;quot;OTBSUPERIMPOSESENSOR_1&amp;quot;, &lt;br /&gt;
                                &amp;quot;output&amp;quot;: &amp;quot;-out&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromOutput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-ram&amp;quot;: 2048.0, &lt;br /&gt;
                        &amp;quot;-method&amp;quot;: 0&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;active&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;consoleName&amp;quot;: &amp;quot;otb:pansharpeningrcs&amp;quot;, &lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Pansharpening (rcs)&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.Algorithm&amp;quot;&lt;br /&gt;
            }, &lt;br /&gt;
            &amp;quot;OTBSUPERIMPOSESENSOR_1&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: &amp;quot;OTBSUPERIMPOSESENSOR_1&amp;quot;, &lt;br /&gt;
                    &amp;quot;paramsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;outputs&amp;quot;: {}, &lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 182.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 133.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;outputsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;dependencies&amp;quot;: [], &lt;br /&gt;
                    &amp;quot;params&amp;quot;: {&lt;br /&gt;
                        &amp;quot;-interpolator&amp;quot;: 0, &lt;br /&gt;
                        &amp;quot;-inm&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_LOWRESOLUTIONMULTISPECTRALRASTER&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromInput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-ram&amp;quot;: 2048.0, &lt;br /&gt;
                        &amp;quot;-interpolator.bco.radius&amp;quot;: 2.0, &lt;br /&gt;
                        &amp;quot;-lms&amp;quot;: 4.0, &lt;br /&gt;
                        &amp;quot;-inr&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromInput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-elev.default&amp;quot;: 0.0&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;active&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;consoleName&amp;quot;: &amp;quot;otb:superimposesensor&amp;quot;, &lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Superimpose sensor&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.Algorithm&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerAlgorithm&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной статье был рассмотрен процесс паншарпенинга изображений при помощи инструментов OTB, запускаемых при помощи модуля Processing в QGIS. OTB позволяет получить качественный и быстрый (благодаря многопоточной обработке) результат. Для паншарпенинга в QGIS удобнее всего создать соответствующую модель при помощи Model Builder, чтобы избежать проволочек, связанных с промежуточными файлами.&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21781</id>
		<title>Паншарпенинг в QGIS с использованием Orfeo ToolBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21781"/>
		<updated>2015-04-04T13:12:29Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Запуск паншарпенинга из QGIS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в QGIS посредством инструментария Orfeo ToolBox. }}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
При работе с данными дистанционного зондирования Земли зачастую приходится решать задачу улучшения снимков с низким разрешением за счёт снимков с высоким. В QGIS нет встроенного инструмента паншарпенинга, но есть возможность подключения инструментов [https://www.orfeo-toolbox.org/ Orfeo ToolBox] (OTB), где они есть.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Паншарпенинг в OTB и QGIS==&lt;br /&gt;
С программной точки зрения процесс паншарпенинга делится на две стадии: 1) подготовительную, во время которой разрешение и экстент мультиспектрального растра приводится в соответствие с экстентом и разрешением панхроматического растра (это необходимо для проведения операций растровой алгебры, вовлекающих оба растра); 2) непосредственно паншарпенинг.&lt;br /&gt;
===Использование утилиты OTB===&lt;br /&gt;
OTB по своей сути является набором консольных утилит и приложений. За паншарпенинг отвечает приложение [https://www.orfeo-toolbox.org//CookBook/CookBooksu36.html#x57-770004.2.2 otbcli_BundleToPerfectSensor]. Оно совмещает в себе обе стадии, описанные выше, и запускается следующей консольной командой: &lt;br /&gt;
  otbcli_BundleToPerfectSensor -inp pan_image -inxs xs_image -out output_image&lt;br /&gt;
где pan_image, xs_image и output_image соответсвенно - пути к панхроматическому, мультиспектральному и результирующему растрам. О дополнительных опциях читайте в документации.&lt;br /&gt;
===Запуск паншарпенинга из QGIS===&lt;br /&gt;
В QGIS инструменты OTB подключаются через модуль Processing. После установки OTB на компьютер зайдите в QGIS в настройки модуля Processing (''Processing -&amp;gt; Options -&amp;gt; Providers'') и активируйте интеграцию с OTB:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Enable OTB.png|center]]&lt;br /&gt;
&lt;br /&gt;
Теперь в ''Processing Toolbox'' у вас появится набор инструментов ''Orfeo Toolbox''. К сожалению, в инструментарий входят только консольные утилиты, но не приложения (то есть модуль otbcli_BundleToPerfectSensor не доступен из QGIS). Поэтому не спешите сразу запускать утилиты паншарпенинга (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; [https://www.orfeo-toolbox.org/CookBook/CookBooksu88.html#x119-4740005.4.9 Pansharpening]''), так как здесь требуется, чтобы все входные растры имели идентичный экстент и разрешение, то есть выполняется только вторая стадия. Чтобы выполнить первую - необходимо воспользоваться модулем [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Superimpose sensor''] (''Orfeo Toolbox -&amp;gt; Geometry -&amp;gt; Superimpose sensor'').&lt;br /&gt;
&lt;br /&gt;
Модуль ''Superimpose sensor'' имеет следующие параметры:&lt;br /&gt;
* '''Reference input''' - базовое изображение, к параметрам которого будет приведено обрабатываемое изображение (здесь выбираем панхроматическое).&lt;br /&gt;
* '''The image to reproject''' - изображение, чьи параметры будут приведены к параметрам базового изображения (здесь выбираем мультиспектральное).&lt;br /&gt;
* '''Default elevation''' - средняя высота изображения над эллипсоидом.&lt;br /&gt;
* '''Spacing of the deformation field''' - интервал расстояния поля деформации (coarser deformation field).&lt;br /&gt;
* '''Interpolation''' - тип интерполяции.&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Superimpose sensor.png|thumb|center|x500px|Интерфейс модуля Superimpose sensor]]&lt;br /&gt;
&lt;br /&gt;
После трансформации мультиспектрального растра можно переходить непосредственно к паншарпенингу. Модуль [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Pansharpening(rsc)''] имеет следующие параметры:&lt;br /&gt;
* '''Input PAN image''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Input XS image''' - мультиспектральное изображение, приведённое к параметрам панхроматического.&lt;br /&gt;
* '''Algorithm''' - алгоритм для паншарпенинга (не изменяется, для использования других алгоритмов (LMVM и Bayesian) используйте соответсвующие модули ''Pansharpening(bayes) и Pansharpening(lvmv)'')&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp dialogue.png|thumb|center|x500px|Интерфейс модуля ''Pansharpening(rsc)'']]&lt;br /&gt;
&lt;br /&gt;
Давайте посмотрим на результат паншарпенинга при помощи указанных модулей.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:OTB pansharp result.png|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
&lt;br /&gt;
Результат выглядит довольно неплохо, и что немаловажно, был получен очень бытро - ''OTB'' использует многопоточную обработку и задействует все ядра вашего процессора.&lt;br /&gt;
&lt;br /&gt;
===Создание модели===&lt;br /&gt;
Согласитесь, гораздо удобнее было бы обойтись без промежуточных операций и растров. Этого можно добиться путём [http://gis-lab.info/qa/sextante-qgis.html#.D0.9F.D0.BE.D1.81.D1.82.D1.80.D0.BE.D0.B8.D1.82.D0.B5.D0.BB.D1.8C_.D0.BC.D0.BE.D0.B4.D0.B5.D0.BB.D0.B5.D0.B9_.28Modeler.29 создания соответствующей модели для Processing Toolbox]. В качестве входных параметров модели следует использовать панхроматический и мультиспектральный растры. Последний сначала подготавливается при помощи ''Superimpose sensor'', а затем обрабатывается при помощи ''Pansharpening(rsc)''.&lt;br /&gt;
[[Файл:Model pansharp OTB.png|thumb|center|x550px|Модель паншарпенига]]&lt;br /&gt;
Интерфейс модели будет выглядеть следующим образом:&lt;br /&gt;
* '''High resolution panchrome raster''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Low resolution raster''' - мультиспектральное изображение низкого разрешения.&lt;br /&gt;
* '''pansharpened OTB''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp model dialogue.png|thumb|center|x500px|Интерфейс модели паншарпенига]]&lt;br /&gt;
====Код модели====&lt;br /&gt;
Ниже вы найдёте код, описывающий модель, приведённую выше. Вы можете сохранить его в виде текстового файла с расширением .model (например, ''Pansharp_OTB.model'') и сохранить в папку &amp;quot;.../.qgis2/processing/models/&amp;quot;. После этого она появится у вас в списке моделей Processing toolbox (необходим рестарт QGIS).&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;values&amp;quot;: {&lt;br /&gt;
        &amp;quot;inputs&amp;quot;: {&lt;br /&gt;
            &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 55.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 121.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;param&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;isAdvanced&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;, &lt;br /&gt;
                            &amp;quot;showSublayersDialog&amp;quot;: true, &lt;br /&gt;
                            &amp;quot;value&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;exported&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;hidden&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;optional&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;description&amp;quot;: &amp;quot;High_resolution_panchromatic_raster&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;processing.core.parameters.ParameterRaster&amp;quot;&lt;br /&gt;
                    }&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerParameter&amp;quot;&lt;br /&gt;
            }, &lt;br /&gt;
            &amp;quot;RASTERLAYER_LOWRESOLUTIONMULTISPECTRALRASTER&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 55.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 342.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;param&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;isAdvanced&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_LOWRESOLUTIONMULTISPECTRALRASTER&amp;quot;, &lt;br /&gt;
                            &amp;quot;showSublayersDialog&amp;quot;: true, &lt;br /&gt;
                            &amp;quot;value&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;exported&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;hidden&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;optional&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;description&amp;quot;: &amp;quot;Low_resolution_multispectral_raster&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;processing.core.parameters.ParameterRaster&amp;quot;&lt;br /&gt;
                    }&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerParameter&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;helpContent&amp;quot;: {}, &lt;br /&gt;
        &amp;quot;group&amp;quot;: &amp;quot;Raster processing&amp;quot;, &lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;OTB Pan-sharpening&amp;quot;, &lt;br /&gt;
        &amp;quot;algs&amp;quot;: {&lt;br /&gt;
            &amp;quot;OTBPANSHARPENINGRCS_1&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: &amp;quot;OTBPANSHARPENINGRCS_1&amp;quot;, &lt;br /&gt;
                    &amp;quot;paramsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;outputs&amp;quot;: {&lt;br /&gt;
                        &amp;quot;-out&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;description&amp;quot;: &amp;quot;Panshrpened_OTB&amp;quot;, &lt;br /&gt;
                                &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                                    &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                        &amp;quot;y&amp;quot;: 311.0, &lt;br /&gt;
                                        &amp;quot;x&amp;quot;: 556.0&lt;br /&gt;
                                    }, &lt;br /&gt;
                                    &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                                }&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerOutput&amp;quot;&lt;br /&gt;
                        }&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 266.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 356.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;outputsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;dependencies&amp;quot;: [], &lt;br /&gt;
                    &amp;quot;params&amp;quot;: {&lt;br /&gt;
                        &amp;quot;-inp&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromInput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-inxs&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;alg&amp;quot;: &amp;quot;OTBSUPERIMPOSESENSOR_1&amp;quot;, &lt;br /&gt;
                                &amp;quot;output&amp;quot;: &amp;quot;-out&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromOutput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-ram&amp;quot;: 2048.0, &lt;br /&gt;
                        &amp;quot;-method&amp;quot;: 0&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;active&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;consoleName&amp;quot;: &amp;quot;otb:pansharpeningrcs&amp;quot;, &lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Pansharpening (rcs)&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.Algorithm&amp;quot;&lt;br /&gt;
            }, &lt;br /&gt;
            &amp;quot;OTBSUPERIMPOSESENSOR_1&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: &amp;quot;OTBSUPERIMPOSESENSOR_1&amp;quot;, &lt;br /&gt;
                    &amp;quot;paramsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;outputs&amp;quot;: {}, &lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 182.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 133.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;outputsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;dependencies&amp;quot;: [], &lt;br /&gt;
                    &amp;quot;params&amp;quot;: {&lt;br /&gt;
                        &amp;quot;-interpolator&amp;quot;: 0, &lt;br /&gt;
                        &amp;quot;-inm&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_LOWRESOLUTIONMULTISPECTRALRASTER&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromInput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-ram&amp;quot;: 2048.0, &lt;br /&gt;
                        &amp;quot;-interpolator.bco.radius&amp;quot;: 2.0, &lt;br /&gt;
                        &amp;quot;-lms&amp;quot;: 4.0, &lt;br /&gt;
                        &amp;quot;-inr&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromInput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-elev.default&amp;quot;: 0.0&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;active&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;consoleName&amp;quot;: &amp;quot;otb:superimposesensor&amp;quot;, &lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Superimpose sensor&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.Algorithm&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerAlgorithm&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21780</id>
		<title>Паншарпенинг в QGIS с использованием Orfeo ToolBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21780"/>
		<updated>2015-04-04T13:09:18Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Немного теории */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в QGIS посредством инструментария Orfeo ToolBox. }}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
При работе с данными дистанционного зондирования Земли зачастую приходится решать задачу улучшения снимков с низким разрешением за счёт снимков с высоким. В QGIS нет встроенного инструмента паншарпенинга, но есть возможность подключения инструментов [https://www.orfeo-toolbox.org/ Orfeo ToolBox] (OTB), где они есть.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами, взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Паншарпенинг в OTB и QGIS==&lt;br /&gt;
С программной точки зрения процесс паншарпенинга делится на две стадии: 1) подготовительную, во время которой разрешение и экстент мультиспектрального растра приводится в соответствие с экстентом и разрешением панхроматического растра (это необходимо для проведения операций растровой алгебры, вовлекающих оба растра); 2) непосредственно паншарпенинг.&lt;br /&gt;
===Использование утилиты OTB===&lt;br /&gt;
OTB по своей сути является набором консольных утилит и приложений. За паншарпенинг отвечает приложение [https://www.orfeo-toolbox.org//CookBook/CookBooksu36.html#x57-770004.2.2 otbcli_BundleToPerfectSensor]. Оно совмещает в себе обе стадии, описанные выше, и запускается следующей консольной командой: &lt;br /&gt;
  otbcli_BundleToPerfectSensor -inp pan_image -inxs xs_image -out output_image&lt;br /&gt;
где pan_image, xs_image и output_image соответсвенно - пути к панхроматическому, мультиспектральному и результирующему растрам. О дополнительных опциях читайте в документации.&lt;br /&gt;
===Запуск паншарпенинга из QGIS===&lt;br /&gt;
В QGIS инструменты OTB подключаются через модуль Processing. После установки OTB на компьютер зайдите в QGIS в настройки модуля Processing (''Processing -&amp;gt; Options -&amp;gt; Providers'') и активируйте интеграцию с OTB:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Enable OTB.png|center]]&lt;br /&gt;
&lt;br /&gt;
Теперь в ''Processing Toolbox'' у вас появится набор инструментов ''Orfeo Toolbox''. К сожалению, в инструментарий входят только консольные утилиты, но не приложения (то есть модуль otbcli_BundleToPerfectSensor не доступен из QGIS). Поэтому не спешите сразу запускать утилиты паншарпенинга (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; [https://www.orfeo-toolbox.org/CookBook/CookBooksu88.html#x119-4740005.4.9 Pansharpening]''), так как здесь требуется, чтобы все входные растры имели идентичный экстент и разрешение, то есть выполняется только вторая стадия. Чтобы выполнить первую - необходимо воспользоваться модулем [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Superimpose sensor''] (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; Superimpose sensor'').&lt;br /&gt;
&lt;br /&gt;
Модуль ''Superimpose sensor'' имеет следующие параметры:&lt;br /&gt;
* '''Reference input''' - базовое изображение, к параметрам которого будет приведено обрабатываемое изображение (здесь выбираем панхроматическое).&lt;br /&gt;
* '''The image to reproject''' - изображение, чьи параметры будут приведены к параметрам базового изображения (здесь выбираем мультиспектральное).&lt;br /&gt;
* '''Default elevation''' - средняя высота изображения над эллипсоидом.&lt;br /&gt;
* '''Spacing of the deformation field''' - интервал расстояния поля деформации (coarser deformation field).&lt;br /&gt;
* '''Interpolation''' - тип интерполяции.&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Superimpose sensor.png|thumb|center|x500px|Интерфейс модуля Superimpose sensor]]&lt;br /&gt;
&lt;br /&gt;
После трансформации мультиспектрального растра можно переходить непосредственно к паншарпенингу. Модуль [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Pansharpening(rsc)''] имеет следующие параметры:&lt;br /&gt;
* '''Input PAN image''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Input XS image''' - мультиспектральное изображение, приведённое к параметрам панхроматического.&lt;br /&gt;
* '''Algorithm''' - алгоритм для паншарпенинга (не изменяется, для использования других алгоритмов (LMVM и Bayesian) используйте соответсвующие модули ''Pansharpening(bayes) и Pansharpening(lvmv)'')&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp dialogue.png|thumb|center|x500px|Интерфейс модуля ''Pansharpening(rsc)'']]&lt;br /&gt;
&lt;br /&gt;
Давайте посмотрим на результат паншарпенинга при помощи указанных модулей.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:OTB pansharp result.png|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
&lt;br /&gt;
Результат выглядит довольно неплохо, и что немаловажно, был получен очень бытро - ''OTB'' использует многопоточную обработку и задействует все ядра вашего процессора.&lt;br /&gt;
&lt;br /&gt;
===Создание модели===&lt;br /&gt;
Согласитесь, гораздо удобнее было бы обойтись без промежуточных операций и растров. Этого можно добиться путём [http://gis-lab.info/qa/sextante-qgis.html#.D0.9F.D0.BE.D1.81.D1.82.D1.80.D0.BE.D0.B8.D1.82.D0.B5.D0.BB.D1.8C_.D0.BC.D0.BE.D0.B4.D0.B5.D0.BB.D0.B5.D0.B9_.28Modeler.29 создания соответствующей модели для Processing Toolbox]. В качестве входных параметров модели следует использовать панхроматический и мультиспектральный растры. Последний сначала подготавливается при помощи ''Superimpose sensor'', а затем обрабатывается при помощи ''Pansharpening(rsc)''.&lt;br /&gt;
[[Файл:Model pansharp OTB.png|thumb|center|x550px|Модель паншарпенига]]&lt;br /&gt;
Интерфейс модели будет выглядеть следующим образом:&lt;br /&gt;
* '''High resolution panchrome raster''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Low resolution raster''' - мультиспектральное изображение низкого разрешения.&lt;br /&gt;
* '''pansharpened OTB''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp model dialogue.png|thumb|center|x500px|Интерфейс модели паншарпенига]]&lt;br /&gt;
====Код модели====&lt;br /&gt;
Ниже вы найдёте код, описывающий модель, приведённую выше. Вы можете сохранить его в виде текстового файла с расширением .model (например, ''Pansharp_OTB.model'') и сохранить в папку &amp;quot;.../.qgis2/processing/models/&amp;quot;. После этого она появится у вас в списке моделей Processing toolbox (необходим рестарт QGIS).&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;values&amp;quot;: {&lt;br /&gt;
        &amp;quot;inputs&amp;quot;: {&lt;br /&gt;
            &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 55.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 121.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;param&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;isAdvanced&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;, &lt;br /&gt;
                            &amp;quot;showSublayersDialog&amp;quot;: true, &lt;br /&gt;
                            &amp;quot;value&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;exported&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;hidden&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;optional&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;description&amp;quot;: &amp;quot;High_resolution_panchromatic_raster&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;processing.core.parameters.ParameterRaster&amp;quot;&lt;br /&gt;
                    }&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerParameter&amp;quot;&lt;br /&gt;
            }, &lt;br /&gt;
            &amp;quot;RASTERLAYER_LOWRESOLUTIONMULTISPECTRALRASTER&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 55.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 342.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;param&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;isAdvanced&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_LOWRESOLUTIONMULTISPECTRALRASTER&amp;quot;, &lt;br /&gt;
                            &amp;quot;showSublayersDialog&amp;quot;: true, &lt;br /&gt;
                            &amp;quot;value&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;exported&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;hidden&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;optional&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;description&amp;quot;: &amp;quot;Low_resolution_multispectral_raster&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;processing.core.parameters.ParameterRaster&amp;quot;&lt;br /&gt;
                    }&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerParameter&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;helpContent&amp;quot;: {}, &lt;br /&gt;
        &amp;quot;group&amp;quot;: &amp;quot;Raster processing&amp;quot;, &lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;OTB Pan-sharpening&amp;quot;, &lt;br /&gt;
        &amp;quot;algs&amp;quot;: {&lt;br /&gt;
            &amp;quot;OTBPANSHARPENINGRCS_1&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: &amp;quot;OTBPANSHARPENINGRCS_1&amp;quot;, &lt;br /&gt;
                    &amp;quot;paramsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;outputs&amp;quot;: {&lt;br /&gt;
                        &amp;quot;-out&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;description&amp;quot;: &amp;quot;Panshrpened_OTB&amp;quot;, &lt;br /&gt;
                                &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                                    &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                        &amp;quot;y&amp;quot;: 311.0, &lt;br /&gt;
                                        &amp;quot;x&amp;quot;: 556.0&lt;br /&gt;
                                    }, &lt;br /&gt;
                                    &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                                }&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerOutput&amp;quot;&lt;br /&gt;
                        }&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 266.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 356.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;outputsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;dependencies&amp;quot;: [], &lt;br /&gt;
                    &amp;quot;params&amp;quot;: {&lt;br /&gt;
                        &amp;quot;-inp&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromInput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-inxs&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;alg&amp;quot;: &amp;quot;OTBSUPERIMPOSESENSOR_1&amp;quot;, &lt;br /&gt;
                                &amp;quot;output&amp;quot;: &amp;quot;-out&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromOutput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-ram&amp;quot;: 2048.0, &lt;br /&gt;
                        &amp;quot;-method&amp;quot;: 0&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;active&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;consoleName&amp;quot;: &amp;quot;otb:pansharpeningrcs&amp;quot;, &lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Pansharpening (rcs)&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.Algorithm&amp;quot;&lt;br /&gt;
            }, &lt;br /&gt;
            &amp;quot;OTBSUPERIMPOSESENSOR_1&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: &amp;quot;OTBSUPERIMPOSESENSOR_1&amp;quot;, &lt;br /&gt;
                    &amp;quot;paramsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;outputs&amp;quot;: {}, &lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 182.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 133.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;outputsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;dependencies&amp;quot;: [], &lt;br /&gt;
                    &amp;quot;params&amp;quot;: {&lt;br /&gt;
                        &amp;quot;-interpolator&amp;quot;: 0, &lt;br /&gt;
                        &amp;quot;-inm&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_LOWRESOLUTIONMULTISPECTRALRASTER&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromInput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-ram&amp;quot;: 2048.0, &lt;br /&gt;
                        &amp;quot;-interpolator.bco.radius&amp;quot;: 2.0, &lt;br /&gt;
                        &amp;quot;-lms&amp;quot;: 4.0, &lt;br /&gt;
                        &amp;quot;-inr&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromInput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-elev.default&amp;quot;: 0.0&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;active&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;consoleName&amp;quot;: &amp;quot;otb:superimposesensor&amp;quot;, &lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Superimpose sensor&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.Algorithm&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerAlgorithm&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21779</id>
		<title>Паншарпенинг в QGIS с использованием Orfeo ToolBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21779"/>
		<updated>2015-04-04T13:08:34Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в QGIS посредством инструментария Orfeo ToolBox. }}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
При работе с данными дистанционного зондирования Земли зачастую приходится решать задачу улучшения снимков с низким разрешением за счёт снимков с высоким. В QGIS нет встроенного инструмента паншарпенинга, но есть возможность подключения инструментов [https://www.orfeo-toolbox.org/ Orfeo ToolBox] (OTB), где они есть.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Паншарпенинг в OTB и QGIS==&lt;br /&gt;
С программной точки зрения процесс паншарпенинга делится на две стадии: 1) подготовительную, во время которой разрешение и экстент мультиспектрального растра приводится в соответствие с экстентом и разрешением панхроматического растра (это необходимо для проведения операций растровой алгебры, вовлекающих оба растра); 2) непосредственно паншарпенинг.&lt;br /&gt;
===Использование утилиты OTB===&lt;br /&gt;
OTB по своей сути является набором консольных утилит и приложений. За паншарпенинг отвечает приложение [https://www.orfeo-toolbox.org//CookBook/CookBooksu36.html#x57-770004.2.2 otbcli_BundleToPerfectSensor]. Оно совмещает в себе обе стадии, описанные выше, и запускается следующей консольной командой: &lt;br /&gt;
  otbcli_BundleToPerfectSensor -inp pan_image -inxs xs_image -out output_image&lt;br /&gt;
где pan_image, xs_image и output_image соответсвенно - пути к панхроматическому, мультиспектральному и результирующему растрам. О дополнительных опциях читайте в документации.&lt;br /&gt;
===Запуск паншарпенинга из QGIS===&lt;br /&gt;
В QGIS инструменты OTB подключаются через модуль Processing. После установки OTB на компьютер зайдите в QGIS в настройки модуля Processing (''Processing -&amp;gt; Options -&amp;gt; Providers'') и активируйте интеграцию с OTB:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Enable OTB.png|center]]&lt;br /&gt;
&lt;br /&gt;
Теперь в ''Processing Toolbox'' у вас появится набор инструментов ''Orfeo Toolbox''. К сожалению, в инструментарий входят только консольные утилиты, но не приложения (то есть модуль otbcli_BundleToPerfectSensor не доступен из QGIS). Поэтому не спешите сразу запускать утилиты паншарпенинга (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; [https://www.orfeo-toolbox.org/CookBook/CookBooksu88.html#x119-4740005.4.9 Pansharpening]''), так как здесь требуется, чтобы все входные растры имели идентичный экстент и разрешение, то есть выполняется только вторая стадия. Чтобы выполнить первую - необходимо воспользоваться модулем [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Superimpose sensor''] (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; Superimpose sensor'').&lt;br /&gt;
&lt;br /&gt;
Модуль ''Superimpose sensor'' имеет следующие параметры:&lt;br /&gt;
* '''Reference input''' - базовое изображение, к параметрам которого будет приведено обрабатываемое изображение (здесь выбираем панхроматическое).&lt;br /&gt;
* '''The image to reproject''' - изображение, чьи параметры будут приведены к параметрам базового изображения (здесь выбираем мультиспектральное).&lt;br /&gt;
* '''Default elevation''' - средняя высота изображения над эллипсоидом.&lt;br /&gt;
* '''Spacing of the deformation field''' - интервал расстояния поля деформации (coarser deformation field).&lt;br /&gt;
* '''Interpolation''' - тип интерполяции.&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Superimpose sensor.png|thumb|center|x500px|Интерфейс модуля Superimpose sensor]]&lt;br /&gt;
&lt;br /&gt;
После трансформации мультиспектрального растра можно переходить непосредственно к паншарпенингу. Модуль [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Pansharpening(rsc)''] имеет следующие параметры:&lt;br /&gt;
* '''Input PAN image''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Input XS image''' - мультиспектральное изображение, приведённое к параметрам панхроматического.&lt;br /&gt;
* '''Algorithm''' - алгоритм для паншарпенинга (не изменяется, для использования других алгоритмов (LMVM и Bayesian) используйте соответсвующие модули ''Pansharpening(bayes) и Pansharpening(lvmv)'')&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp dialogue.png|thumb|center|x500px|Интерфейс модуля ''Pansharpening(rsc)'']]&lt;br /&gt;
&lt;br /&gt;
Давайте посмотрим на результат паншарпенинга при помощи указанных модулей.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:OTB pansharp result.png|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
&lt;br /&gt;
Результат выглядит довольно неплохо, и что немаловажно, был получен очень бытро - ''OTB'' использует многопоточную обработку и задействует все ядра вашего процессора.&lt;br /&gt;
&lt;br /&gt;
===Создание модели===&lt;br /&gt;
Согласитесь, гораздо удобнее было бы обойтись без промежуточных операций и растров. Этого можно добиться путём [http://gis-lab.info/qa/sextante-qgis.html#.D0.9F.D0.BE.D1.81.D1.82.D1.80.D0.BE.D0.B8.D1.82.D0.B5.D0.BB.D1.8C_.D0.BC.D0.BE.D0.B4.D0.B5.D0.BB.D0.B5.D0.B9_.28Modeler.29 создания соответствующей модели для Processing Toolbox]. В качестве входных параметров модели следует использовать панхроматический и мультиспектральный растры. Последний сначала подготавливается при помощи ''Superimpose sensor'', а затем обрабатывается при помощи ''Pansharpening(rsc)''.&lt;br /&gt;
[[Файл:Model pansharp OTB.png|thumb|center|x550px|Модель паншарпенига]]&lt;br /&gt;
Интерфейс модели будет выглядеть следующим образом:&lt;br /&gt;
* '''High resolution panchrome raster''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Low resolution raster''' - мультиспектральное изображение низкого разрешения.&lt;br /&gt;
* '''pansharpened OTB''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp model dialogue.png|thumb|center|x500px|Интерфейс модели паншарпенига]]&lt;br /&gt;
====Код модели====&lt;br /&gt;
Ниже вы найдёте код, описывающий модель, приведённую выше. Вы можете сохранить его в виде текстового файла с расширением .model (например, ''Pansharp_OTB.model'') и сохранить в папку &amp;quot;.../.qgis2/processing/models/&amp;quot;. После этого она появится у вас в списке моделей Processing toolbox (необходим рестарт QGIS).&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;values&amp;quot;: {&lt;br /&gt;
        &amp;quot;inputs&amp;quot;: {&lt;br /&gt;
            &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 55.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 121.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;param&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;isAdvanced&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;, &lt;br /&gt;
                            &amp;quot;showSublayersDialog&amp;quot;: true, &lt;br /&gt;
                            &amp;quot;value&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;exported&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;hidden&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;optional&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;description&amp;quot;: &amp;quot;High_resolution_panchromatic_raster&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;processing.core.parameters.ParameterRaster&amp;quot;&lt;br /&gt;
                    }&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerParameter&amp;quot;&lt;br /&gt;
            }, &lt;br /&gt;
            &amp;quot;RASTERLAYER_LOWRESOLUTIONMULTISPECTRALRASTER&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 55.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 342.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;param&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;isAdvanced&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_LOWRESOLUTIONMULTISPECTRALRASTER&amp;quot;, &lt;br /&gt;
                            &amp;quot;showSublayersDialog&amp;quot;: true, &lt;br /&gt;
                            &amp;quot;value&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;exported&amp;quot;: null, &lt;br /&gt;
                            &amp;quot;hidden&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;optional&amp;quot;: false, &lt;br /&gt;
                            &amp;quot;description&amp;quot;: &amp;quot;Low_resolution_multispectral_raster&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;processing.core.parameters.ParameterRaster&amp;quot;&lt;br /&gt;
                    }&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerParameter&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;helpContent&amp;quot;: {}, &lt;br /&gt;
        &amp;quot;group&amp;quot;: &amp;quot;Raster processing&amp;quot;, &lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;OTB Pan-sharpening&amp;quot;, &lt;br /&gt;
        &amp;quot;algs&amp;quot;: {&lt;br /&gt;
            &amp;quot;OTBPANSHARPENINGRCS_1&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: &amp;quot;OTBPANSHARPENINGRCS_1&amp;quot;, &lt;br /&gt;
                    &amp;quot;paramsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;outputs&amp;quot;: {&lt;br /&gt;
                        &amp;quot;-out&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;description&amp;quot;: &amp;quot;Panshrpened_OTB&amp;quot;, &lt;br /&gt;
                                &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                                    &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                        &amp;quot;y&amp;quot;: 311.0, &lt;br /&gt;
                                        &amp;quot;x&amp;quot;: 556.0&lt;br /&gt;
                                    }, &lt;br /&gt;
                                    &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                                }&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerOutput&amp;quot;&lt;br /&gt;
                        }&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 266.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 356.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;outputsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;dependencies&amp;quot;: [], &lt;br /&gt;
                    &amp;quot;params&amp;quot;: {&lt;br /&gt;
                        &amp;quot;-inp&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromInput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-inxs&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;alg&amp;quot;: &amp;quot;OTBSUPERIMPOSESENSOR_1&amp;quot;, &lt;br /&gt;
                                &amp;quot;output&amp;quot;: &amp;quot;-out&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromOutput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-ram&amp;quot;: 2048.0, &lt;br /&gt;
                        &amp;quot;-method&amp;quot;: 0&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;active&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;consoleName&amp;quot;: &amp;quot;otb:pansharpeningrcs&amp;quot;, &lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Pansharpening (rcs)&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.Algorithm&amp;quot;&lt;br /&gt;
            }, &lt;br /&gt;
            &amp;quot;OTBSUPERIMPOSESENSOR_1&amp;quot;: {&lt;br /&gt;
                &amp;quot;values&amp;quot;: {&lt;br /&gt;
                    &amp;quot;name&amp;quot;: &amp;quot;OTBSUPERIMPOSESENSOR_1&amp;quot;, &lt;br /&gt;
                    &amp;quot;paramsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;outputs&amp;quot;: {}, &lt;br /&gt;
                    &amp;quot;pos&amp;quot;: {&lt;br /&gt;
                        &amp;quot;values&amp;quot;: {&lt;br /&gt;
                            &amp;quot;y&amp;quot;: 182.0, &lt;br /&gt;
                            &amp;quot;x&amp;quot;: 133.0&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;point&amp;quot;&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;outputsFolded&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;dependencies&amp;quot;: [], &lt;br /&gt;
                    &amp;quot;params&amp;quot;: {&lt;br /&gt;
                        &amp;quot;-interpolator&amp;quot;: 0, &lt;br /&gt;
                        &amp;quot;-inm&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_LOWRESOLUTIONMULTISPECTRALRASTER&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromInput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-ram&amp;quot;: 2048.0, &lt;br /&gt;
                        &amp;quot;-interpolator.bco.radius&amp;quot;: 2.0, &lt;br /&gt;
                        &amp;quot;-lms&amp;quot;: 4.0, &lt;br /&gt;
                        &amp;quot;-inr&amp;quot;: {&lt;br /&gt;
                            &amp;quot;values&amp;quot;: {&lt;br /&gt;
                                &amp;quot;name&amp;quot;: &amp;quot;RASTERLAYER_HIGHRESOLUTIONPANCHROMATICRASTER&amp;quot;&lt;br /&gt;
                            }, &lt;br /&gt;
                            &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ValueFromInput&amp;quot;&lt;br /&gt;
                        }, &lt;br /&gt;
                        &amp;quot;-elev.default&amp;quot;: 0.0&lt;br /&gt;
                    }, &lt;br /&gt;
                    &amp;quot;active&amp;quot;: true, &lt;br /&gt;
                    &amp;quot;consoleName&amp;quot;: &amp;quot;otb:superimposesensor&amp;quot;, &lt;br /&gt;
                    &amp;quot;description&amp;quot;: &amp;quot;Superimpose sensor&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.Algorithm&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;class&amp;quot;: &amp;quot;processing.modeler.ModelerAlgorithm.ModelerAlgorithm&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21778</id>
		<title>Паншарпенинг в QGIS с использованием Orfeo ToolBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21778"/>
		<updated>2015-04-04T12:59:48Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Паншарпенинг в OTB и QGIS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в QGIS посредством инструментария Orfeo ToolBox. }}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
При работе с данными дистанционного зондирования Земли зачастую приходится решать задачу улучшения снимков с низким разрешением за счёт снимков с высоким. В QGIS нет встроенного инструмента паншарпенинга, но есть возможность подключения инструментов [https://www.orfeo-toolbox.org/ Orfeo ToolBox] (OTB), где они есть.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Паншарпенинг в OTB и QGIS==&lt;br /&gt;
С программной точки зрения процесс паншарпенинга делится на две стадии: 1) подготовительную, во время которой разрешение и экстент мультиспектрального растра приводится в соответствие с экстентом и разрешением панхроматического растра (это необходимо для проведения операций растровой алгебры, вовлекающих оба растра); 2) непосредственно паншарпенинг.&lt;br /&gt;
===Использование утилиты OTB===&lt;br /&gt;
OTB по своей сути является набором консольных утилит и приложений. За паншарпенинг отвечает приложение [https://www.orfeo-toolbox.org//CookBook/CookBooksu36.html#x57-770004.2.2 otbcli_BundleToPerfectSensor]. Оно совмещает в себе обе стадии, описанные выше, и запускается следующей консольной командой: &lt;br /&gt;
  otbcli_BundleToPerfectSensor -inp pan_image -inxs xs_image -out output_image&lt;br /&gt;
где pan_image, xs_image и output_image соответсвенно - пути к панхроматическому, мультиспектральному и результирующему растрам. О дополнительных опциях читайте в документации.&lt;br /&gt;
===Запуск паншарпенинга из QGIS===&lt;br /&gt;
В QGIS инструменты OTB подключаются через модуль Processing. После установки OTB на компьютер зайдите в QGIS в настройки модуля Processing (''Processing -&amp;gt; Options -&amp;gt; Providers'') и активируйте интеграцию с OTB:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Enable OTB.png|center]]&lt;br /&gt;
&lt;br /&gt;
Теперь в ''Processing Toolbox'' у вас появится набор инструментов ''Orfeo Toolbox''. К сожалению, в инструментарий входят только консольные утилиты, но не приложения (то есть модуль otbcli_BundleToPerfectSensor не доступен из QGIS). Поэтому не спешите сразу запускать утилиты паншарпенинга (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; [https://www.orfeo-toolbox.org/CookBook/CookBooksu88.html#x119-4740005.4.9 Pansharpening]''), так как здесь требуется, чтобы все входные растры имели идентичный экстент и разрешение, то есть выполняется только вторая стадия. Чтобы выполнить первую - необходимо воспользоваться модулем [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Superimpose sensor''] (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; Superimpose sensor'').&lt;br /&gt;
&lt;br /&gt;
Модуль ''Superimpose sensor'' имеет следующие параметры:&lt;br /&gt;
* '''Reference input''' - базовое изображение, к параметрам которого будет приведено обрабатываемое изображение (здесь выбираем панхроматическое).&lt;br /&gt;
* '''The image to reproject''' - изображение, чьи параметры будут приведены к параметрам базового изображения (здесь выбираем мультиспектральное).&lt;br /&gt;
* '''Default elevation''' - средняя высота изображения над эллипсоидом.&lt;br /&gt;
* '''Spacing of the deformation field''' - интервал расстояния поля деформации (coarser deformation field).&lt;br /&gt;
* '''Interpolation''' - тип интерполяции.&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Superimpose sensor.png|thumb|center|x500px|Интерфейс модуля Superimpose sensor]]&lt;br /&gt;
&lt;br /&gt;
После трансформации мультиспектрального растра можно переходить непосредственно к паншарпенингу. Модуль [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Pansharpening(rsc)''] имеет следующие параметры:&lt;br /&gt;
* '''Input PAN image''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Input XS image''' - мультиспектральное изображение, приведённое к параметрам панхроматического.&lt;br /&gt;
* '''Algorithm''' - алгоритм для паншарпенинга (не изменяется, для использования других алгоритмов (LMVM и Bayesian) используйте соответсвующие модули ''Pansharpening(bayes) и Pansharpening(lvmv)'')&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp dialogue.png|thumb|center|x500px|Интерфейс модуля ''Pansharpening(rsc)'']]&lt;br /&gt;
&lt;br /&gt;
Давайте посмотрим на результат паншарпенинга при помощи указанных модулей.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x700px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x700px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:OTB pansharp result.png|center|x700px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
&lt;br /&gt;
Результат выглядит довольно неплохо, и что немаловажно, был получен очень бытро - ''OTB'' использует многопоточную обработку и задействует все ядра вашего процессора.&lt;br /&gt;
&lt;br /&gt;
===Создание модели===&lt;br /&gt;
Согласитесь, гораздо удобнее было бы обойтись без промежуточных операций и растров. Этого можно добиться путём [http://gis-lab.info/qa/sextante-qgis.html#.D0.9F.D0.BE.D1.81.D1.82.D1.80.D0.BE.D0.B8.D1.82.D0.B5.D0.BB.D1.8C_.D0.BC.D0.BE.D0.B4.D0.B5.D0.BB.D0.B5.D0.B9_.28Modeler.29 создания соответствующей модели для Processing Toolbox]. В качестве входных параметров модели следует использовать панхроматический и мультиспектральный растры. Последний сначала подготавливается при помощи ''Superimpose sensor'', а затем обрабатывается при помощи ''Pansharpening(rsc)''.&lt;br /&gt;
[[Файл:Model pansharp OTB.png|thumb|center|x550px|Модель паншарпенига]]&lt;br /&gt;
Интерфейс модели будет выглядеть следующим образом:&lt;br /&gt;
* '''High resolution panchrome raster''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Low resolution raster''' - мультиспектральное изображение низкого разрешения.&lt;br /&gt;
* '''pansharpened OTB''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp model dialogue.png|thumb|center|x500px|Интерфейс модели паншарпенига]]&lt;br /&gt;
&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21777</id>
		<title>Паншарпенинг в QGIS с использованием Orfeo ToolBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21777"/>
		<updated>2015-04-04T12:52:52Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Паншарпенинг в OTB и QGIS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в QGIS посредством инструментария Orfeo ToolBox. }}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
При работе с данными дистанционного зондирования Земли зачастую приходится решать задачу улучшения снимков с низким разрешением за счёт снимков с высоким. В QGIS нет встроенного инструмента паншарпенинга, но есть возможность подключения инструментов [https://www.orfeo-toolbox.org/ Orfeo ToolBox] (OTB), где они есть.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Паншарпенинг в OTB и QGIS==&lt;br /&gt;
С программной точки зрения процесс паншарпенинга делится на две стадии: 1) подготовительную, во время которой разрешение и экстент мультиспектрального растра приводится в соответствие с экстентом и разрешением панхроматического растра (это необходимо для проведения операций растровой алгебры, вовлекающих оба растра); 2) непосредственно паншарпенинг.&lt;br /&gt;
===Использование утилиты OTB===&lt;br /&gt;
OTB по своей сути является набором консольных утилит и приложений. За паншарпенинг отвечает приложение [https://www.orfeo-toolbox.org//CookBook/CookBooksu36.html#x57-770004.2.2 otbcli_BundleToPerfectSensor]. Оно совмещает в себе обе стадии, описанные выше, и запускается следующей консольной командой: &lt;br /&gt;
  otbcli_BundleToPerfectSensor -inp pan_image -inxs xs_image -out output_image&lt;br /&gt;
где pan_image, xs_image и output_image соответсвенно - пути к панхроматическому, мультиспектральному и результирующему растрам. О дополнительных опциях читайте в документации.&lt;br /&gt;
===Запуск паншарпенинга из QGIS===&lt;br /&gt;
В QGIS инструменты OTB подключаются через модуль Processing. После установки OTB на компьютер зайдите в QGIS в настройки модуля Processing (''Processing -&amp;gt; Options -&amp;gt; Providers'') и активируйте интеграцию с OTB:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Enable OTB.png|center]]&lt;br /&gt;
&lt;br /&gt;
Теперь в ''Processing Toolbox'' у вас появится набор инструментов ''Orfeo Toolbox''. К сожалению, в инструментарий входят только консольные утилиты, но не приложения (то есть модуль otbcli_BundleToPerfectSensor не доступен из QGIS). Поэтому не спешите сразу запускать утилиты паншарпенинга (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; [https://www.orfeo-toolbox.org/CookBook/CookBooksu88.html#x119-4740005.4.9 Pansharpening]''), так как здесь требуется, чтобы все входные растры имели идентичный экстент и разрешение, то есть выполняется только вторая стадия. Чтобы выполнить первую - необходимо воспользоваться модулем [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Superimpose sensor''] (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; Superimpose sensor'').&lt;br /&gt;
&lt;br /&gt;
Модуль ''Superimpose sensor'' имеет следующие параметры:&lt;br /&gt;
* '''Reference input''' - базовое изображение, к параметрам которого будет приведено обрабатываемое изображение (здесь выбираем панхроматическое).&lt;br /&gt;
* '''The image to reproject''' - изображение, чьи параметры будут приведены к параметрам базового изображения (здесь выбираем мультиспектральное).&lt;br /&gt;
* '''Default elevation''' - средняя высота изображения над эллипсоидом.&lt;br /&gt;
* '''Spacing of the deformation field''' - интервал расстояния поля деформации (coarser deformation field).&lt;br /&gt;
* '''Interpolation''' - тип интерполяции.&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Superimpose sensor.png|thumb|center|x500px|Интерфейс модуля Superimpose sensor]]&lt;br /&gt;
&lt;br /&gt;
После трансформации мультиспектрального растра можно переходить непосредственно к паншарпенингу. Модуль [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Pansharpening(rsc)''] имеет следующие параметры:&lt;br /&gt;
* '''Input PAN image''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Input XS image''' - мультиспектральное изображение, приведённое к параметрам панхроматического.&lt;br /&gt;
* '''Algorithm''' - алгоритм для паншарпенинга (не изменяется, для использования других алгоритмов (LMVM и Bayesian) используйте соответсвующие модули ''Pansharpening(bayes) и Pansharpening(lvmv)'')&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp dialogue.png|thumb|center|x500px|Интерфейс модуля ''Pansharpening(rsc)'']]&lt;br /&gt;
&lt;br /&gt;
Давайте посмотрим на результат паншарпенинга при помощи OTB.&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x1000px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x1000px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
[[Файл:OTB pansharp result.png|center|x1000px|Мультиспектральный растр после паншарпенинга при помощи OTB]]&lt;br /&gt;
&lt;br /&gt;
===Создание модели===&lt;br /&gt;
Согласитесь, гораздо удобнее было бы обойтись без промежуточных операций и растров. Этого можно добиться путём [http://gis-lab.info/qa/sextante-qgis.html#.D0.9F.D0.BE.D1.81.D1.82.D1.80.D0.BE.D0.B8.D1.82.D0.B5.D0.BB.D1.8C_.D0.BC.D0.BE.D0.B4.D0.B5.D0.BB.D0.B5.D0.B9_.28Modeler.29 создания соответствующей модели для Processing Toolbox]. В качестве входных параметров модели следует использовать панхроматический и мультиспектральный растры. Последний сначала подготавливается при помощи ''Superimpose sensor'', а затем обрабатывается при помощи ''Pansharpening(rsc)''.&lt;br /&gt;
[[Файл:Model pansharp OTB.png|thumb|center|x550px|Модель паншарпенига]]&lt;br /&gt;
Интерфейс модели будет выглядеть следующим образом:&lt;br /&gt;
* '''High resolution panchrome raster''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Low resolution raster''' - мультиспектральное изображение низкого разрешения.&lt;br /&gt;
* '''pansharpened OTB''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp model dialogue.png|thumb|center|x500px|Интерфейс модели паншарпенига]]&lt;br /&gt;
&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:OTB_pansharp_result.png&amp;diff=21776</id>
		<title>Файл:OTB pansharp result.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:OTB_pansharp_result.png&amp;diff=21776"/>
		<updated>2015-04-04T12:51:25Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: растр после паншарпенинга в OTB&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;растр после паншарпенинга в OTB&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21775</id>
		<title>Паншарпенинг в QGIS с использованием Orfeo ToolBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%B0%D0%BD%D1%88%D0%B0%D1%80%D0%BF%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3_%D0%B2_QGIS_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_Orfeo_ToolBox&amp;diff=21775"/>
		<updated>2015-04-04T12:50:14Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: /* Паншарпенинг в OTB и QGIS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|В данной статье рассказывается о том как произвести паншарпенинг в QGIS посредством инструментария Orfeo ToolBox. }}&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
При работе с данными дистанционного зондирования Земли зачастую приходится решать задачу улучшения снимков с низким разрешением за счёт снимков с высоким. В QGIS нет встроенного инструмента паншарпенинга, но есть возможность подключения инструментов [https://www.orfeo-toolbox.org/ Orfeo ToolBox] (OTB), где они есть.&lt;br /&gt;
&lt;br /&gt;
==Немного теории==&lt;br /&gt;
На удивление сложно найти определение для слова &amp;quot;паншарпенинг&amp;quot;. Попробуем сформулировать его своими словами взяв за основу описание из книги ''Шовергердт Р.А. Дистанционное зондирование. Модели и методы обработки изображений - М.: Техносфера, 2010''. (с. 416):&lt;br /&gt;
&lt;br /&gt;
'''Паншарпенинг''' (от ''анг''. Panchromatic sharpening) - это процесс объединения изображений в пространственной области основная задача которого заключается в передаче высокочастотного содержания  изображения с высоким разрешением (обычно панхроматического) изображению с низким разрешением (обычно мультиспектральному).&lt;br /&gt;
&lt;br /&gt;
Одним из наиболее простых алгоритмов паншарпенинга является ''модуляция высоких частот''. В этом алгоритме для получения улучшенного изображения в канале ''PXS'' панхроматический снимок ''PAN'' попиксельно умножается на изображение с низким разрешением ''XS'', после чего полученный результат нормируется на низкочастотную компоненту панхроматического снимка ''PAN&amp;lt;sub&amp;gt;smooth&amp;lt;/sub&amp;gt;'' (панхроматический снимок, обработанный сглаживающим фильтром с окном, соответствующим размеру пикселя изображения с низким разрешением):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Formula OTB pansharpening.png|center]]&lt;br /&gt;
&lt;br /&gt;
где i и j - индексы пикселей.&lt;br /&gt;
&lt;br /&gt;
==Паншарпенинг в OTB и QGIS==&lt;br /&gt;
С программной точки зрения процесс паншарпенинга делится на две стадии: 1) подготовительную, во время которой разрешение и экстент мультиспектрального растра приводится в соответствие с экстентом и разрешением панхроматического растра (это необходимо для проведения операций растровой алгебры, вовлекающих оба растра); 2) непосредственно паншарпенинг.&lt;br /&gt;
===Использование утилиты OTB===&lt;br /&gt;
OTB по своей сути является набором консольных утилит и приложений. За паншарпенинг отвечает приложение [https://www.orfeo-toolbox.org//CookBook/CookBooksu36.html#x57-770004.2.2 otbcli_BundleToPerfectSensor]. Оно совмещает в себе обе стадии, описанные выше, и запускается следующей консольной командой: &lt;br /&gt;
  otbcli_BundleToPerfectSensor -inp pan_image -inxs xs_image -out output_image&lt;br /&gt;
где pan_image, xs_image и output_image соответсвенно - пути к панхроматическому, мультиспектральному и результирующему растрам. О дополнительных опциях читайте в документации.&lt;br /&gt;
===Запуск паншарпенинга из QGIS===&lt;br /&gt;
В QGIS инструменты OTB подключаются через модуль Processing. После установки OTB на компьютер зайдите в QGIS в настройки модуля Processing (''Processing -&amp;gt; Options -&amp;gt; Providers'') и активируйте интеграцию с OTB:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Enable OTB.png|center]]&lt;br /&gt;
&lt;br /&gt;
Теперь в ''Processing Toolbox'' у вас появится набор инструментов ''Orfeo Toolbox''. К сожалению, в инструментарий входят только консольные утилиты, но не приложения (то есть модуль otbcli_BundleToPerfectSensor не доступен из QGIS). Поэтому не спешите сразу запускать утилиты паншарпенинга (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; [https://www.orfeo-toolbox.org/CookBook/CookBooksu88.html#x119-4740005.4.9 Pansharpening]''), так как здесь требуется, чтобы все входные растры имели идентичный экстент и разрешение, то есть выполняется только вторая стадия. Чтобы выполнить первую - необходимо воспользоваться модулем [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Superimpose sensor''] (''Orfeo Toolbox -&amp;gt; Geomentry -&amp;gt; Superimpose sensor'').&lt;br /&gt;
&lt;br /&gt;
Модуль ''Superimpose sensor'' имеет следующие параметры:&lt;br /&gt;
* '''Reference input''' - базовое изображение, к параметрам которого будет приведено обрабатываемое изображение (здесь выбираем панхроматическое).&lt;br /&gt;
* '''The image to reproject''' - изображение, чьи параметры будут приведены к параметрам базового изображения (здесь выбираем мультиспектральное).&lt;br /&gt;
* '''Default elevation''' - средняя высота изображения над эллипсоидом.&lt;br /&gt;
* '''Spacing of the deformation field''' - интервал расстояния поля деформации (coarser deformation field).&lt;br /&gt;
* '''Interpolation''' - тип интерполяции.&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Superimpose sensor.png|thumb|center|x500px|Интерфейс модуля Superimpose sensor]]&lt;br /&gt;
&lt;br /&gt;
После трансформации мультиспектрального растра можно переходить непосредственно к паншарпенингу. Модуль [https://www.orfeo-toolbox.org/CookBook/CookBooksu91.html#x122-5170005.4.12 ''Pansharpening(rsc)''] имеет следующие параметры:&lt;br /&gt;
* '''Input PAN image''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Input XS image''' - мультиспектральное изображение, приведённое к параметрам панхроматического.&lt;br /&gt;
* '''Algorithm''' - алгоритм для паншарпенинга (не изменяется, для использования других алгоритмов (LMVM и Bayesian) используйте соответсвующие модули ''Pansharpening(bayes) и Pansharpening(lvmv)'')&lt;br /&gt;
* '''Available RAM''' - ограничение использования оперативной памяти.&lt;br /&gt;
* '''Output image''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp dialogue.png|thumb|center|x500px|Интерфейс модуля ''Pansharpening(rsc)'']]&lt;br /&gt;
&lt;br /&gt;
Давайте посмотрим на результат паншарпенинга при помощи OTB.&lt;br /&gt;
[[Файл:Initial panchrome.png|thumb|center|x1000px|Пахроматический растр с пространственным разрешением 0,5 м]]&lt;br /&gt;
[[Файл:Initial multi.png|thumb|center|x1000px|Мультиспектральный растр с пространственным разрешением 2,0 м]]&lt;br /&gt;
&lt;br /&gt;
===Создание модели===&lt;br /&gt;
Согласитесь, гораздо удобнее было бы обойтись без промежуточных операций и растров. Этого можно добиться путём [http://gis-lab.info/qa/sextante-qgis.html#.D0.9F.D0.BE.D1.81.D1.82.D1.80.D0.BE.D0.B8.D1.82.D0.B5.D0.BB.D1.8C_.D0.BC.D0.BE.D0.B4.D0.B5.D0.BB.D0.B5.D0.B9_.28Modeler.29 создания соответствующей модели для Processing Toolbox]. В качестве входных параметров модели следует использовать панхроматический и мультиспектральный растры. Последний сначала подготавливается при помощи ''Superimpose sensor'', а затем обрабатывается при помощи ''Pansharpening(rsc)''.&lt;br /&gt;
[[Файл:Model pansharp OTB.png|thumb|center|x550px|Модель паншарпенига]]&lt;br /&gt;
Интерфейс модели будет выглядеть следующим образом:&lt;br /&gt;
* '''High resolution panchrome raster''' - панхроматическое изображение высокого разрешения.&lt;br /&gt;
* '''Low resolution raster''' - мультиспектральное изображение низкого разрешения.&lt;br /&gt;
* '''pansharpened OTB''' - результирующий растр.&lt;br /&gt;
[[Файл:Pansharp model dialogue.png|thumb|center|x500px|Интерфейс модели паншарпенига]]&lt;br /&gt;
&lt;br /&gt;
==Ссылки по теме==&lt;br /&gt;
[http://gis-lab.info/qa/pan-sharpening-erdas.html Паншарпенинг в ERDAS]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/grass7-landsat8-processing.html Обработка и интерпретация данных Landsat 8 (OLI) средствами GRASS GIS 7]&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/qa/sextante-qgis.html Геопроцессинг с SEXTANTE для QGIS]&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Initial_multi.png&amp;diff=21774</id>
		<title>Файл:Initial multi.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Initial_multi.png&amp;diff=21774"/>
		<updated>2015-04-04T12:27:04Z</updated>

		<summary type="html">&lt;p&gt;SSSRebelious: изначальный панхроматический растр&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;изначальный панхроматический растр&lt;/div&gt;</summary>
		<author><name>SSSRebelious</name></author>
	</entry>
</feed>