Python將大量遙感數(shù)據(jù)的值縮放指定倍數(shù)的方法(推薦)
本文介紹基于Python中的gdal
模塊,批量讀取大量多波段遙感影像文件,分別對各波段數(shù)據(jù)加以數(shù)值處理,并將所得處理后數(shù)據(jù)保存為新的遙感影像文件的方法。
首先,看一下本文的具體需求。我們現(xiàn)有一個文件夾,其中含有大量.tif
格式的遙感影像文件;其中,這些遙感影像文件均含有4
個波段,每1
個波段都表示其各自的反射率數(shù)值。而對于這些遙感影像文件,有的文件其各波段數(shù)值已經(jīng)處于0
至1
的區(qū)間內(也就是反射率數(shù)據(jù)的正常數(shù)值區(qū)間),而有的文件其各波段數(shù)值則是還沒有乘上縮放系數(shù)的(在本文中,縮放系數(shù)是0.0001
)。
例如,如下圖所示,即為文件夾中某一景遙感影像??梢钥吹狡涓鞑ǘ螖?shù)值都是大于1
的,這是因為其數(shù)值都是還沒有乘上縮放系數(shù)的,即是真實的反射率數(shù)值的10000
倍。
我們希望實現(xiàn)的是,對于這些遙感影像中,還沒有乘上縮放系數(shù)0.0001
的遙感影像,將其像元值乘上這個縮放系數(shù);而對于已經(jīng)縮放過(也就是像元數(shù)值已經(jīng)落在0
至1
區(qū)間內)的遙感影像,則不加以任何處理。最后,將經(jīng)過上述操作后的所有圖像(無論是否執(zhí)行縮放)均保存至指定的輸出結果文件夾中。
本文所需代碼如下。
# -*- coding: utf-8 -*- """ Created on Thu Apr 18 12:37:22 2024 @author: fkxxgis """ import os from osgeo import gdal original_folder = r"E:\04_Reconstruction\99_MODIS\new_data\GF_Original" output_folder = r"E:\04_Reconstruction\99_MODIS\new_data\GF_Rec" for filename in os.listdir(original_folder): if filename.endswith('.tif'): dataset = gdal.Open(os.path.join(original_folder, filename), gdal.GA_ReadOnly) width = dataset.RasterXSize height = dataset.RasterYSize band_count = dataset.RasterCount driver = gdal.GetDriverByName('GTiff') output_dataset = driver.Create(os.path.join(output_folder, "New_" + filename), width, height, band_count, gdal.GDT_Float32) for band_index in range(1, band_count + 1): band = dataset.GetRasterBand(band_index) data = band.ReadAsArray() if band_index == 1: data = data.astype(float) data[data > 1] /= 10000 elif band_index == 2: data = data.astype(float) data[data > 1] /= 10000 elif band_index == 3: data = data.astype(float) data[data > 1] /= 10000 elif band_index == 4: data = data.astype(float) data[data > 1] /= 10000 output_band = output_dataset.GetRasterBand(band_index) output_band.WriteArray(data) output_band.FlushCache() output_dataset.SetGeoTransform(dataset.GetGeoTransform()) output_dataset.SetProjection(dataset.GetProjection()) dataset = None output_dataset = None
首先,我們使用os.listdir()
函數(shù)遍歷原始數(shù)據(jù)文件夾中的所有文件,并使用if
語句篩選出以.tif
結尾的文件;隨后,使用gdal.Open()
函數(shù)打開原始影像數(shù)據(jù)集,并指定只讀模式;接下來,使用dataset.RasterXSize
和dataset.RasterYSize
獲取影像數(shù)據(jù)集的寬度和高度。
隨后,使用dataset.RasterCount
獲取波段數(shù)量,并使用gdal.GetDriverByName()
創(chuàng)建輸出數(shù)據(jù)集的驅動程序對象;緊接著,通過Create()
方法創(chuàng)建輸出數(shù)據(jù)集,并指定輸出文件的路徑、寬度、高度、波段數(shù)量和數(shù)據(jù)類型(gdal.GDT_Float32
表示浮點型)。
接下來,就可以開始使用循環(huán),對每個文件的每個波段進行處理。首先,使用dataset.GetRasterBand()
方法獲取當前波段對象,然后使用band.ReadAsArray()
將波段數(shù)據(jù)讀取為數(shù)組;根據(jù)波段索引的不同,對波段數(shù)據(jù)進行處理。在本文中,對4
個波段進行的其實是相同的處理,即將大于1
的像素值除以10000
。
其次,使用output_dataset.GetRasterBand()
方法獲取輸出數(shù)據(jù)集中的當前波段對象,并使用output_band.WriteArray()
方法將處理后的數(shù)據(jù)寫入輸出數(shù)據(jù)集。
再次,使用dataset.GetGeoTransform()
和dataset.GetProjection()
分別獲取原始數(shù)據(jù)集的地理轉換和投影信息,并使用output_dataset.SetGeoTransform()
和output_dataset.SetProjection()
設置輸出數(shù)據(jù)集的地理轉換和投影信息。
最后一步,關閉數(shù)據(jù)集對象。至此,代碼就完成了對每個.tif
文件的處理,并將處理后的數(shù)據(jù)保存到輸出文件夾中。
此時,打開本文開頭展示的那1
景遙感影像,可以看到其像素數(shù)值已經(jīng)是乘上縮放系數(shù)之后的了,也就是落在了0
至1
的區(qū)間內;如下圖所示。
到此這篇關于Python代碼將大量遙感數(shù)據(jù)的值縮放指定倍數(shù)的方法的文章就介紹到這了,更多相關Python遙感數(shù)據(jù)的值縮放指定倍數(shù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python實現(xiàn)TCP探測目標服務路由軌跡的原理與方法詳解
這篇文章主要介紹了Python實現(xiàn)TCP探測目標服務路由軌跡的原理與方法,結合實例形式分析了Python TCP探測目標服務路由軌跡的原理、實現(xiàn)方法及相關操作注意事項,需要的朋友可以參考下2019-09-09python 讀取文本文件的行數(shù)據(jù),文件.splitlines()的方法
今天小編就為大家分享一篇python 讀取文本文件的行數(shù)據(jù),文件.splitlines()的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07python xmind 包使用詳解(其中解決導出的xmind文件 xmind8可以打開 xmind2020及之后版本打
xmind8 可以打開xmind2020 報錯,如何解決這個問題呢?下面小編給大家?guī)砹藀ython xmind 包使用(其中解決導出的xmind文件 xmind8可以打開 xmind2020及之后版本打開報錯問題),感興趣的朋友一起看看吧2021-10-10Python sklearn CountVectorizer使用詳解
這篇文章主要介紹了Python_sklearn_CountVectorizer使用詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03Python餐飲AI機器人學習數(shù)據(jù)網(wǎng)絡抓取
在餐飲行業(yè),AI機器人可以通過學習大量的相關數(shù)據(jù)來提供更好的服務和體驗,在文本中,我們將介紹如何使用python進行餐飲A?I機器人學習數(shù)據(jù)的網(wǎng)絡抓取,并提供代碼的示例和最佳實踐2023-12-12Python3.5 Pandas模塊之DataFrame用法實例分析
這篇文章主要介紹了Python3.5 Pandas模塊之DataFrame用法,結合實例形式詳細分析了Python3.5中Pandas模塊的DataFrame結構創(chuàng)建、讀取、過濾、獲取等相關操作技巧與注意事項,需要的朋友可以參考下2019-04-04