原文鏈接 https://jinkey.ai/post/tech/li-yong-keras-jin-xing-tu-pian-bian-yuan-jian-ce
本文作者 Jinkey(微信公眾號 jinkey-love岔冀,官網(wǎng) https://jinkey.ai)
文章允許非篡改署名轉(zhuǎn)載翼抠,刪除或修改本段版權(quán)信息轉(zhuǎn)載的,視為侵犯知識產(chǎn)權(quán)雷客,我們保留追求您法律責(zé)任的權(quán)利,特此聲明窗骑!
依賴庫
requirements.txt 內(nèi)容如下
keras
numpy
pillow
工程目錄結(jié)構(gòu)
其中1.6.py為本教程腳本坑鱼。要處理的示例圖片:
圖片預(yù)處理
# 打開圖片(圖片放在工程目錄 img 文件夾下)
img = Image.open('img/test.png')
# 轉(zhuǎn)換成灰度圖是 "L",轉(zhuǎn)換成RGB是"RGB"
img_gray = img.convert("L")
# 因為 keras 要求 2D 卷積層的輸入的形狀是 (寬, 高, 通道數(shù))榨乎,這里只有灰度值一個通道,所以對維度進行擴展
img_gray_array = np.expand_dims(np.array(img_gray), axis=2)
# img_gray_array.shape = (64, 64, 1)
創(chuàng)建卷積層
# 創(chuàng)建模型
model = kr.Sequential()
# 定義卷積核
def jk_kernel(shape):
return np.expand_dims(np.expand_dims(kernel, axis=2), axis=2)
# 添加卷積層
model.add(kr.layers.Conv2D(filters=1, kernel_size=3, kernel_initializer=jk_kernel, strides=1, padding='same', name='conv2d', input_shape=img_gray_array.shape))
# 編譯模型
model.compile(optimizer='rmsprop', loss='categorical_crossentropy')
輸出中間層的結(jié)果
conv2d_layer_model = kr.Model(inputs=model.input,
outputs=model.get_layer('conv2d').output)
conv2d_output = conv2d_layer_model.predict(np.expand_dims(img_gray_array, axis=0))
# conv2d_output.shape = (1, 64, 64, 1)
顯示
# 縮減維度
img_gray_array_squeeze = np.squeeze(conv2d_output)
# 保存結(jié)果瘫筐,也可以用 show() 方法來顯示圖片
Image.fromarray(img_gray_array_squeeze).convert('RGB').save(fp='img/edge.png')
輸出的邊緣檢測結(jié)果為: