??本文介紹基于Python中gdal
模塊,實作對大量柵格影像批量繪制直方圖的方法,
??首先,明確一下本文需要實作的需求:現需對多幅柵格資料檔案進行依據其像元數值的直方圖繪制,具體繪制內容即各柵格影像像素數值的分布情況;所有柵格資料都保存在同一目標路徑下,且均為.tif
格式;而目標路徑下具有其它非.tif
格式的檔案,以及不需要進行直方圖繪制的.tif
格式檔案,因此需要在繪制前對目標路徑下的檔案串列加以篩選,只保留需要繪制直方圖的柵格檔案,
??知道了需求,我們便開始代碼的書寫,具體代碼如下:
# -*- coding: utf-8 -*-
"""
Created on Tue Jul 20 12:17:05 2021
@author: fkxxgis
"""
import os
import numpy as np
import matplotlib.pyplot as plt
from osgeo import gdal
lai_file_path="G:/Postgraduate/LAI_Glass_RTlab/LAI_Difference_Global/"
pic_save_path="G:/Postgraduate/LAI_Glass_RTlab/LAI_histogram.png"
file_list=os.listdir(lai_file_path)
tif_list=[]
for file in file_list:
if os.path.splitext(file)[1]==".tif":
if file[0:3]!="MCD":
tif_list.append(file)
sub_plot_num=1
for tif in tif_list:
lai_algorithm=tif[0:3]
print(lai_algorithm)
lai_raster=gdal.Open(lai_file_path+tif)
lai_raster_array=lai_raster.ReadAsArray()
plt.subplot(2,2,sub_plot_num)
plt.hist(lai_raster_array)
sub_plot_num=sub_plot_num+1
plt.show()
plt.savefig(pic_save_path, dpi=300)
??其中,lai_file_path
為待處理柵格圖層存放的路徑,pic_save_path
為后期程式得到直方圖的保存路徑,
??首先,借助os.listdir()
函式獲取lai_file_path
路徑下的全部檔案,此時獲取的檔案包括需要的.tif
格式檔案與其它不需要的檔案;其次,通過os.path.splitext()
函式將上述串列中的每一個檔案file
的檔案名與檔案拓展名分離,并選擇".tif"
進行處理;這一步是避免誤將lai_file_path
路徑中非.tif
格式檔案一并選擇,
??隨后,還需要將我們不需要的.tif
柵格影像通過檔案名篩選的方式去除,在這里,由于不需要繪圖的.tif
檔案均以MCD
開頭,因此直接通過字串截取的方式將其加以剔除即可;大家在上述代碼的實際運用程序中按照個人需求進行篩選即可,
??接下來,開始直方圖的繪制,在這里我選擇了將幾幅直方圖以子圖的形式繪制在一個總圖中,因此需要借助sub_plot_num
進行回圈;隨后,對篩選后的圖層進行讀取,并將柵格資料轉換為Array
形式,這一部分具體可以參考文章Python GDAL讀取柵格資料并基于質量評估波段QA對指定資料加以篩選掩膜,本文就不再贅述;最后,利用plt.hist()
函式進行直方圖的繪制即可,
??最后,通過plt.savefig(pic_save_path, dpi=300)
這句代碼,將設定了影像清晰度的繪圖結果保存在指定路徑,從而大功告成,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/545176.html
標籤:Python
下一篇:python內置函式1