Вычисление границы изображения / следа спутниковых изображений с использованием инструментов с открытым исходным кодом?

10

Мне нужно создать контуры многоугольника для нескольких однослойных растровых изображений, а не экстент / ограничивающий прямоугольник, а область без значений узлов, как показано здесь: Создание шейп- файла, показывающего следы растров? ,

В ответе на вопрос выше был упомянут плагин Image Boundary , однако я не нахожу его в Lisboa QGIS 1.8.0, работающей на Ubuntu.

Инструмент все еще доступен?

Если нет, то есть ли способ сделать это, используя инструменты с открытым исходным кодом, gdal, R, QGIS, GRASS или аналогичные, не с ArcMap?

SPIB
источник
Связанный: gis.stackexchange.com/questions/9074/…
товарищ Че

Ответы:

4

Вы можете добавить старый репозиторий, где есть плагины в Официальном репозитории.

http://pyqgis.org/repo/contributed

Плагин границы изображения имеет опцию для вычисления действительного пикселя, но изображение должно быть полной сценой, как CBERS или Landsat, где этот процесс вычисляет первые 4 угла. Изображение должно иметь узлы с нулевым значением для области без изображения (сканируется спутниковым датчиком).

Автор изображения Граница

lmotta
источник
Привет @lmotta, спасибо за ссылку на репозиторий. Все изображения, над которыми я сейчас работаю, являются изображениями SAR со значениями NA (или -3,4e + 38 в соответствии с инструментом значений в QGIS). Если бы можно было добавить значение nodata вручную в инструменте, вместо того, чтобы использовать ZERO в качестве единственной опции, было бы здорово, иначе я мог бы сначала запустить скрипт на R, чтобы дать моим значениям NA новые значения, равные нулю. Это отличный инструмент, спасибо!
Спайб
Есть ли новый репозиторий для Image Boundary? Ссылка, которую вы предоставляете: 404. Может быть, следующая ?: github.com/lmotta/imagefootprint_plugin
Aaron
Есть ли где-нибудь, что мы можем найти документацию для Границы изображения?
Loonuh
11

Я наконец нашел способ сделать это:

шаг 1: gdalwarp -dstnodata 0 -dstalpha -of GTiff foo1 foo2

Это делает две важные вещи: он устанавливает целевые значения No Data (вне границы) в 0 и создает альфа-полосу.

шаг 2: gdal_polygonize.py foo2 -b 2 -f "ESRI Shapefile" foo3

На втором шаге используется альфа-полоса (полоса 2), созданная на шаге 1, и создается шейп-файл из этой полосы.

Затем это можно легко написать в bash-скрипте, если у вас много изображений, для создания точных контуров.  

SPIB
источник
Замечательно, что это решение не зависит от каких-либо плагинов или программного обеспечения. Создание растровых следов, чувствительных к NoData, является одной из тех задач ГИС, которая не так проста, как кажется.
Чарли Парр
Когда я использую этот метод, я получаю шейп-файл, полный полигонов, которые, как я полагаю, представляют разные цвета, сгруппированные вместе. Как я могу избежать этого и в результате всего несколько полигонов представляют да-данные?
Loonuh
5

Я использовал gdal_translateв соответствии с предложением проекта GDAL.

gdal_translate -b mask -of vrt -a_nodata 0 test.tif test.vrt
# Note the  -a_nodata 0 doesn't seem to work when the mask is input, so do another pass
gdal_translate -b 1 -of vrt -a_nodata 0 test.vrt test2.vrt
gdal_polygonize.py -q  -8 test2.vrt -b 1 -f "ESRI Shapefile" testdata.shp

введите описание изображения здесь

user2856
источник
1
В версии магистрали GDAL теперь можно использовать gdal_polygonize непосредственно для исходного изображения osgeo-org.1560.x6.nabble.com/… . Однако для удаления полигонов без данных требуется некоторая очистка.
user30184
4

Плагин Image Boundary также не работал для меня, поэтому я использовал тот же подход с GDAL. Тем не менее, это сработало только для меня после изменения первого шага на:

шаг 1 : gdalwarp -srcnodata 0 -dstalpha -of GTiff foo1 foo2

Я работаю с группой Landsat8 (где нет данных = 0) и при использовании -dstnodataфункции я получаю:

Band1 с не данных = «Нет данных»
Band2 (альфа - диапазон) = «255» для всей сцены / степени

тогда как с -srcnodataфункцией я получаю:

Band1 с не данными = «Нет данных»
Band2 (альфа - группа) без каких - либо данных = «нет данных» и действительных данных = «255» , который затем позволяет извлекать только полигон для действительных данных.

Я не мог полностью понять причину этого поведения (как вычисляется альфа?), Но я надеюсь, что это может помочь другим, сталкивающимся с той же проблемой.

dorakiara
источник