詳解Python修復(fù)遙感影像條帶的兩種方式
GDAL修復(fù)Landsat ETM+影像條帶
Landsat7 ETM+衛(wèi)星影像由于衛(wèi)星傳感器故障,導(dǎo)致此后獲取的影像出現(xiàn)了條帶。如下圖所示, 影像中均勻的布滿(mǎn)條帶。
使用GDAL修復(fù)影像條帶的代碼如下:
def gdal_repair(tif_name, out_name, bands): """ tif_name(string): 源影像名 out_name(string): 輸出影像名 bands(integer): 影像波段數(shù) """ # 打開(kāi)影像文件 tif = gdal.Open(tif_name) # 根據(jù)文件類(lèi)型獲取對(duì)應(yīng)的驅(qū)動(dòng)程序 driver = gdal.GetDriverByName('GTiff') # 根據(jù)指定文件的驅(qū)動(dòng)程序,使用現(xiàn)有數(shù)據(jù)集創(chuàng)建新的可寫(xiě)數(shù)據(jù)集 # 所有支持創(chuàng)建新文件的驅(qū)動(dòng)程序都支持該`CreateCopy()`方法, # 但僅`Create()`部分支持該方法 # CreateCopy的第一個(gè)參數(shù)為目標(biāo)文件名,第二個(gè)參數(shù)為源數(shù)據(jù)集 # 第三個(gè)參數(shù)的值是`0`或`1`,值是`0`。即使無(wú)法將原始數(shù)據(jù)準(zhǔn)確地轉(zhuǎn)換為目標(biāo)數(shù)據(jù),程序仍將執(zhí)行 new_img = driver.CreateCopy(out_name, tif, 0) for i in tqdm(range(1, bands)): # 分別對(duì)每個(gè)波段處理 band = new_img.GetRasterBand(i) # 使用FillNodata對(duì)條帶部分進(jìn)行插值 gdal.FillNodata(targetBand = band, maskBand = band, maxSearchDist = 15, smoothingIterations=0) # 將修復(fù)好的波段寫(xiě)入新數(shù)據(jù)集中 new_img.GetRasterBand(i).WriteArray(band.ReadAsArray())
修復(fù)之后的效果圖如下所示:
Opencv修復(fù)Landsat ETM+影像條帶
使用opencv修復(fù)影像的代碼如下:
def cv2_repair(tif_name): # 讀取tif影像 tif_data = gdal_array.LoadFile(tif_name).astype('float32') # 獲取掩膜 mask = tif_data.sum(axis=0) mask = (mask == 0).astype(np.uint8) bands = tif_data.shape[0] res = [] for i in tqdm(range(bands)): # cv.Inpaint(src, inpaintMask, dst, inpaintRadius, flags) # src:源圖像,可以是8位、16位無(wú)符號(hào)整型和32位浮點(diǎn)型1通道或者8位無(wú)符號(hào)3通道 # inpaintMask:掩膜,8位無(wú)符號(hào)整型 # dst:和源圖像具有一樣大小的輸出 # inpaintRadius:算法考慮的每個(gè)已修復(fù)點(diǎn)的圓形鄰域的半徑 # flags:修復(fù)算法類(lèi)型,可選cv2.INPAINT_NS和cv2.INPAINT_TELEA repaired = cv2.inpaint(tif_data[i], mask, 3, flags=cv2.INPAINT_TELEA) res.append(repaired) return np.array(res)
修復(fù)之后的結(jié)果圖:
使用opencv修復(fù)影像,速度要比Gdal慢許多,但修復(fù)質(zhì)量更好。
Reference
https://gis.stackexchange.com/questions/151020/how-to-use-gdal-fillnodata-in-python
到此這篇關(guān)于詳解Python修復(fù)遙感影像條帶的兩種方式的文章就介紹到這了,更多相關(guān)Python修復(fù)遙感影像條帶內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)Flappy Bird源碼
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)Flappy Bird源碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12python單向鏈表的基本實(shí)現(xiàn)與使用方法【定義、遍歷、添加、刪除、查找等】
這篇文章主要介紹了python單向鏈表的基本實(shí)現(xiàn)與使用方法,結(jié)合實(shí)例形式分析了Python單向鏈表的定義、遍歷、添加、刪除、查找等相關(guān)操作技巧,需要的朋友可以參考下2019-10-10對(duì)python使用telnet實(shí)現(xiàn)弱密碼登錄的方法詳解
今天小編就為大家分享一篇對(duì)python使用telnet實(shí)現(xiàn)弱密碼登錄的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01Python 輸出時(shí)去掉列表元組外面的方括號(hào)與圓括號(hào)的方法
今天小編就為大家分享一篇Python 輸出時(shí)去掉列表元組外面的方括號(hào)與圓括號(hào)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12python中使用sys模板和logging模塊獲取行號(hào)和函數(shù)名的方法
這篇文章主要介紹了python中使用sys模板和logging模塊獲取行號(hào)和函數(shù)名的方法,需要的朋友可以參考下2014-04-04Python用戶(hù)自定義異常的實(shí)現(xiàn)
這篇文章主要介紹了Python用戶(hù)自定義異常的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12