![]() | ![]() |
![]() | ![]() |
尺寸調整前 | 尺寸調整前 |
1、背景介紹
? ? ? 在深度學習中,將圖像調整到固定尺寸(如28x28像素)的操作是非常常見的,尤其是在處理諸如圖像分類、物體檢測和圖像分割等任務時。這種操作有幾個重要原因:
-
標準化輸入:許多深度學習模型都是為特定輸入尺寸設計的。將所有圖像調整到相同的尺寸可以確保每個輸入都被以相同的方式處理,這有助于模型的訓練和預測。
-
批量處理:在深度學習中,通常會使用批處理技術來同時處理多個輸入。固定尺寸的圖像可以更容易地與批量大小對齊,從而提高計算效率。
-
網絡架構的假設:一些網絡架構(如LeNet、AlexNet等)假設輸入圖像具有特定的尺寸。如果輸入圖像的大小不一致,網絡可能無法正確地處理它們。
-
計算效率:固定尺寸的圖像可以簡化模型的設計,使得網絡層(如卷積層和池化層)的參數數量減少,從而提高計算效率。
-
數據增強:在訓練過程中,可以對調整后的圖像應用數據增強技術,如隨機裁剪、旋轉、縮放等,以增加訓練數據的多樣性,從而提高模型的泛化能力。
-
輸入層的大小:大多數深度學習框架(如TensorFlow和PyTorch)的輸入層(如
tf.placeholder
或torch.autograd.Variable
)需要知道輸入數據的尺寸。固定尺寸的圖像可以確保輸入層正確地設置其形狀。
? ? ? ?如下圖所示,人工制作的一張圖片,像素為71*70,與常用模型固定尺寸存在差異,如28*28,需要處理,要達到如下效果。
![]() | ![]() |
71*70 | 28*28 |
2、圖像尺寸調整
? ? ? 本次介紹2種場景下圖像尺寸調整,分別為單張圖片調整、批量圖像尺寸調整。
2.1 單張圖像尺寸調整
? ? ? 單張圖像調整,即只對一張圖像尺寸調整,代碼如下。如下所示,將0.jpg的圖片,調整為大小為28*28的圖像,使用函數resize()函數。
from PIL import Image#單獨圖片進行裁切處理
# 讀取圖片
image_path = '0.jpg' # 替換為你的圖片路徑
image = Image.open(image_path)# 調整圖片大小為28x28像素
resized_image = image.resize((28, 28), Image.BICUBIC)# 保存或顯示調整大小的圖片
resized_image.save('0_resize.jpg')
resized_image.show()
? ? ? 效果如下圖所示,左邊為原始圖像,經過調整后,圖像尺寸變為28*28,變小了。因此,右邊圖像明顯小于左邊。
2.2 批量圖像尺寸調整
? ? ? ?實際中,圖像在處理前需要統一尺寸大小,方便后續圖像處理。因此,存在一個批量處理過程。其對多張圖像進行統一處理。如下代碼,為對10張圖片,統一調整為尺寸大小為28*28的圖像,其中處理前圖像命名按照1.jpg、2.jpg、3.jpg、......進行命名。如下圖所示,其實可以發現,0-9這10張圖片,尺寸大小是不一樣的。
? ? ? 如下代碼中,文件路徑infile采用了for循環語句進行給定,其中{}可以看成數字i。在最后保存時,以同樣方式進行保存調整尺寸后的圖片。
#批量進行裁切
from PIL import Image
for i in range(10):infile = 'D:/test/' + '{}.jpg'.format(i)image = Image.open(infile)# 調整圖片大小為28x28像素resized_image = image.resize((28, 28), Image.BICUBIC)#顏色進行反轉savefile='D:/test/' +'{}'.format(i)+'_resize.jpg'resized_image.save(savefile)
? ? ? 如下圖所示,排在前面的為調整尺寸后圖像,可以發現其尺寸大小基本一致,表明程序運行成功。其實,從圖像詳細信息中,可以查看像素值,如下圖所示。
![]() | ![]() |
調整前像素97*103 | 調整后像素28*28 |
3、總結
? ? ? 本次介紹了基于python中Image庫,實現對圖像大小調整,其中包含單張圖像與批量圖像大小調整。