Создание шейп-файла, показывающего следы растров?

33

У меня есть около 1000 спутниковых изображений в формате TIFF, и я хочу создать шейп-файл, который будет служить индексом для растров. Это что-то похожее на растровый каталог, но я не хочу создавать растровый каталог.

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

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

Мой образ Образец спутникового изображения


Результат, предоставленный инструментами, которые я изучил (например, растровый catlog, различные Arcscripts, пользовательский скрипт Python, приведенный в одном из ответов): Результат


Результат, который я хочу: введите описание изображения здесь

Девдатта Тенгше
источник
4
Кажется, что создание каталога растров, даже временно, было бы хорошим решением для создания следов. Вы можете создать каталог, который не управляется, который создает таблицу ссылок, но оставляет изображения в их расположении на сервере. Это легко и относительно быстро сделать пакетный импорт растров в каталог. После создания вы можете экспортировать элементы footprint в новый класс объектов и удалить каталог растров. Это может быть так же быстро, как и другие варианты.
Получите Пространство
2
Набор данных Mosaic также производит след изображения.
Рой
набор данных мозаики - это путь. Очень легко сделать
Брэд Несом
Итак, на последнем изображении пиксели находятся вне красной рамки NoData или 0? Если они равны 0, есть ли пиксели в нужной области, которые также имеют значение 0?
Чед Купер
1
Пиксели за красной рамкой являются узлами; Однако мои мультиспектральные данные имеют 0,0,0 как значения RGB для областей узлов. В обоих случаях нет пикселей со значением 0 внутри требуемой области.
Девдатта Тенгше

Ответы:

15

В QGIS есть плагин под названием Image Boundary . Это отличный инструмент. В этом инструменте есть опция «Действительные пиксели», которая пропускает черные края спутникового изображения, например.

Райан Гарнетт
источник
Этот плагин утверждает, что делает то, что хотел, но он не работает с изображением, с которым я экспериментировал. Я попробую с моими реальными данными завтра.
Девдатта Тенгше
Я обнаружил, что этот плагин очень хорошо работает с мультиспектральными данными, но иногда дает странные результаты с одноканальными панкроматическими изображениями.
Девдатта Тенгше
2
Я согласен с тем, что QGIS Image Boundary работает лучше всего, но есть ли инструмент для этого для векторных файлов, где нам не нужен «ограничивающий прямоугольник» или «след», а многоугольник, обозначающий, где существуют данные.
GeorgeC
Инструменты для создания границ изображения хороши, однако ссылка, которую вы предоставляете, - 404. Я считаю, что инструменты все еще доступны, если вы разрешите экспериментальные плагины в настройках плагина. Может быть, использовать эту ссылку ?: github.com/lmotta/imagefootprint_plugin
Аарон
Есть ли документация для использования Image Boundary?
Loonuh
9

Следующий код возьмет входной растр, получит его экстент и вставит этот экстент в класс объектов полигонов:

import arcpy

r = arcpy.Raster(in_raster)
point = arcpy.Point()
array = arcpy.Array()

corners = ["lowerLeft", "lowerRight", "upperRight", "upperLeft"]

cursor = arcpy.InsertCursor(fc)
feat = cursor.newRow()
for corner in corners:    
    point.X = getattr(r.extent, "%s" % corner).X
    point.Y = getattr(r.extent, "%s" % corner).Y
    array.add(point)
array.add(array.getObject(0))
print len(array)
polygon = arcpy.Polygon(array)
feat.shape = polygon
cursor.insertRow(feat)
array.removeAll()
del feat
del cursor

Вы можете запустить его в окне ArcMap Python, настроив in_rasterи fcсделав так:

>>> fc = 'r_extent'
>>> in_raster = 'CaliCoast10mNED_HavCurvedPCS'

где r_extentнаходится класс объектов полигонов. Затем просто скопируйте код и запустите его. Я получаю это:

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

Чед Купер
источник
1
Я должен использовать код выше , чтобы сделать то же самое для папки: gist.github.com/4162013
Джеб
7

Для этого вы можете использовать gdaltindex: http://www.gdal.org/gdaltindex.html

Однако он все равно будет создавать прямоугольники (например, 4 + 1 точки) в той же системе отсчета, что и изображения. Но мне интересно, действительно ли это проблема: насколько велики ваши изображения?

johanvdw
источник
Проблема с gdaltindex заключается в том, что он создает прямоугольный многоугольник для каждого изображения. Меня интересуют только ненулевые значения пикселей
Devdatta Tengshe
4

Я попробовал инструмент «Граница изображения» в QGIS, но он не работает с некоторыми растрами.

Другой вариант, который работал для меня: - 1. Преобразовать входной растр в один цифровой номер с помощью утилиты командной строки gdal_translate.

gdal_translate -co compress = lzw -b 1 -ot байт -cale 1 1 inp.tif out.tif

Это создаст растр со значениями 1 везде, где inp.tif имеет ненулевые значения.

  1. Затем в ArcMap вы можете использовать инструмент «Растр в полигон», чтобы получить полигон (шейп-файл).

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

user3294041
источник
3

Если вы заинтересованы в решении на основе сценариев, попробуйте команду gdal nearblack . Вы можете использовать флаг -white для извлечения данных, ограниченных пробелами. Вы можете полигонизировать выходные данные, чтобы генерировать непрямоугольный след растровых данных.

##run nearblack
shellcmds = "nearblack -white -o " + outpath + " " + inpath
os.system(shellcmds)

##run polygonize
shellcmds = "gdal_polygonize.py " + outpath + " -f" + """ "ESRI Shapefile"  """ + outpath2 + " nearblack"
os.system(shellcmds)
jsta
источник
1

Я считаю, что в мире ArcGIS вы можете добиться этого с помощью инструмента 3D Analyst \ Conversion \ From Raster \ Raster Domain .

Томек
источник
Он работает только на трехмерных данных и даже тогда не дает ожидаемых результатов. Не работает со спутниковыми изображениями вообще.
Девдатта Тенгше
Да, это правда. Я оставлю ответ для других, чтобы быть в курсе этого.
Томек,
0

В ArcGIS 3D Analyst есть инструмент под названием Raster Domain, который создает многоугольник или полилинию из частей данных набора растровых данных и игнорирует ячейки NoData. Отлично сработало для меня.

детеныш
источник
1
Добро пожаловать на наш сайт! Не могли бы вы объяснить, чем ваш ответ отличается от ответа Томека?
whuber
Растровый домен у меня сработал - спасибо за помощь!
Мерилоо
0

Вы можете создать каталог растров с назначенной пространственной привязкой, добавить каталог растров в ArcMap, а затем «Экспортировать след». Помните, что есть возможность создать каталог растров "UNMANAGED", чтобы вы не делали дубликат каждого набора растровых данных.

nhunsaker
источник