创建 RGB 复合 SAR 图像

Creating an RGB composite SAR image

我在 Python 编程方面还很陌生,我需要你的帮助。在 posting 之前,我总是先研究我的问题。

我有 tiff 格式的 SAR 双偏振图像(2^16 灰度值)。在这个 tiff 图像中有两个波段。第一个波段 (HH_band) 是水平极化通道,第二个波段 (HV_band) 是垂直极化通道。我想创建一个 RGB 合成图像。为此,我需要按如下方式分层堆叠两个通道:

  1. 获得第一个波段 (HH_band)
  2. 获得第二个波段 (HV_band)
  3. 获取比率 (HH_band/HV_band)

我知道有很多人 post 有时与此类似(自然色的 RGB 合成图像)。我尝试使用 openCV 库中的 cv2.mergecv2.split 但没有用。我认为在 Python 中创建 SAR RGB 图像会相对容易(因为我已经看到一些关于创建 LANDSAT RGB 图像的 post)但我陷入了困境。

非常感谢任何帮助。

如果没有示例图像很难进行测试,但您应该能够使用 ImageMagick 在命令行中简单地执行此操作,它包含在大多数 Linux 发行版中并且是适用于 OSX 和 Windows。

命令如下所示:

convert HH.tif HV.tif \( -clone 0 -clone 1 -compose divide -composite \) \
   -combine -auto-level result.png

这是一种以编程方式完成乐队组合的可能方法:

import numpy as np

tif = io.imread('dual_polarization_image.tif')

band = {'HH': 0, 'HV': 1}

r = tif[:, :, band['HH']]
g = tif[:, :, band['HV']]

hh = r.astype(np.float64)
hv = g.astype(np.float64)

b = np.divide(hh, hv, out=np.zeros_like(hh), where=hv!=0)

rgb = np.dstack((r, g, b.astype(np.uint16)))

备注:

  • 可以通过简单地重新定义字典的值来处理 TIFF 图像中波段的不同排列 band
  • 在计算波段比之前,需要将数据转换为 np.float64
  • 我已经利用 universal functionswhere 选项来避免零除法警告。
  • 为了使合成成为可能,波段比率(蓝色通道)必须转换回与原始波段(红色和绿色通道)相同的类型(即 np.uint16)。