?? 前言
最近學(xué)到了深度學(xué)習(xí)的卷積操作,在卷積神經(jīng)網(wǎng)絡(luò)出現(xiàn)之前,就已經(jīng)有使用卷積核 (也叫濾波器),但那時(shí)的卷積核依靠人工的經(jīng)驗(yàn)和知識來進(jìn)行設(shè)計(jì),而不能像卷積神經(jīng)網(wǎng)絡(luò)中那樣讓機(jī)器自己學(xué)習(xí)出合適的卷積核參數(shù)。
下面就介紹通過卷積來獲取圖像輪廓圖的操作。
?? 邊緣提取原理
卷積
首先,圖片是由像素點(diǎn)構(gòu)成的。卷積的一個(gè)基本操作就是對應(yīng)元素相乘然后再求和的操作,然后卷積核窗口在圖片上不斷滑動,就會得到一張新的“特征圖”。 (我這里解釋得比較草率,可以自行仔細(xì)了解一下卷積的過程)
用特殊的卷積核進(jìn)行輪廓提取
這里使用一維的卷積核 [-1, 0, 1],可以提取圖片的垂直邊界。實(shí)際就是圖片中鄰近的像素點(diǎn)進(jìn)行相減操作,邊緣處兩個(gè)像素點(diǎn)的差別很大,于是相減之后得到的值的絕對值就大,這就是我們提取出來的邊緣。
效果展示:
通過改變卷積核的大小,可以改變提取出來的邊緣的寬度,例如將卷積核改為:[-1, 0, 0, 1],得到的黑色邊緣就更寬了。
?? 開始輪廓提取
這里使用下圖中的卷積核,原理和之前的垂直邊緣檢測相似。前面的卷積核只能得到垂直邊緣,而下圖的卷積核則能得到完整的輪廓。
效果展示:
代碼
我這里卷積是通過 paddle 的庫實(shí)現(xiàn)的,因此需要先安裝 paddle。安裝教程參加:paddle安裝教程。
如果覺得安裝太麻煩也沒關(guān)系,可以試試 AI Studio 的在線環(huán)境,已經(jīng)內(nèi)置了 paddle 庫:AI Studio。點(diǎn)擊項(xiàng)目->創(chuàng)建項(xiàng)目,就可以開始使用啦!
導(dǎo)入依賴:
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
import paddle
from paddle.nn import Conv2D
from paddle.nn.initializer import Assign
通過調(diào)整代碼
img = img.resize((200, 200), Image.ANTIALIAS)
括號中的數(shù)值,你將得到不同的輪廓提取效果!(數(shù)值控制圖片的尺寸)
卷積核不變時(shí),圖片尺寸越大,提取的輪廓也就相對顯得越細(xì),就越不明顯。而圖片尺寸小時(shí)又會顯得模糊,像打了馬賽克。
運(yùn)行代碼:
# 輸入圖片
img = Image.open('喵喵頭像.jpg') # 圖片放在py文件相同目錄下
img = img.resize((200, 200), Image.ANTIALIAS) # 采樣,以得到指定大小的圖片
# 設(shè)置卷積核參數(shù)
w = np.array([[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]], dtype='float32')/8
w = w.reshape([1, 1, 3, 3])
w = np.repeat(w, 3, axis=1) # 在通道上復(fù)制,得到[1,3,3,3]
# 創(chuàng)建卷積算子
conv = Conv2D(in_channels=3, out_channels=1, kernel_size=[3, 3],
weight_attr=paddle.ParamAttr(
initializer=Assign(value=w)
))
# 轉(zhuǎn)換圖片格式
x = np.array(img).astype('float32') # 讀入shape[H,W,C]
x = np.transpose(x, (2, 0, 1)) # 交換維度
x = x.reshape((1, x.shape[-3], x.shape[-2], x.shape[-1])) # Conv2D的輸入需為四維張量
x = paddle.to_tensor(x)
# 卷積運(yùn)算
y = conv(x)
out = y.numpy()
# 畫圖
plt.figure(figsize=(20, 10))
f = plt.subplot(121)
f.set_title('input image', fontsize=15)
plt.imshow(img)
f = plt.subplot(122)
f.set_title('output image', fontsize=15)
plt.imshow(out.squeeze(), cmap='gray')
plt.show()
完文章來源:http://www.zghlxwxcb.cn/news/detail-404380.html
14天學(xué)習(xí)訓(xùn)練營導(dǎo)師課程:
楊鑫《Python 自學(xué)編程基礎(chǔ)》
楊鑫《 Python 網(wǎng)絡(luò)爬蟲基礎(chǔ)》
楊鑫《 Scrapy 爬蟲框架實(shí)戰(zhàn)和項(xiàng)目管理》文章來源地址http://www.zghlxwxcb.cn/news/detail-404380.html
到了這里,關(guān)于【計(jì)算機(jī)視覺】不來試試圖片輪廓提?。康奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!