could be decompression bomb DOS attack

在使用Keras訓練模型的時候,需要從文件夾中讀取一系列的圖片,由於Keras在將圖片輸入模型中時,使用的是PIL來進行導入,在我的樣本中有一些很大圖片,例如衛星影像,大尺寸地圖等;由於超過了PIL尺寸的限制,會報錯:

DecompressionBombWarning: Image size (139332960 pixels) exceeds limit of 89478485 pixels, could be decompression bomb DOS attack.

解決的辦法是使用其他的開源庫,來打開這些大圖片,試了一下Opencv,skimage都不行,由於樓主有遙感專業背景,就想着能不能分波段將圖片讀進去,然後將這些大圖進行降採樣這樣就可以解決這個警告啦!而且也不會影響模型的訓練!那這個時候就需要使用到我們今天的主角:

GDAL - Geospatial Data Abstraction Library

Python安裝GDAL非常的簡單,網上一大堆的教程,簡單編譯一下就是了!這裏樓主就不再提了,如果你實在不會編譯的話,那麼就用我這邊已經編譯好的吧:

點擊打開鏈接

當安裝完畢後,直接將每個波段讀取進來:

r = dataset.GetRasterBand(1)
g = dataset.GetRasterBand(2)
b = dataset.GetRasterBand(3)

然後將每個波段進行降採樣:

            # 設定新圖像的寬和高
                newX = 2000
                newY = 2000

            # 對每個波段進行resize
                data1 = r.ReadAsArray(0, 0, x, y, newX, newY)
                data2 = g.ReadAsArray(0, 0, x, y, newX, newY)
                data3 = b.ReadAsArray(0, 0, x, y, newX, newY)
            # print(data1.mean(), data2.mean(), data3.mean())

然後拼接成一個新的array就可以了:

# 將波段融合在一起
    data = np.dstack([data1, data2, data3])

# 波段轉化爲圖像
    im = Image.fromarray(data)

這樣就可以完美的解決這些超大圖像的讀入問題啦!

發佈了48 篇原創文章 · 獲贊 67 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章