创建 RGB 复合 SAR 图像
Creating an RGB composite SAR image
我在 Python 编程方面还很陌生,我需要你的帮助。在 posting 之前,我总是先研究我的问题。
我有 tiff 格式的 SAR 双偏振图像(2^16 灰度值)。在这个 tiff 图像中有两个波段。第一个波段 (HH_band) 是水平极化通道,第二个波段 (HV_band) 是垂直极化通道。我想创建一个 RGB 合成图像。为此,我需要按如下方式分层堆叠两个通道:
- 获得第一个波段 (HH_band)
- 获得第二个波段 (HV_band)
- 获取比率 (HH_band/HV_band)
我知道有很多人 post 有时与此类似(自然色的 RGB 合成图像)。我尝试使用 openCV 库中的 cv2.merge
或 cv2.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 functions 的
where
选项来避免零除法警告。
- 为了使合成成为可能,波段比率(蓝色通道)必须转换回与原始波段(红色和绿色通道)相同的类型(即
np.uint16
)。
我在 Python 编程方面还很陌生,我需要你的帮助。在 posting 之前,我总是先研究我的问题。
我有 tiff 格式的 SAR 双偏振图像(2^16 灰度值)。在这个 tiff 图像中有两个波段。第一个波段 (HH_band) 是水平极化通道,第二个波段 (HV_band) 是垂直极化通道。我想创建一个 RGB 合成图像。为此,我需要按如下方式分层堆叠两个通道:
- 获得第一个波段 (HH_band)
- 获得第二个波段 (HV_band)
- 获取比率 (HH_band/HV_band)
我知道有很多人 post 有时与此类似(自然色的 RGB 合成图像)。我尝试使用 openCV 库中的 cv2.merge
或 cv2.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 functions 的
where
选项来避免零除法警告。 - 为了使合成成为可能,波段比率(蓝色通道)必须转换回与原始波段(红色和绿色通道)相同的类型(即
np.uint16
)。