2016-11-08 65 views
3

我在Python编程方面很新,我需要你的帮助。在发布之前,我总是先对我的问题进行调查。创建一个RGB复合SAR图像

我有SAR双偏振图像(2^16灰度值)在tiff格式。在这个tiff图像中有两个乐队。第一频带(HH_band)是水平极化频道,第二频带(HV_band)是垂直极化频道。我想创建一个RGB复合图像。为了做到这一点,我需要层堆叠两个通道如下:

  1. 得到第一带(HH_band)
  2. 获得第二频带(HV_band)
  3. 得到的比率(HH_band/HV_band)

我知道有很多人发布类似于此的时间(自然色的RGB合成图像)。我试图从openCV库使用cv2.mergecv2.split,但没有奏效。我认为在Python中创建SAR RGB图像相对容易(正如我已经看过一些关于创建LANDSAT的RGB图像的文章),但我陷入了我的情况。

我非常感谢任何帮助。

+1

我的答案是否解决了您的问题?如果是这样,请考虑接受它作为您的答案 - 通过点击投票计数旁边的空心绿色勾号/复选标记。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 –

回答

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

备注:

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

太棒了。很好的答案。谢谢 – Johny

1

如果没有示例图像很难测试,但您应该可以在命令行中简单地使用ImageMagick,它包含在大多数Linux发行版中,可用于OSX和Windows。

的命令看起来像:

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

谢谢你的建议。我很感激 – Johny