灰度圖像轉化爲0-1範圍
一個圖像處理中的小筆記
由於在做卷積神經網絡時,需要對總的訓練集的數據400張圖像通過平移縮放旋轉鏡像對稱等方式將數據集擴大到70000張。但是在這些變換過程中,圖像的灰度範圍會變得不確定,所以在得到70000張圖像後,且保證在CNN網絡中輸入的圖像灰度範圍統一在0-1的範圍內,於是手動將圖像的灰度範圍轉化到0-1的範圍。
使用io.imread讀取圖像時, 得到的圖像的灰度範圍是0-255,但是會出現灰度達不到最大值的情況, 例如一個圖像的灰度範圍是[0-201],這時候,如果用img_as_float()轉化爲[0-1]的灰度範圍時, 得到的結果是[0-0.788],比例是按照1/255的比來變化的,這時候得到的圖像是不符合條件的[沒有來頭的以爲]。所以通過1/(max-min)來得到將的比,使圖像變化到0-1。
from skimage import io, transform, img_as_float
#img_as_float將圖像轉化爲0-1的浮點數
import numpy as np
def int_to_float(f):
image = io.imread(f) #讀取圖像爲整型, [0-255]
image = img_as_float(image) #變爲浮點型[0-1]。
image = (image - image.min()) * (1 / (image.max() - image.min())) #比例縮放的歸一化
image = transform.resize(image, (256, 256)) #圖像縮放大小
return image
path = '/home/total_train_image_gray/*.jpg' #讀取文件夾下所有的.jpg圖像
collections = io.ImageCollection(path, load_func=int_to_float)
#ImageCollection 讀取整個文件夾的圖像,對其進行int_to_float函數變換。這個函數特別神奇,省時間。
path1 = '/home/train_image_gray_0_1/'
for i in range(len(collections)):
io.imsave(path1+np.str(i)+'.jpg', collections[i]) #重新存儲