Сглаживание / реинтерполяция растра с помощью GDAL?

15

Коротко:
я хочу изменить разрешение растра и сгладить серую рампу, как показано на изображениях ниже. Предпочтение отдается использованию GDAL, PIL или Numpy.

Описание:
Я делаю точки в растры с выходным разрешением 20 метров с помощью высокопроизводительной геостатистической библиотеки . Я не хочу менять выходное разрешение, потому что время интерполяции увеличивается в геометрической прогрессии.
С этим разрешением выходное изображение выглядит некрасиво (с пикселями и псевдонимами). Я не знаю, является ли это концептуально правильным, но я хочу, чтобы изображение было более плавным, как в примере ниже. Это что-то вроде «реинтерполяции» изображения в лучшее разрешение. Я использую python, поэтому я предпочитаю GDAL, Python Imaging Library или Numpy. Ответ может быть теоретическим, например, указание имени алгоритма или концепции такого рода операций.

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

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

РЕДАКТИРОВАТЬ результаты с gdalwarp кубического сплайна:
введите описание изображения здесь

Pablo
источник
Я не получаю столь же хороших результатов, как изображение «после», которое вы опубликовали с помощью gdalwarp. Можете ли вы опубликовать точную команду, которую вы использовали?
Грант Хамфрис

Ответы:

7

1) Сложный путь: с небольшим количеством кодирования (относительно) легко реализовать билинейную интерполяцию для достижения достойной повторной дискретизации.

2) Простой способ: использовать GDAL, как описано в предыдущем посте GISSE , но в обратном порядке (уменьшение размера пикселя).

WolfOdrade
источник
2
Это сработало. Лучшие результаты были с кубическим сплайном. Я разместил результаты выше. Благодарю.
Пабло
5

Используйте GDALReprojectImage , который предоставляется в Python:

from osgeo import gdal
help(gdal.ReprojectImage)

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

gdal.ReprojectImage(src_ds, dst_ds, None, None, gdal.GRA_Bilinear)

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

Майк Т
источник
+1. Я не уверен, что его "кубический" метод. Если это кубический сплайн, он, вероятно, будет более гладким, чем билинейный; но если это кубическая свертка, она будет менее гладкой, чем билинейная. Кубический сплайн был бы идеальным.
whuber
1
@whuber true, есть два варианта «кубических» алгоритмов : GRA_CubicSpline(попробуйте сначала) против GRA_Cubic(свертка).
Майк Т
0

Чтобы сгладить вариации, вам нужен фильтр нижних частот. Вы можете написать свой собственный, используя GDAL, или есть один, использующий GRASS. Я не пробовал, но вот руководство http://wiki.awf.forst.uni-goettingen.de/wiki/index.php/Exercise_31

Возможно, вы захотите сначала сэмплировать свой растр перед применением фильтра нижних частот, чтобы получить лучшее разрешение на выходе.

spatialthoughts
источник
1
Я не думаю, что ОП хочет сгладить вариации: в противном случае зачем начинать кригинг в первую очередь? Все его преимущества будут потеряны. Вместо этого, как показывают изображения, вопрос требует процедуры плавной повторной выборки для создания версии уже полученных результатов с более высоким разрешением (что является разумным и эффективным способом ускорения кригинга).
whuber
-1

Вы можете использовать фильтр ранга / медианы с радиусом = 5, то есть размер ядра = 11 (для каждого канала rgb).

Йылдырым
источник