Мне интересно, есть ли способ найти минимальный ограничивающий экстент для растра с определенным значением. Я вырезал растр из глобального изображения, и экстент установлен как глобальный экстент с большой областью NoData. Я хотел бы удалить область NoData из этого растра и сохранить только область, содержащую пиксели определенного значения. Как я могу это сделать?
Вот мой пример: я хотел бы извлечь значение = 1 (синяя область) и использовать экстент синей области, а не весь мир для дальнейшей обработки.
arcgis-desktop
raster
extents
Видели
источник
источник
Ответы:
Если я правильно понял вопрос, это звучит так, как будто вы хотите знать минимальную ограничивающую рамку значений, которые не равны нулю. Возможно, вы можете преобразовать растр в полигоны, выбрать интересующие вас полигоны и затем преобразовать их обратно в растр. Затем вы можете посмотреть значения свойств, которые должны дать вам минимальный ограничивающий прямоугольник.
источник
Хитрость заключается в том, чтобы вычислить пределы данных, которые имеют значения. Пожалуй, самый быстрый, самый естественный и самый общий способ их получения - это зональные сводки: при использовании всех ячеек, не относящихся к NoData, для зоны минимальные и максимальные значения сетки, содержащие координаты X и Y, обеспечат полную протяженность.
ESRI постоянно меняет способы выполнения этих расчетов; например, встроенные выражения для координатных сеток были удалены с помощью ArcGIS 8 и, похоже, не вернулись. Просто для удовольствия, вот набор быстрых, простых вычислений, которые сделают работу, несмотря ни на что.
Преобразуйте сетку в одну зону , приравняв ее к себе, как в
"Моя сетка" == "Моя сетка"
Создайте сетку индекса столбца, накапливая поток постоянной сеткой со значением 1. (Индексы начнутся с 0.) При желании умножьте это на размер ячейки и добавьте x-координату начала координат, чтобы получить сетку x-координат " Х "(показано ниже).
Аналогично, создайте сетку индекса строки ( а затем сетку с координатами Y "Y") путем накопления потока постоянной сеткой со значением 64.
Используйте сетку зоны из шага (1), чтобы вычислить минимальные и максимальные значения зон «X» и «Y» : теперь у вас есть желаемый экстент.
(Экстент, как показано в двух таблицах зональной статистики, изображен прямоугольным контуром на этом рисунке. Сетка «I» - это сетка зоны, полученная на шаге (1).)
Чтобы пойти дальше, вам нужно будет извлечь эти четыре числа из их выходных таблиц и использовать их для ограничения степени анализа. Копирование исходной сетки с ограниченным экстентом анализа завершает задачу.
источник
Вот версия метода @whubers для ArcGIS 10.1+ в виде набора инструментов Python (.pyt).
источник
Я разработал решение на основе gdal и numpy. Он разбивает растровую матрицу на строки и столбцы и удаляет любую пустую строку / столбец. В этой реализации «пустой» - это что-то меньше 1, и учитываются только одноканальные растры.
(Когда я пишу, я понимаю, что этот подход к сканирующей линии подходит только для изображений с «воротниками» нодаты. Если ваши данные представляют собой острова в морях нулей, пространство между островами также будет уменьшено, сведя все вместе и полностью испортив географическую привязку .)
Бизнес-части (нуждаются в уточнении, не будут работать как есть):
В полном сценарии:
Скрипт находится в моем тайнике с кодом на Github, если ссылка идет 404-й разом; эти папки созрели для некоторой реорганизации.
источник
MemoryError
Source raster (geo units): Origin (top left): 2519950.0001220703, 5520150.00012207 Pixel size (x,-y): 100.0, -100.0 Columns, rows : 42000, 43200 Traceback (most recent call last): File "D:/11202067_COACCH/local_checkout/crop_raster.py", line 72, in <module> cropped_raster, cropped_transform = main(src_raster) File "D:/11202067_COACCH/local_checkout/crop_raster.py", line 22, in main data = np.array(raster.ReadAsArray()) MemoryError
Несмотря на всю свою аналитическую мощь, в ArcGIS отсутствуют базовые растровые манипуляции, которые можно найти в традиционных настольных редакторах изображений, таких как GIMP . Ожидается, что вы хотите использовать тот же экстент анализа для выходного растра, что и входной, если вы не переопределите параметр среды Выходной экстент вручную . Так как это именно то, что вы хотите найти, а не установить, ArcGIS делает все возможное.
Несмотря на все мои усилия и не прибегая к программированию, я не мог найти способа получить размер желаемого подмножества изображения (без преобразования растра в вектор, которое в вычислительном отношении расточительно).
Вместо этого я использовал GIMP, чтобы выделить синюю область, используя инструмент выбора по цвету, а затем инвертировал выделение, ударил «Удалить», чтобы удалить остальные пиксели, снова инвертировал выделение, обрезал изображение до выделенного и, наконец, экспортировал его обратно в PNG. GIMP сохранил его как изображение глубиной 1 бит. Результат ниже:
Конечно, поскольку в вашем образце не хватает компонента пространственной привязки, а GIMP не знает пространственно, выходное изображение примерно так же полезно, как и ввод данных в качестве образца. Вам нужно будет привязать его, чтобы он был полезен при пространственном анализе.
источник
Вот одна из возможностей использования SAGA GIS: http://permalink.gmane.org/gmane.comp.gis.gdal.devel/33021
Другая возможность, использующая только инструменты ArcGIS GP, состоит в том, чтобы создать TIN из вашего растра, используя растр в TIN , вычислить его границу, используя домен TIN , и обрезать свой растр по границе (или его конверт, используя Feature Envelope to Polygon ).
источник