Как совместить два изображения, создать легенду и сохранить CRS в Python (Matplotlib)? - PullRequest
0 голосов
/ 25 апреля 2019

Я использую Python для работы с растровыми данными (изображение) и у меня возникли некоторые проблемы.Я надеюсь, что кто-то может дать мне несколько советов.

У меня есть одно изображение RGB и одно изображение в градациях серого, которые имеют одинаковые линии и строки (пиксели) и имеют одинаковую систему координат координат (CRS). RGB-изображение Изображение в градациях серого

Сначала мне нужно перевести изображение в градациях серого в цветное и создать автоматическую легенду для цветного изображения.

Во-вторых, мне нужно перекрыть два изображения вместе, где RGB находится внизу, а серое - сверху.Было бы лучше, если бы два изображения могли перекрываться с их CRS, в то время как я просто перекрывал два изображения на основе одинакового количества строк и строк, которые у них есть.

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

Я нашел несколько способов справиться с первым и вторым этапом в Matploblib в виде кода ниже, тогда как я не думаю, что использовалправильный путь, потому что я получил два предупреждения при его использовании.Хотя я могу получить изображение третьего шага, но на изображении не было CRS и он был пересчитан. Полученное изображение, которое я хочу

import numpy as np
import gdal
import matplotlib.pyplot as plt

dataset2 = gdal.Open('/Users/SPH_1_RGB.tif')
band_1 = dataset2.GetRasterBand(1).ReadAsArray()
band_2 = dataset2.GetRasterBand(2).ReadAsArray()
band_3 = dataset2.GetRasterBand(3).ReadAsArray()
array_RGB = np.dstack((band_1, band_2, band_3))
fig = plt.figure(1)
ax1 = fig.add_axes([0.0, 0.0, 0.89, 1.0])
ax1.imshow(array_RGB)
plt.xticks(())
plt.yticks(())

# [left, bottom, width, height]
ax2 = fig.add_axes([0.0, 0.0, 0.89, 1.0])
ax2.set_title('Chlorophyll_a')
dataset = gdal.Open('/Users/SPH_1_Grayscale.tif')
band = dataset.GetRasterBand(1)
array0 = band.ReadAsArray(0, 0, band.XSize, band.YSize)
array_Gray = np.ma.masked_where(array0 == 0.0, array0)
im = ax2.imshow(array_Gray, interpolation='nearest', cmap='jet')

cbaxes = fig.add_axes([0.9, 0.25, 0.02, 0.5])
cbar = plt.colorbar(im, orientation="vertical", cax=cbaxes)
plt.xticks(())
plt.yticks(())
plt.savefig('/Users/SPH_1_Overlap.jpg', dpi=300, bbox_inches='tight')

Я получил два предупреждения:

  1. Добавление осей с использованием тех же аргументов, что и у предыдущих осей, в настоящее время повторно использует более ранниепример.В будущей версии новый экземпляр всегда будет создаваться и возвращаться.Между тем, это предупреждение можно подавить и обеспечить дальнейшее поведение, передав уникальную метку каждому экземпляру осей.«Добавление осей с использованием тех же аргументов, что и у предыдущих осей»
  2. UserWarning: вместо этого используйте метод set_ticks () colorbar.warnings.warn («Вместо этого используйте метод colorbar set_ticks ().»)

Мои вопросы:

  1. Есть ли лучший способ выполнить эту работу и какизбежать двух предупреждений?
  2. Как сохранить изображение в Matplotlib без передискретизации и сохранить CRS.
...