遙感圖像亮度地形糾正
地表光照模型
由於地形的影響, 及其與太陽的相對位置等不同,成像時各個像元的光照條件不盡相同, 同一時刻不同地形條件下的地表所接收到的光輻射強度也不盡相同。常常要求由根據遙感觀測成像時的光照條件, 模擬出光照亮度圖,把明暗不同的部分糾正過來。下面是一幅受到地形影響的 Landsat 影像,山峰的南側受到遮擋,亮度變暗了。
地表光照模型反映了地面接收太陽輻射量的多少, 可以使用 Lambert 餘弦定理來描述。假定太陽天頂角為 Z,入射角為Z (入射光與地面法線的夾角), 則光照係數 IC,又稱相對太陽入射角為:
式中, Z 為天頂角; S 為坡度角;φz 為太陽方位角; φs 為坡向角。其中, 地形坡度和坡向可以由地面高程數據(DEM)計算, 太陽天頂角及方位角可從遙感圖像的元數據中獲取。
用餘弦模型就可以反映出糾正前和糾正後亮度的關係:
其中 LH 是分波段的糾正後的水平面亮,LI 是糾正前地形條件下的亮度。餘弦模型假設了 Lambertian 面,即散射光是由四面八方均勻射入。
如下圖所示:
還有一種 C 模型,我在 2013 年的一篇論文中 [1] 看到,如下式:
GEE 計算代碼
C 模型不要求Lambertian 面假設,實現起來也很簡單。高程數據可以從 GEE 的資料中讀取並作坡度變化:
編碼部分就是直接調用 GEE 的 API函數。但因為數據不在本地,需要把波段計算的部分都包起來,便於 GEE 使用虛擬類在伺服器端操作數據。
var terrain = ee.call(Terrain, ee.Image(srtm90_v4));nvar solar_zenith = ee.Number(90).subtract(image.get(SUN_ELEVATION));nvar solar_azimuth = ee.Number(image.get(SUN_AZIMUTH));nnvar degree2radian = 0.01745nvar solar_zenith_radians = solar_zenith.multiply(degree2radian)nvar slope_radians = terrain.select([slope]).multiply(degree2radian)nvar aspect = terrain.select([aspect]);nMap.addLayer(slope_radians)nn//slope part of the illumination conditionnvar cosZ = solar_zenith_radians.cos();nvar cosS = slope_radians.cos();nvar slope_illumination = slope_radians.multiply(cosZ)nn//aspect part of the illumination conditionnvar sinZ = solar_zenith_radians.sin();nvar sinS = slope_radians.sin();nvar azimuth_diff_radians = aspect.subtract(solar_azimuth.multiply(degree2radian))//.expression("((b(aspect)-" + solar_azimuth + ")*0.01745")nnvar cosPhi = azimuth_diff_radians.cos();nvar aspect_illumination = cosPhi.multiply(sinS).multiply(sinZ)nn//illumination conditionnvar ic = slope_illumination.add(aspect_illumination)nn//apply the cosine correctionnvar cos_output = image.expression("((image*cosZ)/ic) + offsets", {n image: image.select(B4, B3, B2),n cosZ: cosZ,n ic: ic,n offsets: [770, 0, -1230]n});n
糾正後的結果,南坡的亮度增強了。
參考資料
- Tan, B., Masek, J.G., Wolfe, R., Gao, F., Huang, C., Vermote, E.F., Sexton, J.O. and Ederer, G., 2013. Improved forest change detection with terrain illumination corrected Landsat images. Remote Sensing of Environment, 136, pp.469-483.
推薦閱讀:
※1.29【OpenCV圖像處理】輪廓邊界框
※[171118] PyQt5 滑動條控制 Canny 邊緣閾值並繪製 OpenCV 圖像
※數字圖像處理專業如何快速入門?謝謝。