8影像计算ndvi landsat_使用GDAL读取遥感影像的信息
讀取影像數據集的元數據
????GDAL已經提供了足夠方便的函數,可以讀取影像的一些元數據信息, 從而方便對數據進行處理。GDAL一般是以字典的形式對元數據進行組織的, 但是對于不同的柵格數據類型,元數據的類型與鍵值可能都不一樣。
????目前, 國際上對空間元數據標準內容進行研究的組織主要有三個,分別是歐洲標準化委員會(CEN/TC 287)、 美國聯邦地理數據委員會(FGDC)和國際標準化組織地理信息/地球信息技術委員會(ISO/TC 211)。
??? GDAL可以作為數據集級別的元數據來處理下面的基本的TIFF標志。
TIFFTAG_DOCUMENTNAME
TIFFTAG_IMAGEDESCRIPTION
TIFFTAG_SOFTWARE
TIFFTAG_DATETIME
TIFFTAG_ARTIST
TIFFTAG_HOSTCOMPUTER
TIFFTAG_COPYRIGHT
TIFFTAG_XRESOLUTION
TIFFTAG_YRESOLUTION
TIFFTAG_RESOLUTIONUNIT
TIFFTAG_MINSAMPLEVALUE (read only)
TIFFTAG_MAXSAMPLEVALUE (read only)
????使用python來訪問以下元數據。
from osgeo import gdaldataset = gdal.Open("C:/Users/WangTianli/Desktop/GDAL/Landsat/Washington/geotiff_file.tif")dataset.GetMetadata(){'AREA_OR_POINT': 'Area', 'PyramidResamplingType': 'NEAREST'}????GetMetadata()?方法可以訪問數據的元數據信息,元數據信息對于每個數據都是不一樣的。比如再打開另外一個文件:
ds?=?gdal.Open('C:/Users/WangTianli/Desktop/GDAL/Landsat/gdata/lu75c.tif')ds.GetMetadata(){'AREA_OR_POINT': 'Area','TIFFTAG_XRESOLUTION': '1',
'TIFFTAG_YRESOLUTION': '1'}
????這個文件只對兩個TIFF標志進行了定義,還有一個并不是TIFF標志定義的。
????2.使用GetDescription()獲得柵格數據的信息
dataset.GetDescription()'C:/Users/WangTianli/Desktop/GDAL/Landsat/Washington/geotiff_file.tif'????看來這里的圖像描述是圖像的路徑名, 但是這是和各種不同數據集相關的, 不同數據集有不同的描述。
????3.獲取數據集柵格波段數目
????柵格數據集是由多個數據構成的,在GDAL中,每一個波段,都是一個數據集;不僅如此,柵格數據集還可能包含有子數據集,每子數據集又可能包含有波段。
????這些數據集的數目可以通過RasterCount屬性來查看。
dataset.RasterCount3
????這是一個由3個波段構成的Landsat遙感影像。注意RasterCount后面沒有括號,因為它是屬性不是方法。
????再看一個MODIS L1B數據:
mds = gdal.Open("C:/Users/WangTianli/Desktop/GDAL/Landsat/gdata/MOD09A1.A2009193.h28v06.005.2009203125525.hdf")mds.RasterCount0
????運行結果居然是0。這意味著當前的數據集 dataset 中的柵格數目是0。實際上,MODISL1B的數據格式是HDF格式的, 它的數據是以子數據集組織的, 要獲取其相關的數據的信息, 需要繼續訪問其子數據集。
????4.獲取數據集影像行列數據
????柵格數據的大小指出了影像以像元為單位的寬度與高度。
img_width,img_height?=?dataset.RasterXSize,dataset.RasterYSizeimg_width,img_height(1500, 900)????可以看出我們的影像大小是 10572?×?9422 。
????5.獲得數據集空間參考
????GetGeoTransform()?地理仿射變換參數。
????對于遙感影像來說,它需要在地理空間中進行定位。在GDAL中,這有兩種方式,其中一種是使用六個參數坐標轉換模型。這個模型的具體實現在不同的軟件中是不一樣的。在GDAL中,這六個參數包括左上角坐標,像元X、Y方向大小,旋轉等信息。要注意,Y方向的像元大小為負值。
dataset.GetGeoTransform()(1868454.913, 30.0, 0.0, 5353126.266, 0.0, -30.0)
????6.獲得數據集投影信息
????使用?GetProjection()?函數,可以比較容易地獲取數據集的投影信息。
dataset.GetProjection()'PROJCS["Albers_Beijing54",GEOGCS["Unknown datum based upon the Krassowsky 1940 ellipsoid",DATUM["Not_specified_based_on_Krassowsky_1940_ellipsoid",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","6024"]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["latitude_of_center",0],PARAMETER["longitude_of_center",105],PARAMETER["standard_parallel_1",25],PARAMETER["standard_parallel_2",47],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH]]'????7.獲取數據集的波段
????GetRasterBand()?函數,可以獲得柵格數據集的波段。這是函數的參數使用波段的索引值。
from osgeo import gdaldataset = gdal.Open('/gdata/lu75c.tif')dataset.RasterCount1
band = dataset.GetRasterBand(1)????這里通過?GetRasterBand()?函數獲取了第一個波段band,注意:這里訪問波段的索引和通常的數組索引不一樣,波段索引的開始值是1而不是0。
以上內容針對數據集。
以下內容針對波段。
????8.查看波段的基本信息
????使用dir()函數查看波段有什么屬性和方法。
dir(band)????9.獲取波段行列數據
band.XSize6122
band.YSize4669
band.DataType3
????執行以上代碼得到了波段圖像的寬和高(像元為單位)。對于我們所使用的影像, 這個與?dataset?中使用?RasterXSize()?與?RasterYSize()?獲取的值一致。DataType是圖像中實際數值的數據類型,表示8位無符號整型。
????10.獲取波段數據的屬性
band.GetNoDataValue()band.GetMaximum()band.GetMinimum()band.ComputeRasterMinMax()(-1.0, 66.0)
????Maximum?是表示在本波段數值中最大的值,當然?Minimum?就是表示本波段中最小的值。通過運行結果,我們可以看到在一開始RasterXSize()和RasterYSize()都沒有值。因為對于文件格式不會有固有的最大最小值。所以我們可以通過函數ComputeRasterMinMax()?計算得到。注意!這里的最大最小值不包括“無意義值”!也就是上面顯示的?NoDataValue?。
總結
以上是生活随笔為你收集整理的8影像计算ndvi landsat_使用GDAL读取遥感影像的信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qpaint 在graphicsview
- 下一篇: 动物克隆技术应用价值_虽然有了克隆技术为