2019年4月22日 星期一

使用Keras卷積神經網路辨別肺部醫學影像(三)

上一章「使用Keras卷積神經網路辨別肺部醫學影像(二)」

由上一個步驟已經得到了兩個分別裝著男性肺部影像與女性肺部影像的資料夾。


接著我們將把這些影像壓縮成一個.npy檔。

至於為什麼要做壓縮呢,因為後續進行訓練的時候,如果是一張一張影像慢慢讀進程式,會拖累執行的效能。而且比起一個檔案,數千張的影像檔在攜帶上也不方便,全部壓縮在一個檔案是很方便的。

現在,我們建立一個python程式,命名為small128.py

程式碼及註解如下:
import array
import numpy as np
import cv2
import glob
#建立影像清單
imglist=[]
#計數器
filecount=0
#設定圖片寬度
imgwidth=128
#設定圖片高度
imgheight=128
#迭代女性資料夾中的影像
for filestr in glob.glob('image_F/*.png'):
    #利用opencv讀取影像檔
    #參數中的IMREAD_GRAYSCALE代表是以灰階模式讀取而非全彩
    img = cv2.imread(filestr,cv2.IMREAD_GRAYSCALE)
    #將影像縮放為128x128的大小
    img=cv2.resize(img,(imgwidth,imgheight))
    #將每個像素的值由0-255的整數轉換為0-1的浮點數
    img=img/255.0
    #將處理過後的影像放入影像清單中
    imglist.append(img)
    #計算目前處理了幾張影像
    filecount=filecount+1
    #進度條,查看目前程式跑到哪了
    if filecount%100==0:
        print(filecount,end=' ')
    #設定只放入4500張影像
    if filecount>=4500:
        break
#迭代男性資料夾中的影像
for filestr in glob.glob('image_M/*.png'):
    #利用opencv讀取影像檔
    #參數中的IMREAD_GRAYSCALE代表是以灰階模式讀取而非全彩
    img = cv2.imread(filestr,cv2.IMREAD_GRAYSCALE)
    #將影像縮放為128x128的大小
    img=cv2.resize(img,(imgwidth,imgheight))
    #將每個像素的值由0-255的整數轉換為0-1的浮點數
    img=img/255.0
    #將處理過後的影像放入影像清單中
    imglist.append(img)
    #計算目前處理了幾張影像
    filecount=filecount+1
    #進度條,查看目前程式跑到哪了
    if filecount%100==0:
        print(filecount,end=' ')
    #設定只放入4500張影像(加上女性的影像共9000張)
    if filecount>=9000:
        break
#將影像清單轉換成Array
img_array=np.array(imglist)
#儲存影像
np.save("size128_F4500_M4500.npy",img_array)

我們一開始建立影像清單,並設定好影像的大小(影像越大,訓練時就需要消耗更多的資源,所以建議縮小影像),我們將影像統一縮放為長128px、寬128px的大小
imglist=[]
imgwidth=128
imgheight=128

接著我們利用OpenCV讀取影像(需import cv2)。
img = cv2.imread(filestr,cv2.IMREAD_GRAYSCALE)
讀取時我們將原本的彩色影像轉換成灰階影像(全彩的影像每個像素需佔用24位元的大小,灰階的影像只需佔用8個位元),此動作並不會降低訓練的準確度,因為這些肺部影像本來就是黑白的。

接著我們使用OpenCV的resize函數,將影像縮放為一開始設定好的128x128的大小,此部分不再多加贅述。
img=cv2.resize(img,(imgwidth,imgheight))

接著我們將每個像素的值標準化(將介於0~255的整數標準化為0~1.0的浮點數),這個動作可以提高訓練的準確率。
img=img/255.0

然後將處理完的影像依序加入影像清單中。
imglist.append(img)

接著將影像清單轉換成訓練時需要的格式。
img_array=np.array(imglist)

最後,將這些影像儲存在一個size128_F4500_M4500.npy的檔案中。
np.save("size128_F4500_M4500.npy",img_array)

執行後,會得到一個npy檔,裡面裝著4500張男性影像和4500張女性影像。

在下一個章節,我們將建立訓練模型,開始建構這個計畫的核心程式。

沒有留言:

張貼留言

有興趣或有疑問的歡迎提問與交流喔!!!