创建RGB复合SAR图像

时间:2016-11-08 20:22:37

标签: python opencv numpy image-processing tiff

我是Python编程的新手,我需要你的帮助。在发布之前,我总是首先研究我的问题。

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

  1. 获得第一个乐队(HH_band)
  2. 获得第二个频段(HV_band)
  3. 获得比率(HH_band / HV_band)
  4. 我知道有很多人发布了类似于此的内容(自然色的RGB合成图像)。我尝试使用openCV库中的cv2.mergecv2.split但是没有用。我认为在Python中创建一个SAR RGB图像相对容易(因为我已经看过一些关于创建LANDSAT RGB图像的文章),但我遇到了困难。

    我非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

以下是以编程方式完成波段合成的可能方法:

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)))

说明:

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

答案 1 :(得分:1)

没有样本图像很难测试,但您应该只需在命令行中使用 ImageMagick 执行此操作,该命令行包含在大多数Linux发行版中,可用于OSX和Windows

命令如下:

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