GEE入門篇|圖像處理(三):閾值處理、掩膜和重新映射圖像

閾值處理、掩膜和重新映射圖像

????????本章前一節討論了如何使用波段運算來操作圖像,?這些方法通過組合圖像內的波段來創建新的連續值。 本期內容使用邏輯運算符對波段或索引值進行分類,以創建分類圖像。

1.實現閾值

????????實現閾值使用數字(閾值)和邏輯運算符來幫助我們將圖像的可變性劃分為類別。 例如,回想一下我們的 NDVI 地圖。 大量植被的 NDVI 值接近 1,而非植被區域接近 0。如果我們想查看地圖上哪些區域有植被,我們可以使用閾值將每個像素中的 NDVI 值概括為“無植被” ”或“植被”。 可以肯定的是,這是一個很大的簡化,但可以幫助我們更好地理解地球表面的豐富變化。 例如,如果我們想要查看城市植被覆蓋的比例,這種類型的分類可能很有用。 讓我們創建美國華盛頓州西雅圖附近的 Sentinel-2 地圖,?在新腳本中輸入以下代碼(圖 1)。

// Create an NDVI image using Sentinel 2.
var seaPoint = ee.Geometry.Point(-122.2040, 47.6221);
var seaImage = ee.ImageCollection('COPERNICUS/S2')
.filterBounds(seaPoint).filterDate('2020-08-15', '2020-10-01').first();
var seaNDVI = seaImage.normalizedDifference(['B8', 'B4']);
// And map it.
Map.centerObject(seaPoint, 10);
var vegPalette = ['red', 'white', 'green'];
Map.addLayer(seaNDVI,{min: -1,max: 1,palette: vegPalette},'NDVI Seattle');

圖1 美國華盛頓州西雅圖上空 Sentinel-2 圖像的 NDVI 圖像?

????????檢查圖像,?我們可以看到,植被區域呈深綠色,無植被區域呈白色,水呈粉紅色。 如果我們使用 Inspector 查詢圖像,我們可以看到公園和其他森林地區的 NDVI 大約超過 0.5。 因此,將 NDVI 值大于 0.5 的區域定義為森林覆蓋區域,將低于該閾值的區域定義為非森林覆蓋區域是有意義的。 現在,讓我們將該值定義為閾值,并用它來確定植被區域的閾值。

// Implement a threshold.
var seaVeg = seaNDVI.gt(0.5);
// Map the threshold.
Map.addLayer(seaVeg,
{min: 0,max: 1,palette: ['white', 'green']
},
'Non-forest vs. Forest');

????????gt 方法來自布爾運算符系列,也就是說,gt 是一個在每個像素中執行測試的函數,如果測試結果為 true,則返回值 1,否則返回 0。 這里,對于圖像中的每個像素,它測試 NDVI 值是否大于 0.5。 當滿足此條件時,seaVeg 層將獲得值 1。當條件為 false 時,它將獲得值 0(圖 2)。使用 Inspector 工具探索這個新層。 如果單擊綠色位置,則 NDVI 應大于 0.5。 如果單擊白色像素,則 NDVI 值應等于或小于 0.5。該布爾族中的其他運算符包括小于 (lt)、小于或等于 (lte)、等于 (eq)、不等于 至 (neq),并且大于或等于 (gte) 及以上。?

圖2 美國華盛頓州西雅圖基于NDVI的閾值森林和非森林圖像

2.使用 .where 構建復雜的分類

????????對 NDVI 進行分類的二值圖非常有用,但是,在某些情況下,您可能希望將圖像拆分為兩個以上類別。 Earth Engine 提供了一個工具,即 where 方法,可以根據測試結果有條件地評估每個像素內的 true 或 false。 這類似于其他語言中常見的 if 語句。 然而,為了在 Earth Engine 編程時執行此邏輯,我們避免使用 JavaScript if 語句。 重要的是,JavaScript 如果命令不是在 Google 的服務器上計算的,并且在運行代碼時可能會產生嚴重的問題,實際上,服務器會嘗試將所有要執行的信息發送到您自己計算機的瀏覽器,而瀏覽器對于如此龐大的數據量來說是非常不足的。 任務。 相反,我們使用 where 子句來實現條件邏輯。
????????假設我們不只是將 NDVI 中的森林區域與非森林區域分開,而是希望將圖像分為可能的水域、非森林區域和森林區域。 我們可以使用 where 和閾值 -0.1 和 0.5。 我們將首先使用 ee.Image 創建圖像。 然后,我們裁剪新圖像,使其覆蓋與 seaNDVI 圖層相同的區域(圖 3)。

// Implement .where.
// Create a starting image with all values = 1.
var seaWhere = ee.Image(1)
// Use clip to constrain the size of the new image..clip(seaNDVI.geometry());
// Make all NDVI values less than -0.1 equal 0.
seaWhere = seaWhere.where(seaNDVI.lte(-0.1), 0);
// Make all NDVI values greater than 0.5 equal 2.
seaWhere = seaWhere.where(seaNDVI.gte(0.5), 2);
// Map our layer that has been divided into three classes.
Map.addLayer(seaWhere,
{min: 0,max: 2,palette: ['blue', 'white', 'green']
},
'Water, Non-forest, Forest');

????????關于這段代碼,有一些您以前可能沒有見過的有趣的事情需要注意。 首先,我們沒有為每個 where 調用定義一個新變量。 因此,我們可以執行許多 where 調用,而無需每次都創建新變量并需要跟蹤它們。 其次,當我們創建起始圖像時,我們將值設置為 1。這意味著我們可以輕松地分別使用一個 where 子句設置底部和頂部值。 最后,雖然我們在這里沒有這樣做,但我們可以使用 and 和 or 組合多個 where 子句。 例如,我們可以使用seaNDVI.gte(?0.1).and(seaNDVI.lt(0.5))來識別具有中等水平的NDVI的像素。?

圖3 美國華盛頓州西雅圖基于NDVI閾值的水、森林和非森林圖像

3.屏蔽圖像中的特定值

????????屏蔽圖像是一種將圖像的特定區域(被掩膜覆蓋的區域)從顯示或分析中刪除的技術。Earth Engine允許您查看當前掩碼和更新掩膜(圖4)。????????

// Implement masking.
// View the seaVeg layer's current mask.
Map.centerObject(seaPoint, 9);
Map.addLayer(seaVeg.mask(), {}, 'seaVeg Mask');

????????您可以使用Inspector來查看黑色區域被遮蓋,而白色區域的常量值為 1。這意味著數據值僅在白色區域內被映射并可用于分析。 現在假設我們只想在森林中顯示和進行分析地區。 讓我們從圖像中屏蔽掉非森林區域,首先,我們使用 equals (eq) 方法創建一個二進制掩膜。

// Create a binary mask of non-forest.
var vegMask = seaVeg.eq(1);

????????在制作掩膜時,您將想要查看和分析的值設置為大于 0 的數字。其想法是設置不需要的值以獲得 0 的值。具有 0 值的像素被遮蓋掉(實際上,它們 一旦我們使用 updateMask 方法將這些值添加到現有掩膜中,就根本不會出現在屏幕上。?

圖 4 我們之前創建的 seaVeg 層的現有掩模

// Update the seaVeg mask with the non-forest mask.
var maskedVeg = seaVeg.updateMask(vegMask);
// Map the updated Veg layer
Map.addLayer(maskedVeg,
{min: 0,max: 1,palette: ['green']
},
'Masked Forest Layer');

????????關閉所有其他層,您可以看到 maskedVeg 圖層現在如何遮蓋所有非森林區域(圖 5)。映射該圖層的更新蒙版,您可以看到這是為什么(圖 6)。?

圖 5 更新后的掩膜現在僅顯示森林區域,?非森林地區是被遮蔽和透明的

圖 6 更新后的掩模,非森林區域現在也被遮蓋(圖像的黑色區域)

// Map the updated mask
Map.addLayer(maskedVeg.mask(), {}, 'maskedVeg Mask');

3.重新映射圖像中的值

????????重新映射采用圖像中的特定值并為它們分配不同的值。這對于分類數據集特別有用,讓我們使用 remap 方法來更改 seaWhere 圖層的值。請注意,由于我們將中間值更改為最大,因此我們還需要調整調色板。

// Remap the values from the seaWhere layer.
var seaRemap = seaWhere.remap([0, 1, 2], // Existing values.
[9, 11, 10]); // Remapped values.
Map.addLayer(seaRemap,
{min: 9,max: 11,palette: ['blue', 'green', 'white']
},
'Remapped Values');

????????使用檢查器比較我們原始的seaWhere(顯示為Water、Non-Forest、Forest)和seaRemap(標記為“Remapped Values”)之間的值。 單擊森林區域,您應該看到重新映射值應為 10,而不是 2(圖 7)。?

?圖 7? 對于森林區域,重新映射的圖層的值為 10,而原始圖層的值為 2,您的Inspector中可能有更多圖層

【代碼鏈接】https://code.earthengine.google.com/496370d6752d56e39dbfe6ea10ac718b

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

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

相關文章

PXE網絡啟動實戰(第一篇 啟動WinPE)

免責聲明:文中有一些圖片來源自網絡,如有版權請通知我刪除,謝謝! 目錄 一、無盤站 二、PXE啟動 三、PXE啟動原理 四、啟動WinPE 1、服務器準備 2、客戶端 3、TFTP服務 4、WinPE選擇 5、具體操作: 預告 一、無盤站 網絡啟動最早用于無盤系統,那時的電腦只配備軟…

【python量化】多種Transformer模型用于股價預測(Autoformer, FEDformer和PatchTST等)_neuralforecast

寫在前面 在本文中,我們利用Nixtla的NeuralForecast框架,實現多種基于Transformer的時序預測模型,包括:Transformer, Informer, Autoformer, FEDformer和PatchTST模型,并且實現將它們應用于股票價格預測的簡單例子。 …

Libero集成開發環境中Identify應用與提高

Libero集成開發環境中Identify應用與提高 Identify的安裝

小米手機相冊閃退

環境: HyperOS 1.0 小米手機分身 處理步驟: 1)清理相冊緩存:設置->應用設置->相冊->清理數據->清除緩存(注意:別點清理全部數據;這個方法對我沒用)。 2)卸…

操作系統原理與實驗——實驗三優先級進程調度

實驗指南 運行環境: Dev c 算法思想: 本實驗是模擬進程調度中的優先級算法,在先來先服務算法的基礎上,只需對就緒隊列到達時間進行一次排序。第一個到達的進程首先進入CPU,將其從就緒隊列中出隊后。若此后隊首的進程的…

多租戶 TransmittableThreadLocal 線程安全問題

在一個多租戶項目中,用戶登錄時,會在自定義請求頭攔截器AsyncHandlerInterceptor將該用戶的userId,cstNo等用戶信息設置到TransmittableThreadLocal中,在后續代碼中使用.代碼如下: HeaderInterceptor 請求頭攔截器 public class HeaderInterceptor implements Asyn…

阿里云國際云服務器全局流量分析功能詳細介紹

進行全局流量分析時,內網DNS解析會作為一個整體模塊,其他模塊的邊緣虛框顏色會置灰,示意作為一個整體進行全局分析,左側Region可以展開/匯總,也可以單獨選中某個Region模塊進行分析(這時其他Region的流量線…

【Java面試題】Redis的用途

以下是一些常見的用途 1.緩存 Redis 可以用作緩存系統,,將頻繁訪問的數據存儲在內存中,從而加快數據訪問速度,減少對數據庫的訪問壓力。 2.消息隊列 Redis 支持發布/訂閱模式和列表數據結構,可以用作消息隊列系統的…

道可云元宇宙每日資訊|廈門首個元宇宙辦稅大廳啟用

道可云元宇宙每日簡報(2024年3月1日)訊,今日元宇宙新鮮事有: 中國軍號元宇宙發布會即將舉行 近日,解放軍新聞傳播中心中國軍號即將正式上線。中國軍號元宇宙發布會也將在“云端”與您見面。全方位展現解放軍新聞傳播…

加密與安全_探索簽名算法

文章目錄 概述應用常用數字簽名算法CodeDSA簽名ECDSA簽名小結 概述 在非對稱加密中,使用私鑰加密、公鑰解密確實是可行的,而且有著特定的應用場景,即數字簽名。 數字簽名的主要目的是確保消息的完整性、真實性和不可否認性。通過使用私鑰加…

云服務器購買教程

在購買云服務器之前,建議仔細評估自身需求和預算,并與多個云服務提供商進行比較,以確保選擇到最適合的解決方案。購買云服務器的具體步驟可能因所選云服務提供商而異。以下以實際操作的方式介紹如何購買一款云服務器。 云服務器購買常見問題…

【數倉】zookeeper軟件安裝及集群配置

相關文章 【數倉】基本概念、知識普及、核心技術【數倉】數據分層概念以及相關邏輯【數倉】Hadoop軟件安裝及使用(集群配置)【數倉】Hadoop集群配置常用參數說明 一、環境準備 準備3臺虛擬機 Hadoop131:192.168.56.131Hadoop132&#xff…

【Spring連載】使用Spring Data訪問 MongoDB----對象映射之基于類型的轉換器

【Spring連載】使用Spring Data訪問 MongoDB----對象映射之基于類型的轉換器 一、自定義轉換二、轉換器消歧(Disambiguation)三、基于類型的轉換器3.1 寫轉換3.2 讀轉換3.3 注冊轉換器 一、自定義轉換 下面的Spring Converter實現示例將String對象轉換為自定義Email值對象: R…

藍橋杯_定時器的綜合應用實例

一 工程 代碼 在單片機訓練平臺上,利用定時器T0,數碼管模塊和2個獨立按鍵(J5的2,3短接),設計一個秒表,具有清零,暫停,啟動功能。 顯示模式:分-秒-0.05秒&…

Linux進程——信號詳解(上)

文章目錄 信號入門生活角度的信號技術應用角度的信號用kill -l命令可以察看系統定義的信號列表信號處理常見方式概述 產生信號通過鍵盤進行信號的產生,ctrlc向前臺發送2號信號通過系統調用異常軟件條件 信號入門 生活角度的信號 你在網上買了很多件商品&#xff0…

前端面試練習24.3.2-3.3

HTMLCSS部分 一.說一說HTML的語義化 在我看來,它的語義化其實是為了便于機器來看的,當然,程序員在使用語義化標簽時也可以使得代碼更加易讀,對于用戶來說,這樣有利于構建良好的網頁結構,可以在優化用戶體…

vue3項目中如何一個vue組件中的一個div里面的圖片鋪滿整個屏幕樣式如何設置

在Vue 3項目中,要使一個div內的圖片鋪滿整個屏幕,你需要確保幾個關鍵點:div元素和圖片元素的樣式設置正確,以及確保它們能夠覆蓋整個視口(viewport)。以下是一個簡單的步驟和代碼示例,幫助你實現…

代碼隨想錄算法訓練營第四八天 | 買股票

目錄 只買賣一次可買賣多次 LeetCode 121. 買賣股票的最佳時機 LeetCode 122. 買賣股票的最佳時機II 只買賣一次 給定一個數組 prices ,它的第 i 個元素 prices[i] 表示一支給定股票第 i 天的價格。 你只能選擇 某一天 買入這只股票,并選擇在 未來的某…

瀏覽器輸入URL到頁面渲染經歷了哪些過程?

瀏覽器輸入URL到頁面渲染的過程可以分為以下幾個步驟: 解析URL:當用戶在瀏覽器的地址欄輸入URL后,瀏覽器會首先解析這個URL,判斷其是否合法。查找緩存:瀏覽器會查看自己的緩存,判斷是否有之前訪問過的這個U…

論文閱讀--Diffusion Models for Reinforcement Learning: A Survey

一、論文概述 本文主要內容是關于在強化學習中應用擴散模型的綜述。文章首先介紹了強化學習面臨的挑戰,以及擴散模型如何解決這些挑戰。接著介紹了擴散模型的基礎知識和在強化學習中的應用方法。然后討論了擴散模型在強化學習中的不同角色,并對其在多個…