光學衛星在洪水期間無法使用,因為,嗯,雲太多了。Sentinel-1 SAR 可以穿透雨和黑夜,但其資料有雜訊、複雜,且充滿「永久水域」,這些其實並非洪水。
我建置了一個端到端管線,將原始 SNAP GeoTIFF 轉換為乾淨、可操作的洪水地圖。以下是我解決 SAR 處理中三大痛點的方法。
1. 「填充」陷阱
SNAP 匯出的資料常包含零值邊界。如果不裁剪,您的直方圖會被數百萬個 0 值扭曲,破壞自動閾值設定。
解決方法:將 0.0 視為 NaN,轉換為 dB,並在任何分析前嚴格裁剪到有效資料範圍。
# 僅裁剪到有效資料
rows = np.where(~np.all(np.isnan(dB_full), axis=1))[0]
cols = np.where(~np.all(np.isnan(dB_full), axis=0))[0]
dB = dB_full[rows.min():rows.max()+1, cols.min():cols.max()+1]
進入全螢幕模式 退出全螢幕模式
2. 隔離新的洪水
簡單的 -17 dB 閾值會偵測到所有水域。要找出實際的洪水損害,必須扣除永久河流與湖泊。
解決方法:我使用 OSMnx 從 OpenStreetMap 取得永久水體,將其柵格化以符合 SAR 網格,然後從偵測遮罩中扣除。
# 從 OSM 取得永久水域
osm_water = ox.features_from_bbox(bbox=bbox, tags={"natural": "water"})
# 從偵測遮罩中扣除
flood_only = mask_clean & (~binary_dilation(permanent_water, iterations=2))
進入全螢幕模式 退出全螢幕模式
3. QGIS「黑色背景」錯誤
匯出透明 GeoTIFF 是一場惡夢。如果依賴標準 Alpha 通道,QGIS 常會將「透明」像素渲染為純黑色。
解決方法:我使用單頻段柵格搭配專用 NoData 值 (255),而非 RGBA。QGIS 會自動將 NoData 視為透明。
# 1 = 已淹水,255 = NoData (QGIS 中透明)
overlay = np.where(final_flood_raster == 1, 1, 255).astype(np.uint8)
進入全螢幕模式 退出全螢幕模式
結果
此管線輸出:
- 向量資料:帶有精確面積計算 (km²) 的 GeoJSON/Shapefile。
- 互動式地圖:帶有衛星/街道切換的 Folium HTML 地圖。
- QGIS 就緒柵格:匯入後立即可用的乾淨疊加層。
🚀 立即嘗試
完整筆記本為開源。它處理從斑點清理到最終視覺化的所有步驟。
🔗 [https://github.com/Adityas221b/QGIS-Flood]
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.