GEE實戰 | 4種非監督分類算法深度解析,附可直接運行的完整代碼

在遙感影像處理領域,非監督分類憑借其無需人工標注樣本的優勢,成為快速了解地物分布的得力助手。它能自動依據像素光譜特征的相似性完成聚類,這種“無師自通”的特性,讓地理空間分析變得更加高效。

今天,我們就來深入探討如何在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. 代碼使用步驟

  1. 打開GEE編輯器:在瀏覽器中輸入code.earthengine.google.com,進入GEE代碼編輯器頁面。
  2. 復制代碼:將本文提供的完整代碼復制到編輯器中。
  3. 運行代碼:點擊編輯器上方的“Run”按鈕,等待代碼運行完成,地圖會加載出分類結果。
  4. 查看結果:在地圖窗口可以切換不同的分類結果圖層進行查看,控制臺會顯示聚類數量統計等信息,幫助我們評估分類效果。
  5. 導出結果:如果需要保存分類結果,在左側的“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中的非監督分類方法,為你的地理空間分析工作提供有力支持。

若您認為本文的技術方法對研究或實踐有參考價值,歡迎關注并推薦給更多從事遙感應用的同行,以便共同交流完善相關技術體系。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91947.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91947.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91947.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于落霞歸雁思維框架的軟件需求管理實踐指南

作者:落霞歸雁 日期:2025-08-02 摘要 在 VUCA 時代,需求變更成本已占軟件總成本的 40% 以上。本文將“落霞歸雁”思維框架(觀察現象 → 找規律 → 應用規律 → 實踐驗證)引入需求工程全生命周期,通過 4 個階…

企業級AI Agent構建實踐:從理論到落地的完整指南

🚀 引言 隨著人工智能技術的快速發展,AI應用正在從簡單的工具轉變為智能伙伴。企業級AI Agent作為這一變革的核心載體,正在重新定義我們與軟件系統的交互方式。本文將深入探討如何構建一個真正意義上的企業級AI Agent系統。 🎯 …

電商項目_性能優化_限流-降級-熔斷

針對電商系統,在遇到大流量時,必須要考慮如何保障系統的穩定運行,常用的手段:限流,降級,拒絕服務。 一、限流 限流算法:計數器、滑動窗口、漏銅算法、令牌桶算法。 限流的方案 前端限流接入…

javaweb開發之Servlet筆記

第五章 Servlet 一 Servlet簡介 1.1 動態資源和靜態資源 靜態資源 無需在程序運行時通過代碼運行生成的資源,在程序運行之前就寫好的資源. 例如:html css js img ,音頻文件和視頻文件 動態資源 需要在程序運行時通過代碼運行生成的資源,在程序運行之前無法確定的數據,運行時…

sqli-labs靶場less26/a

less261.我們打開這一關來看一下,他提示我們空格和其他一些什么都被過濾了2.我們來嘗試繞過,按照之前的做法,可以看到閉合方式為單引號,并且過濾了--與#3.我們來嘗試繞過一下,發現可以以下的方式繞過,空格用&#xff0…

從Docker銜接到導入黑馬商城以及前端登錄顯示用戶或密碼錯誤的相關總結(個人理解,僅供參考)

目錄 一、前言 二、從Docker銜接到導入黑馬點評 三、談談端口映射及我的前端登錄顯示用戶或密碼錯誤 四、總結 一、前言 在學習24黑馬SpringCloud課程時,說實話Docker那一塊再到導入黑馬商城是真的有點折磨,個人感覺老師水平還是很強的,但…

控制建模matlab練習10:滯后補償器

此練習主要是:關于滯后補償器。 ①滯后補償器作用; ②不同滯后補償器的效果; 一、為什么使用滯后補償器 滯后補償器:主要用于改善系統的穩態誤差;滯后補償器設計思路:同時為系統增加一個極點和零點&#xf…

力扣-108.將有序數組轉換為二叉搜索樹

題目鏈接 108.將有序數組轉換為二叉搜索樹 class Solution {public TreeNode Traverse(int[] nums, int begin, int end) {if (end < begin)return null;int mid (begin end) / 2;TreeNode root new TreeNode(nums[mid]);root.left Traverse(nums, begin, mid - 1);ro…

`npm error code CERT_HAS_EXPIRED‘ 問題

問題: npm error code CERT_HAS_EXPIRED npm error errno CERT_HAS_EXPIRED npm error request to https://r2.cnpmjs.org/string_decoder/-/string_decoder-1.3.0.tgz failed, reason: certificate has expired npm error A complete log of this run can be found in: /home…

數據結構---概念、數據與數據之間的關系(邏輯結構、物理結構)、基本功能、數據結構內容、單向鏈表(概念、對象、應用)

數據結構在數據結構部分&#xff0c;研究數據在內存中如何存儲。數據存儲的形式有兩種&#xff1a;變量和數組&#xff08;數據結構的順序表&#xff09;。一、什么是數據結構&#xff1f;數據類型被用來組織和存儲數據。程序設計 數據結構 算法二、數據與數據之間的關系1、邏…

CMS框架漏洞

一、WordPress姿勢一1.下載vulhub靶場cd /vulhub/wordpress/pwnscriptum docker-compose up -d2.我們進入后臺&#xff0c;網址拼接/wp-admin/3.我們進入WP的模板寫入一句話木馬后門并訪問其文件即可GetShell4然后我們拼接以下路徑/wp-content/themes/twentyfifteen/404.php&am…

控制建模matlab練習07:比例積分控制-③PI控制器的應用

此練習主要是比例積分控制&#xff0c;包括三部分&#xff1a; ①系統建模&#xff1b; ②PI控制器&#xff1b; ③PI控制器的應用&#xff1b; 以下是&#xff0c;第③部分&#xff1a;PI控制器的應用。 一、比例積分控制的應用模型 1、整個系統是如圖&#xff0c;這樣一個單位…

【MySQL】MySQL 中的數據排序是怎么實現的?

MySQL 數據排序實現機制詳解 MySQL 中的數據排序主要通過 ORDER BY 子句實現&#xff0c;其內部實現涉及多個優化技術和算法選擇。讓我們深入探討 MySQL 排序的完整實現機制。 一、排序基礎&#xff1a;ORDER BY 子句 基本語法&#xff1a; SELECT columns FROM table [WHERE c…

JVM-垃圾回收器與內存分配策略詳解

1.如何判斷對象已死1.1 對象引用的4種類型&#xff08;強軟弱虛&#xff09;1.1.1 強引用特點&#xff1a;最常見的引用類型&#xff0c;只要強引用存在&#xff0c;對象絕不會被回收Object strongObj new Object(); // 強引用注意&#xff1a;集合類型&#xff0c;如果對象不…

新手向:簡易Flask/Django個人博客

從零開始搭建個人博客:Flask與Django雙版本指南 本文將詳細講解如何使用兩種主流Python框架構建功能完整的個人博客系統。我們將從零開始,分別使用輕量級的Flask框架和功能全面的Django框架實現以下核心功能: 用戶認證系統: 用戶注冊/登錄/注銷功能 密碼加密存儲 會話管理…

使用 Trea cn 設計 爬蟲程序 so esay

使用 Trea cn 設計 爬蟲程序 so esay 在現代數據驅動的時代&#xff0c;網絡爬蟲已成為數據采集的重要工具。傳統的爬蟲開發往往需要處理復雜的HTTP請求、HTML解析、URL處理等技術細節。而借助 Trea CN 這樣的AI輔助開發工具&#xff0c;我們可以更高效地構建功能完善的爬蟲程…

MySQL Redo Log

MySQL Redo Log MySQL主從復制&#xff1a;https://blog.csdn.net/a18792721831/article/details/146117935 MySQL Binlog&#xff1a;https://blog.csdn.net/a18792721831/article/details/146606305 MySQL General Log&#xff1a;https://blog.csdn.net/a18792721831/artic…

項目實戰1:Rsync + Sersync 實現文件實時同步

項目實戰&#xff1a;Rsync Sersync 實現文件實時同步 客戶端中數據發生變化&#xff0c;同步到server端&#xff08;備份服務器&#xff09;。 Rsync&#xff1a;負責數據同步&#xff0c;部署在server端。 Sersync&#xff1a;負責監控數據目錄變化&#xff0c;并調用rsync進…

Spring Boot 全 YAML 配置 Liquibase 教程

一、項目初始化配置 1.1 創建 Spring Boot 項目 通過 Spring Initializr 生成基礎項目&#xff0c;配置如下&#xff1a; ??Project??: Maven??Language??: Java??Spring Boot??: 3.5.3&#xff08;最新穩定版&#xff09;??Project Metadata??: Group: com…

STM32-驅動OLED顯示屏使用SPI(軟件模擬時序)實現

本章概述思維導圖&#xff1a;SPI通信協議SPI通信協議介紹SPI通訊&#xff1a;高速的、串行通訊、全雙工、同步、總線協議&#xff1b;&#xff08;通過片選信號選中設備&#xff09;&#xff1b;注&#xff1a;SPI通訊通過片選信號選中設備&#xff0c;串口通訊通過端口號選中…