2016-11-08 63 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