延續上一講的雙域視角(巨孔隙/微孔隙),這一講的參數會分成兩組來看:定義「桶子形狀」的靜態參數(LL、DUL、SAT、bulk density),跟決定「桶子怎麼漏水」的動態參數(SWCON、𝐾𝑠𝑎𝑡)。 3.1 靜態參數:桶子的三條水位線 (1) LL(Lower Limit,凋萎點下限) 這是植物完全無法吸取的水分下限,操作型定義通常對應到 −1.5 MPa(15 bar)的基質勢。在微孔隙/巨孔隙框架下,LL 描述的完全是微孔隙域——這個含水量下,水被吸附在極細孔隙的表面,基質勢極負,只存在於微孔隙的毛細跟吸附作用力範圍內,巨孔隙在這個含水量早就空了。 DSSAT 通常用 LL(而不是永久凋萎點 wilting point)這個名稱,是因為它其實是「特定作物根系可達到的下限」,理論上依作物種類、根系穿透力略有差異,但實務上常直接借用土壤的物理凋萎點。 (2) DUL(Drained Upper Limit,排水上限) 這是整套 bucket 理論裡最關鍵的一條線——它同時也是上一講講的「巨孔隙排水」的觸發點:𝑆𝑊> 𝐷𝑈𝐿 SW>DUL 才會啟動𝐷𝑅𝐴𝐼𝑁𝐿 方程。 物理意義上,DUL 是「重力排水已經(近似)結束、只剩微孔隙毛細力撐著水」的那個含水量,通常對應基質勢在 −10 到 −33 kPa 之間(視質地而定,砂土接近 −10 kPa,黏土接近 −33 kPa)。用雙域語言講:DUL 就是巨孔隙域清空、微孔隙域仍飽滿的那條分界線。這也是為什麼 DUL 不是一個絕對的物理常數,而是跟排水時間、量測方式高度相關的操作型定義——現場量測通常是「飽和後排水1–2天」的含水量,這個「1–2天」本身就是承認巨孔隙排水需要一點時間,但排水速率遠快於微孔隙。 (3) SAT(Saturation,飽和含水量) 這是巨孔隙+微孔隙全部孔隙都灌滿水時的含水量,約等於總孔隙度 𝜙 。注意上一講 Emerman 論文提到的關鍵假設——「巨孔隙域跟微孔隙域必須有相同的飽和含水量才能讓雙域模型的擬合站得住腳」。這句話反過來提醒你:SAT 這個看似簡單的參數,其實隱含了「兩個域共享同一個總孔隙空間」的假設,在真實土壤中不一定成立(比如強烈結構化的黏土,巨孔隙可能只佔總孔隙度很小一部分)。 (4) Bulk...
跟著Earth lab的內容逐步練習
基本概念
通常在表達波段的時候,都是選用波段的中間值表示,例如820-830 nm,我們就會說是825 nm。

高光譜和多光譜的差異在於波段的數量,從GIS geography可以找到以下的解釋
- Multispectral: 3-10 wider bands.
- Hyperspectral: Hundreds of narrow bands
資料出處:
https://gisgeography.com/multispectral-vs-hyperspectral-imagery-explained/
https://gisgeography.com/multispectral-vs-hyperspectral-imagery-explained/
使用Python 操作多光譜
rasterio.open() 函數用來打開多光譜影像
stack() 函數可用來引入多光譜資料
earthpy的plot_rgb() 函數用來指定波段
stack() 函數可用來引入多光譜資料
earthpy的plot_rgb() 函數用來指定波段
開始吧
首先載入所有必要的元件
import os
import matplotlib.pyplot as plt
import numpy as np
import rasterio as rio
import geopandas as gpd
import earthpy as et
import earthpy.plot as ep需要額外安裝的套件包括rasterio, geopandas, earthypy,可以從anaconda power shell prompt 安裝。
接著設定路徑
path = "D:\Python\multispectral"
os.chdir(path)
plt.rcParams['figure.figsize'] = (10, 10)
plt.rcParams['axes.titlesize'] = 20
接著我們載入影像,使用rasterio(縮寫為rio)的open function,把它取名為msi,這裡是multispectral image 的意思,把圖檔命名為pine0808
pine_path = os.path.join("pineapple","pineapple0808.tif")
with rio.open(pine_path) as msi:
pine0808 = msi.read()
Matplotlib
Matplotlib的imshow函數可以進行繪圖,我們使用matplotlib.pyplot(縮寫為plt) 進行繪圖,imshow這一個函數只能畫出單一圖層,我們就選擇藍光波段來畫,在圖後面加上[0]。
fig, ax = plt.subplots()
ax.imshow(pine0808[0])
ax.set_title("Pineapple Multispectral image \n Band 1 Blue")
plt.show()Python 的計數是從0開始,我們就可以依此類推:
[0] - Blue
[1] - Green
[2] - Red
[3] - Red Edge
[4] - Near IR
Earthpy
earthpy 函數可以畫單一圖層,也可以進行RGB 的套疊
先用ep.plot_bands()來畫單一波段的圖層
ep.plot_bands(pine0808[0],
title="Pineapple Multispectral image \n Band 1 Blue",
cbar=True,vmin=100,vmax=2000)
plt.show()
上面的vmax和vmin可以調整顯示的波段值ep.plot_bands()把所有的波段畫出來,話說不知道為什麼,正射影像會多一個波段的資訊,但是那實際是空的。
titles = ["Blue Band", "Green Band", "Red Band","Red Edge", "Near Infrared (NIR)","plot"]
ep.plot_bands(pine0808,
figsize=(12, 5),
cols=3,
title=titles,
cbar=False,
vmax=15000)
plt.show()
ep.plot_rgb(),可以選擇波段,畫出具有紅、藍、綠三個顏色,我們先嘗試使用原本的顏色來畫圖
ep.plot_rgb(pine0808,
rgb=[2, 1, 0],
title="RGB Composite image - pineapple",
figsize=(15, 8),
stretch=True)
plt.show()
畫出來的圖比qgis自然許多,但是圖片偏暗,應該和各個波段的訊號有關。
另一個在植物光譜上面很有意思的方法,是用紅外光取代紅光的波段。將上面指令稍作修改rgb=[4, 1, 0]
參考網站
https://www.earthdatascience.org/courses/use-data-open-source-python/multispectral-remote-sensing/intro-multispectral-data/
https://github.com/earthlab/earthpy
https://earthpy.readthedocs.io/en/latest/gallery_vignettes/index.html





留言
張貼留言