У меня есть изображение GeoTIFF, которое мне нужно сделать размытым, применив фильтр сглаживания. Само изображение содержит метаданные, которые необходимо сохранить. Он имеет битовую глубину 8 и использует таблицу цветов с 256 32-битными значениями RGBA для поиска цвета для каждого пикселя, но для того, чтобы полученное изображение выглядело гладким, ему, вероятно, придется использовать битовую глубину 24 или 32 и нет таблицы цветов, в качестве альтернативы используйте сжатие JPEG. Что еще может усложнить это, так это то, что размер изображения составляет 23 899 x 18 330 пикселей, что почти в пять раз больше, чем самый большой файл, который PIL хочет открыть по умолчанию.
Как создать размытую версию этого изображения в Python 3?
Я также пытался использовать PIL , чтобы просто открыть и снова сохранить его:
from PIL import Image
Image.MAX_IMAGE_PIXELS = 1000000000
im = Image.open(file_in)
im.save(file_out)
Этот код не дает сбоя, и я получаю новый файл .tif, который приблизительно равен оригинальному файлу, но когда я пытаюсь открыть его в средстве просмотра фотографий Windows, приложение говорит, что оно повреждено, и он не может быть повторно открыт PIL.
Я также пытался использовать GDAL. Когда я пытаюсь этот код , я получаю выходное изображение размером 835 МБ, которое соответствует несжатому изображению с битовой глубиной 16 (это также то, что метаданные файла говорят, когда я щелкаю правой кнопкой мыши) на нем и выбираю «Свойства» - я использую Windows 10). Однако получающееся изображение является монохромным и очень темным, и цвета выглядят так, как будто они перемешаны, что заставляет меня поверить, что код, который я пытаюсь интерпретировать, представляет значения пикселей как значения интенсивности, а не как ключи таблицы.
Итак, чтобы заставить этот метод работать, мне нужно выяснить, как применить таблицу цветов (которая является своего рода контейнером для кортежей типа osgeo.gdal.ColorTable
) к растровой полосе (какой бы ни была растровая полоса) , который является массивом с формой (18330, 23899)
, чтобы получить новый массив с формой (18330, 23899, 4)
или (4, 18330, 23899)
(не знаю, какая форма правильная), вставьте его обратно в загруженное изображение и удалите таблицу цветов (или создайте новую с теми же метаданными) и, наконец, сохраните измененное изображение с включенным сжатием (так что я приближаюсь к исходному размеру файла - 11,9 МБ), а не к 835 МБ, который является размером файла, который я Получить сейчас). Как я могу это сделать?