詳解Python修復(fù)遙感影像條帶的兩種方式
GDAL修復(fù)Landsat ETM+影像條帶
Landsat7 ETM+衛(wèi)星影像由于衛(wèi)星傳感器故障,導(dǎo)致此后獲取的影像出現(xiàn)了條帶。如下圖所示, 影像中均勻的布滿條帶。

使用GDAL修復(fù)影像條帶的代碼如下:
def gdal_repair(tif_name, out_name, bands):
"""
tif_name(string): 源影像名
out_name(string): 輸出影像名
bands(integer): 影像波段數(shù)
"""
# 打開影像文件
tif = gdal.Open(tif_name)
# 根據(jù)文件類型獲取對應(yīng)的驅(qū)動程序
driver = gdal.GetDriverByName('GTiff')
# 根據(jù)指定文件的驅(qū)動程序,使用現(xiàn)有數(shù)據(jù)集創(chuàng)建新的可寫數(shù)據(jù)集
# 所有支持創(chuàng)建新文件的驅(qū)動程序都支持該`CreateCopy()`方法, # 但僅`Create()`部分支持該方法
# CreateCopy的第一個參數(shù)為目標文件名,第二個參數(shù)為源數(shù)據(jù)集
# 第三個參數(shù)的值是`0`或`1`,值是`0`。即使無法將原始數(shù)據(jù)準確地轉(zhuǎn)換為目標數(shù)據(jù),程序仍將執(zhí)行
new_img = driver.CreateCopy(out_name, tif, 0)
for i in tqdm(range(1, bands)):
# 分別對每個波段處理
band = new_img.GetRasterBand(i)
# 使用FillNodata對條帶部分進行插值
gdal.FillNodata(targetBand = band, maskBand = band, maxSearchDist = 15, smoothingIterations=0)
# 將修復(fù)好的波段寫入新數(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位無符號整型和32位浮點型1通道或者8位無符號3通道
# inpaintMask:掩膜,8位無符號整型
# dst:和源圖像具有一樣大小的輸出
# inpaintRadius:算法考慮的每個已修復(fù)點的圓形鄰域的半徑 # flags:修復(fù)算法類型,可選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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django-rest-framework中過濾器的定制實例
這篇文章主要介紹了Django-rest-framework中過濾器的定制實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
使用bandit對目標python代碼進行安全函數(shù)掃描的案例分析
這篇文章主要介紹了使用bandit對目標python代碼進行安全函數(shù)掃描,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
Python實現(xiàn)迪杰斯特拉算法并生成最短路徑的示例代碼
這篇文章主要介紹了Python實現(xiàn)迪杰斯特拉算法并生成最短路徑的示例代碼,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12
向量化操作改進數(shù)據(jù)分析工作流的Pandas?Numpy示例分析

