在遙感影像處理領域,非監督分類憑借其無需人工標注樣本的優勢,成為快速了解地物分布的得力助手。它能自動依據像素光譜特征的相似性完成聚類,這種“無師自通”的特性,讓地理空間分析變得更加高效。
今天,我們就來深入探討如何在Google Earth Engine(GEE)中實現4種經典的非監督分類算法。從基礎原理到具體代碼實現,再到結果分析,全方位為你講解,文中案例均可直接運行,參數也能靈活調整,非常適合新手入門學習。
一、GEE非監督分類基礎認知
1. 非監督分類的核心概念
非監督分類是一種無標簽的機器學習方法,它的核心原理是讓算法自主去發現影像中像素之間的內在聯系。簡單來說,就是把具有相似光譜特征的像素歸為同一類別,而這個過程不需要我們提前告訴計算機“這是耕地”“那是建筑”。
2. 為什么選擇GEE進行非監督分類?
GEE作為一個強大的云平臺,為非監督分類提供了諸多便利:
- 擁有海量的遙感影像數據,無需我們自己費力去收集和預處理數據。
- 集成了多種成熟的聚類算法,省去了我們自己編寫復雜算法的麻煩。
- 具備強大的計算能力,能快速處理大規模的遙感影像數據。
3. 非監督分類的核心優勢
- 節省時間成本:不需要人工標注大量樣本,大大減少了前期準備工作的時間。
- 快速探索未知區域:對于我們不熟悉的區域,能快速了解其地物分布規律。
- 適合大規模處理:可以高效地對大范圍的遙感影像進行自動化分類。
二、實戰案例:舊金山灣區土地覆蓋分類
本次實戰案例以舊金山灣區為研究區域,采用Landsat 8影像作為數據源,通過4種不同的非監督分類算法,對該區域的土地覆蓋情況進行分類,并對比分析它們的效果。
1. 數據準備詳情
研究區域:舊金山灣區,其地理坐標范圍為(-122.6, 37.4, -122.2, 37.8)。這個區域地物類型豐富,包含了城市建筑、植被、水體、裸地等多種類型,非常適合作為分類案例的研究區域。
數據源:選用Landsat 8 TOA反射率數據,時間范圍為2023年6月1日至2023年9月1日。選擇這個時間段的數據,是因為此時段該區域天氣相對晴朗,云量較少,能保證影像的質量。
特征波段選擇:選取了B4(紅波段)、B3(綠波段)、B2(藍波段)、B5(近紅外波段)、B6(短波紅外1波段)、B7(短波紅外2波段)這6個波段作為分類特征。這些波段能較好地反映不同地物的光譜特性,比如近紅外波段對植被的反射率較高,能很好地區分植被和其他地物。
樣本量確定:生成5000個隨機采樣點作為訓練樣本。樣本量的多少會影響分類結果的準確性,過少的樣本可能無法充分反映地物的特征,過多的樣本則會增加計算量,5000個樣本在保證分類效果的同時,也能兼顧計算效率。
// 定義研究區域
var region = ee.Geometry.Rectangle({coords: [-122.6, 37.4, -122.2, 37.8],proj: 'EPSG:4326'
});// 加載影像并篩選
var image = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA').filterBounds(region) // 篩選出研究區域內的影像.filterDate('2023-06-01', '2023-09-01') // 篩選出指定時間范圍內的影像.sort('CLOUD_COVER') // 按照云量排序.first() // 選取云量最少的影像.clip(region); // 裁剪出研究區域// 選擇特征波段
var bands = ['B4', 'B3', 'B2', 'B5', 'B6', 'B7'];
var input = image.select(bands);// 生成訓練樣本
var training = input.sample({region: region, // 采樣區域scale: 30, // 采樣尺度,與Landsat 8影像分辨率一致numPixels: 5000, // 采樣數量seed: 42, // 隨機種子,保證結果可重復tileScale: 4 // 提高采樣效率
});
2. 4種算法實現與深度對比
(1)K-Means算法
算法原理:K-Means算法是一種經典的聚類算法,它首先隨機選擇k個初始聚類中心,然后將每個樣本分配到距離最近的聚類中心所在的類別中,接著重新計算每個類別的聚類中心,重復這個過程,直到聚類中心不再發生明顯變化。
特點:作為經典的聚類算法,它需要我們預先設定聚類數量,計算速度相對較快。
核心參數詳解:
nClusters
:聚類數,這個參數需要我們根據研究目標和地物類型的復雜程度來設定。init
:初始化方式,選擇1表示使用k-means++優化初始化,這種方式能使初始聚類中心的分布更加合理,提高分類效果。seed
:隨機種子,保證每次運行結果的一致性。
var kmeans = ee.Clusterer.wekaKMeans({nClusters: 4, // 預設4類,可根據實際情況調整init: 1, // 采用k-means++優化初始化seed: 42
}).train(training, bands); // 用訓練樣本和特征波段訓練聚類器
var kmeansResult = input.cluster(kmeans); // 對輸入影像進行分類
分類效果分析:分類結果的邊界清晰,能較好地將不同地物區分開來。非常適合已知目標類別數量的場景,比如在進行固定類型的土地利用分類時,我們可以根據經驗設定合適的聚類數,得到理想的分類結果。
(2)X-Means算法
算法原理:X-Means算法是K-Means算法的擴展,它在K-Means的基礎上,通過貝葉斯信息準則(BIC)來自動確定最優的聚類數量。它先從較少的聚類數開始,然后不斷嘗試分裂聚類,判斷分裂后的結果是否更優,直到找到最優的聚類數量。
特點:作為K-Means的擴展算法,它最大的優勢是可以自動確定最優聚類數量,不需要我們手動去嘗試和調整。
核心參數詳解:
minClusters
:最小聚類數,設定聚類數量的下限。maxClusters
:最大聚類數,設定聚類數量的上限。useKD
:是否啟用KDTree加速計算,啟用后能提高算法處理高維數據的效率。seed
:隨機種子,保證結果的可重復性。
var xmeans = ee.Clusterer.wekaXMeans({minClusters: 2, // 最小聚類數為2maxClusters: 6, // 最大聚類數為6useKD: true, // 啟用KDTree加速計算seed: 42
}).train(training, bands); // 訓練聚類器
var xmeansResult = input.cluster(xmeans); // 進行分類
分類效果分析:由于能自動確定聚類數量,它的分類結果能更好地適應數據的分布特征。適合進行探索性分析,當我們對研究區域的地物類型不太了解時,使用X-Means算法可以快速得到較為合理的分類結果。
(3)級聯K-Means算法
算法原理:級聯K-Means算法通過多輪迭代和多次重啟來尋找全局最優解。它在每一輪迭代中都會嘗試不同的初始聚類中心,通過多次重啟,避免算法陷入局部最優解,從而提高分類結果的穩定性和準確性。
特點:該算法通過多輪迭代優化,多次重啟尋找全局最優解,得到的結果穩定性高,抗噪聲能力強。
核心參數詳解:
minClusters
:最小聚類數。maxClusters
:最大聚類數。manual
:是否手動選擇聚類數,設為false表示自動選擇。restarts
:重啟次數,重啟次數越多,找到最優解的可能性越大,但計算時間也會相應增加。init
:是否使用優化的初始化方式。distanceFunction
:距離函數,這里選擇歐幾里得距離。
var cascadeKmeans = ee.Clusterer.wekaCascadeKMeans({minClusters: 2,maxClusters: 6,manual: false, // 自動選擇聚類數restarts: 10, // 10次重啟優化,可根據計算資源調整init: true,distanceFunction: "Euclidean" // 使用歐幾里得距離
}).train(training, bands); // 訓練聚類器
var cascadeResult = input.cluster(cascadeKmeans); // 進行分類
分類效果分析:分類結果的穩定性高,對于影像中存在的噪聲點有較強的抵抗能力。適合對分類精度要求較高的場景,比如在進行土地利用變化監測時,需要分類結果具有較高的一致性和準確性,級聯K-Means算法就能滿足這樣的需求。
(4)Cobweb算法
算法原理:Cobweb算法是一種增量式聚類算法,它通過構建分類層次結構來對數據進行聚類。在處理數據的過程中,它會不斷地調整分類結構,當新的數據進來時,會判斷其與現有類別之間的關系,決定是將其歸入現有類別,還是創建新的類別。
特點:作為增量式聚類算法,它可以生成層次化的分類結構,能很好地反映類別之間的層次關系。
核心參數詳解:
acuity
:敏銳度,值越小,算法對數據中的細微差異越敏感,越容易區分不同的類別。cutoff
:新類創建閾值,值越小,越容易創建新的類別。seed
:隨機種子,保證結果的可重復性。
var cobweb = ee.Clusterer.wekaCobweb({acuity: 0.1, // 降低閾值,提高對差異的敏感度cutoff: 0.0001, // 降低新類創建門檻,使算法更容易生成新類seed: 42
}).train(training, bands); // 訓練聚類器
var cobwebResult = input.cluster(cobweb); // 進行分類
分類效果分析:分類結果呈現出類別間的層次關系,能很好地反映地物的嵌套結構。比如在分析城市-郊區-農村的梯度變化時,Cobweb算法可以清晰地展示出這種層次關系,幫助我們更好地理解地物的空間分布規律。
3. 結果可視化代碼詳解
// 真彩色影像顯示
Map.addLayer(image, {bands: ['B4', 'B3', 'B2'], min: 0, max: 0.3}, '真彩色影像');
// 這里設置了紅、綠、藍三個波段,以及顯示的最小值和最大值,使影像能以真彩色顯示,方便我們直觀地觀察研究區域的地物情況// 分類結果添加到地圖
Map.addLayer(kmeansResult, {min:0, max:3, palette: ['#0000FF','#00FF00','#FF0000','#FFFF00']}, 'K-Means分類');
// 為K-Means分類結果設置了顏色 palette,每個顏色代表一個類別,min和max對應聚類數的范圍Map.addLayer(xmeansResult, {min:0, max:5, palette: ['#FF5733','#33FF57','#3357FF','#F3FF33','#FF33F3','#33FFF3']}, 'X-Means分類');
Map.addLayer(cascadeResult, {min:0, max:5, palette: ['#8B4513','#228B22','#87CEFA','#FFD700','#FF6347','#9370DB']}, '級聯K-Means分類');
Map.addLayer(cobwebResult, {min:0, max:11, palette: ['#FFA500','#008000','#000080','#800080','#00FFFF','#FF0000','#808080','#FFFF00','#00FF00','#0000FF','#FF00FF','#C0C0C0']}, 'Cobweb分類');
結果展示:
真彩色影像
K-means
X-mean
級聯K-means
CobWeb
三、完整代碼獲取與詳細使用指南
1. 代碼使用步驟
- 打開GEE編輯器:在瀏覽器中輸入code.earthengine.google.com,進入GEE代碼編輯器頁面。
- 復制代碼:將本文提供的完整代碼復制到編輯器中。
- 運行代碼:點擊編輯器上方的“Run”按鈕,等待代碼運行完成,地圖會加載出分類結果。
- 查看結果:在地圖窗口可以切換不同的分類結果圖層進行查看,控制臺會顯示聚類數量統計等信息,幫助我們評估分類效果。
- 導出結果:如果需要保存分類結果,在左側的“Tasks”面板中找到對應的導出任務,點擊“Run”按鈕,按照提示設置導出參數,即可將結果導出到Google Drive中。
2. 參數調節詳細建議
(以下為基礎參考值,實際應用中需根據具體數據特征進行調整)
- 樣本量:一般建議在3000-10000個像素之間。當研究區域的數據量較大時,可以適當減小樣本量,以提高計算速度;當數據量較小時,可增加樣本量,保證分類的準確性。
- 聚類數量:對于土地利用分類,建議設置5-10類;如果需要進行更精細的分類,比如區分不同種類的植被,可以適當增加聚類數量。
- Cobweb參數:
acuity
的取值范圍建議在0.1-1之間,cutoff
的取值范圍建議在0.0001-0.01之間。這兩個參數值越小,分類結果越精細,但也可能會導致過度分類。 - 波段選擇:除了本文選用的波段外,還可以添加NDVI(歸一化植被指數)、NDBI(歸一化建筑指數)等指數作為特征波段,這些指數能增強不同地物之間的差異,提高分類效果。
四、注意事項與常見問題解決
1. 研究區域更換
如果要將案例應用到其他區域,需要修改region
的坐標值。可以通過GEE編輯器中的繪圖工具,繪制新的研究區域,然后獲取其坐標范圍進行修改。
2. 數據源更換
當使用不同傳感器的數據(如Sentinel-2)時,需要對應調整bands
參數。不同傳感器的波段設置不同,要選擇適合分類的波段。例如,Sentinel-2的波段更多,分辨率更高,可以根據研究需求選擇合適的波段。
3. 分類結果解讀
聚類結果的顏色只是為了區分不同的類別,并不代表實際的地物類型。在解讀分類結果時,需要結合實地調研數據、高分辨率影像等進行驗證,才能準確判斷每個類別對應的地物類型。
4. 分類效果提升
在復雜的場景中,僅依靠光譜特征可能無法得到理想的分類結果。此時,可以考慮增加紋理特征(如均值、方差等)或多時相數據。紋理特征能反映地物的空間結構信息,多時相數據能反映地物的動態變化,這些都能幫助提高分類的精度。
通過對這4種算法的分類結果進行對比,我們可以根據不同的研究目標選擇合適的算法:如果追求分類效率,K-Means算法是不錯的選擇;如果需要探索未知區域的地物分布,X-Means算法能自動確定聚類數量,非常方便;如果對分類結果的穩定性要求較高,級聯K-Means算法更合適;如果要分析地物的層次關系,Cobweb算法能滿足需求。
在實際應用中,建議先通過非監督分類對研究區域的數據規律進行探索,了解地物的大致分布情況,然后結合少量的樣本進行監督分類優化,這樣既能提高分析效率,又能保證分類精度。希望本文能幫助你更好地掌握GEE中的非監督分類方法,為你的地理空間分析工作提供有力支持。
若您認為本文的技術方法對研究或實踐有參考價值,歡迎關注并推薦給更多從事遙感應用的同行,以便共同交流完善相關技術體系。