日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python+gdal+遙感圖像拼接(mosaic)的實例

瀏覽:102日期:2022-08-02 17:57:18

作為攝影測量與遙感的從業者,筆者最近開始深入研究gdal,為工作打基礎!個人覺得gdal也是沒有什么技術含量,調用別人的api。但是想想這也是算法應用的一個技能,多學無害!

關于遙感圖像的鑲嵌,主要分為6大步驟:

step1:

1)對于每一幅圖像,計算其行與列;

2)獲取左上角X,Y

3)獲取像素寬和像素高

4)計算max X 和 min Y,切記像素高是負值

maxX1 = minX1 + (cols1 * pixelWidth)minY1 = maxY1 + (rows1 * pixelHeight)

step2 :計算輸出圖像的min X ,max X,min Y,max Y

minX = min(minX1, minX2, …)maxX = max(maxX1, maxX2, …)

y坐標同理

step3:計算輸出圖像的行與列

cols = int((maxX ? minX) / pixelWidth)rows = int((maxY ? minY) / abs(pixelHeight)

step 4:創建一個輸出圖像

driver.create()

step 5:

1)計算每幅圖像左上角坐標在新圖像的偏移值

2)依次讀入每幅圖像的數據并利用1)計算的偏移值將其寫入新圖像中

step6 :對于輸出圖像

1)刷新磁盤并計算統計值

2)設置輸出圖像的幾何和投影信息

3)建立金字塔

下面附上筆者的代碼:

#mosica 兩張圖像import os, sys, gdalfrom gdalconst import *os.chdir(’c:/temp/****’)#改變文件夾路徑# 注冊gdal(required)gdal.AllRegister()# 讀入第一幅圖像ds1 = gdal.Open(’**.img’)band1 = ds1.GetRasterBand(1)rows1 = ds1.RasterYSizecols1 = ds1.RasterXSize# 獲取圖像角點坐標transform1 = ds1.GetGeoTransform()minX1 = transform1[0]maxY1 = transform1[3]pixelWidth1 = transform1[1]pixelHeight1 = transform1[5]#是負值(important)maxX1 = minX1 + (cols1 * pixelWidth1)minY1 = maxY1 + (rows1 * pixelHeight1)# 讀入第二幅圖像ds2 = gdal.Open(’**.img’)band2 = ds2.GetRasterBand(1)rows2 = ds2.RasterYSizecols2 = ds2.RasterXSize# 獲取圖像角點坐標transform2 = ds2.GetGeoTransform()minX2 = transform2[0]maxY2 = transform2[3]pixelWidth2 = transform2[1]pixelHeight2 = transform2[5]maxX2 = minX2 + (cols2 * pixelWidth2)minY2 = maxY2 + (rows2 * pixelHeight2)# 獲取輸出圖像坐標minX = min(minX1, minX2)maxX = max(maxX1, maxX2)minY = min(minY1, minY2)maxY = max(maxY1, maxY2)#獲取輸出圖像的行與列cols = int((maxX - minX) / pixelWidth1)rows = int((maxY - minY) / abs(pixelHeight1))# 計算圖1左上角的偏移值(在輸出圖像中)xOffset1 = int((minX1 - minX) / pixelWidth1)yOffset1 = int((maxY1 - maxY) / pixelHeight1)# 計算圖2左上角的偏移值(在輸出圖像中)xOffset2 = int((minX2 - minX) / pixelWidth1)yOffset2 = int((maxY2 - maxY) / pixelHeight1)# 創建一個輸出圖像driver = ds1.GetDriver()dsOut = driver.Create(’mosiac.img’, cols, rows, 1, band1.DataType)#1是bands,默認bandOut = dsOut.GetRasterBand(1)# 讀圖1的數據并將其寫到輸出圖像中data1 = band1.ReadAsArray(0, 0, cols1, rows1)bandOut.WriteArray(data1, xOffset1, yOffset1)#讀圖2的數據并將其寫到輸出圖像中data2 = band2.ReadAsArray(0, 0, cols2, rows2)bandOut.WriteArray(data2, xOffset2, yOffset2)’’’ 寫圖像步驟’’’# 統計數據bandOut.FlushCache()#刷新磁盤stats = bandOut.GetStatistics(0, 1)#第一個參數是1的話,是基于金字塔統計,第二個#第二個參數是1的話:整幅圖像重度,不需要統計# 設置輸出圖像的幾何信息和投影信息geotransform = [minX, pixelWidth1, 0, maxY, 0, pixelHeight1]dsOut.SetGeoTransform(geotransform)dsOut.SetProjection(ds1.GetProjection())# 建立輸出圖像的金字塔gdal.SetConfigOption(’HFA_USE_RRD’, ’YES’)dsOut.BuildOverviews(overviewlist=[2,4,8,16])#4層

補充知識:運用Python的第三方庫:GDAL進行遙感數據的讀寫

0 背景及配置環境

0.1 背景

GDAL(Geospatial Data Abstraction Library)是一個在X/MIT許可協議下的開源柵格空間數據轉換庫。它利用抽象數據模型來表達所支持的各種文件格式。它還有一系列命令行工具來進行數據轉換和處理。

這個開源柵格空間數據轉換庫擁有許多和其他語言的接口,對于python,他有對應的第三方包GDAL,下載安裝已在上篇文章中提到。

目的: 可以使用Python的第三方包:GDAL進行遙感數據的讀寫,方便批處理。

0.2 配置環境

電腦系統: win7x64Python版本: 3.6.4GDAL版本: 2.3.2

1 讀

1.1 TIFF格式

標簽圖像文件格式(Tag Image File Format,簡寫為TIFF)是一種靈活的位圖格式,主要用來存儲包括照片和藝術圖在內的圖像。它最初由Aldus公司與微軟公司一起為PostScript打印開發。TIFF與JPEG和PNG一起成為流行的高位彩色圖像格式。

TIFF文件以.tif為擴展名。

def tif_read(tifpath, bandnum): ''' Use GDAL to read data and transform them into arrays. :param tifpath:tif文件的路徑 :param bandnum:需要讀取的波段 :return:該波段的數據,narray格式。len(narray)是行數,len(narray[0])列數 ''' image = gdal.Open(tifpath) # 打開該圖像 if image == None: print(tifpath + '該tif不能打開!') return lie = image.RasterXSize # 柵格矩陣的列數 hang = image.RasterYSize # 柵格矩陣的行數 im_bands = image.RasterCount # 波段數 im_proj = image.GetProjection() # 獲取投影信息 im_geotrans = image.GetGeoTransform() # 仿射矩陣 print(’該tif:{}個行,{}個列,{}層波段, 取出第{}層.’.format(hang, lie, im_bands, bandnum)) band = image.GetRasterBand(bandnum) # Get the information of band num. band_array = band.ReadAsArray(0,0,lie,hang) # Getting data from zeroth rows and 0 columns # band_df = pd.DataFrame(band_array) del image # 減少冗余 return band_array, im_proj, im_geotrans

2 寫

2.1 TIFF格式

TIFF格式的數據格式有:Byete、int16、uint16、int32、uint32、float32、float64等7余種。

首先,要判斷數據的格式,才能按需求寫出。

def tif_write(self, filename, im_data, im_proj, im_geotrans): ''' gdal數據類型包括 gdal.GDT_Byte, gdal.GDT_UInt16, gdal.GDT_Int16, gdal.GDT_UInt32, gdal.GDT_Int32, gdal.GDT_Float32, gdal.GDT_Float64 :param filename: 存出文件名 :param im_data: 輸入數據 :param im_proj: 投影信息 :param im_geotrans: 放射變換信息 :return: 0 ''' if ’int8’ in im_data.dtype.name: # 判斷柵格數據的數據類型 datatype = gdal.GDT_Byte elif ’int16’ in im_data.dtype.name: datatype = gdal.GDT_UInt16 else: datatype = gdal.GDT_Float32 # 判讀數組維數 if len(im_data.shape) == 3: im_bands, im_height, im_width = im_data.shape else: im_bands, (im_height, im_width) = 1,im_data.shape # 多維或1.2維 #創建文件 driver = gdal.GetDriverByName('GTiff') #數據類型必須有,因為要計算需要多大內存空間 dataset = driver.Create(filename, im_width, im_height, im_bands, datatype) dataset.SetGeoTransform(im_geotrans) #寫入仿射變換參數 dataset.SetProjection(im_proj) #寫入投影 if im_bands == 1: dataset.GetRasterBand(1).WriteArray(im_data) #寫入數組數據 else: for i in range(im_bands): dataset.GetRasterBand(i+1).WriteArray(im_data[i]) del dataset

3 展示

3.1 TIFF格式

# 這個展示的效果并不是太好,當做示意圖用 def tif_display(self,im_data): ''' :param im_data: 影像數據,narray :return: 展出影像 ''' # plt.imshow(im_data,’gray’) # 必須規定為顯示的為什么圖像 plt.imshow(im_data) # 必須規定為顯示的為什么圖像 plt.xticks([]), plt.yticks([]) # 隱藏坐標線 plt.show() # 顯示出來,不要也可以,但是一般都要了

以上這篇python+gdal+遙感圖像拼接(mosaic)的實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久激情av| 日本不卡在线视频| 精品欧美视频| 精品伊人久久| 日本黄色精品| 99久久婷婷这里只有精品| 最新亚洲激情| 亚洲精品九九| 麻豆精品99| 久久久噜噜噜| 亚洲一级大片| 精品视频久久| 激情视频一区二区三区| 久久国产精品毛片| 日本久久二区| 久久久久久夜| 久久av一区| 国产精品99久久免费| 日韩国产一区二区| 欧美特黄a级高清免费大片a级| 国产精品呻吟| 国产精品xxx| 99精品一区| 色综合视频一区二区三区日韩 | 999国产精品永久免费视频app| 蜜桃tv一区二区三区| 综合日韩在线| 精品免费视频| 国产精品外国| 久久精品毛片| 亚洲永久字幕| 欧美激情福利| 亚洲欧美日韩国产| 久久久久亚洲精品中文字幕| 日韩不卡免费高清视频| 亚洲精品少妇| 欧美综合另类| 国产欧美一区二区三区精品观看| 日韩av首页| 日韩国产成人精品| 91精品精品| 国产精品大片| 羞羞答答国产精品www一本| 精品国产乱码久久久| 蜜桃视频在线观看一区二区| 日韩电影二区| 久久福利在线| 亚洲毛片在线| 激情婷婷久久| 麻豆精品新av中文字幕| 美女日韩在线中文字幕| 日韩一区三区| 国产精东传媒成人av电影| 99riav国产精品| 97在线精品| 日本麻豆一区二区三区视频| 激情91久久| 亚洲精品.com| 精品一区电影| 日韩av字幕| 国产亚洲精品久久久久婷婷瑜伽| 精品一区二区三区中文字幕视频| 亚洲一区二区三区四区电影| 日韩不卡免费高清视频| 国产精品美女午夜爽爽| 亚洲一区二区成人| 久久免费大视频| 成人在线丰满少妇av| 国产精品嫩模av在线| 亚洲视频电影在线| 99pao成人国产永久免费视频| 日韩中文影院| 91视频久久| 精品欠久久久中文字幕加勒比| 国产欧美69| 欧美精品国产一区| 欧美亚洲国产日韩| 欧美一级一区| 亚洲日本久久| 亚洲欧美日韩国产综合精品二区| 久久网站免费观看| 日韩国产网站| 久久精品国产99久久| 欧美aa在线观看| 不卡福利视频| 国产一区二区三区网| 久久久久伊人| 精品一区二区男人吃奶| 久久99影视| 久久久久黄色| 精品国产欧美| 中国字幕a在线看韩国电影| 成人亚洲一区二区| 欧美日韩精品免费观看视欧美高清免费大片| 国产精品tv| 捆绑调教美女网站视频一区| 免费一级欧美在线观看视频| 久久字幕精品一区| 黄毛片在线观看| 视频福利一区| 日韩天堂在线| 91精品一区国产高清在线gif| 亚洲91视频| 久久亚洲不卡| 日韩一区二区三区免费视频| 69堂精品视频在线播放| 老司机精品视频网| 日产精品一区| 亚洲黄色在线| 免费看的黄色欧美网站| 蜜臀精品久久久久久蜜臀| 亚洲精品影院在线观看| 免费日本视频一区| 欧美性www| 日本一二区不卡| 亚洲先锋成人| 亚洲精品免费观看| 久久99青青| 国产91精品对白在线播放| 免费观看日韩电影| 国产精品成人一区二区网站软件| 国产成人免费| 极品裸体白嫩激情啪啪国产精品| 国产色综合网| 久久黄色影视| 久久影院午夜精品| 天堂av在线一区| 国产精品片aa在线观看| 日产精品一区| 亚洲ww精品| 国产福利片在线观看| 亚洲免费中文| 国产极品一区| 国产亚洲精品自拍| 久久在线91| 国产亚洲毛片在线| 国产精品成人自拍| 亚洲男女av一区二区| 日本视频一区二区| 给我免费播放日韩视频| 国产偷自视频区视频一区二区| 国产一精品一av一免费爽爽| 日韩久久电影| 青青国产91久久久久久| 99精品视频在线观看免费播放| 日韩精品成人| 欧美 日韩 国产精品免费观看| 日韩欧美中文字幕一区二区三区| 国产精品99一区二区三| 中文字幕av亚洲精品一部二部| 国产成人精品一区二区三区视频 | 午夜精品亚洲| 久久gogo国模啪啪裸体| 欧美精品九九| 精品国产欧美日韩一区二区三区| 先锋影音久久久| 国产理论在线| 国产视频网站一区二区三区| 日韩午夜黄色| 天堂а√在线最新版中文在线| 日韩高清成人在线| 日韩一级欧洲| 婷婷激情一区| 美女视频黄久久| 日韩精品久久久久久久软件91| 欧美日韩在线播放视频| 国产欧美一区二区色老头| 亚洲免费网址| 日韩精品免费一区二区三区| 麻豆久久一区| 久久精品99国产精品日本| 亚洲中字黄色| 999国产精品| 黑森林国产精品av| 麻豆久久久久久久| 欧美影院视频| 中文字幕一区二区三区四区久久| 久久久噜噜噜| 福利一区二区| 国产精品红桃| 国产欧美日韩在线观看视频| 免费日韩av片| 欧美搞黄网站| 亚洲天堂一区二区| 成人精品国产亚洲| 久久中文欧美| 欧美激情五月| 国产精品mv在线观看| 国产亚洲观看| 欧美亚洲人成在线| 欧美一区自拍| 欧美亚洲tv| 久久精品99久久久| 久久激情五月激情| 欧美日韩a区| 国产欧美一区二区色老头| 亚洲男人在线| 日产欧产美韩系列久久99| 中文字幕亚洲影视| 免费观看在线综合|