iT邦幫忙

2021 iThome 鐵人賽

DAY 14
1

我們在優化影像時,所採用的方法便是使用特定 kernel,針對整張影像進行捲積操作。

舉例來說,模糊(blur)、邊緣偵測(edge detection)、邊緣強化(edge enhancement)、噪點去除(noise removal)等,都是對影像進行捲積的結果。

Convolution:

當我們用kernel對影像由左上到右下移動,再進行運算,便會得出一幅經過 filtered 的新影像!

上圖運算過程: 藍色 grid 為定義的 3 × 3 kernel,在捲積過程進行中,底下覆蓋區域(圖中的紅色的 grid)與 kernel 進行交乘加總後(下方的 output pixel),將作為輸出新圖中該 kernel 區域的中心點;若由左上至右下重複進行上述步驟,輪巡整張圖片後就會得到右邊的圖形。

執行 convolution 後,會發現輸出的圖片尺寸會比原來的小一圈
→ 為了保持影像完整,會使用我們提過的影像周圍補零(Zero padding)

openCV作捲積

使用cv2.filter2D

import numpy as np
import cv2
import sys


imageName = "123.jpg"
image = cv2.imread(imageName)

if image is None:
    print("Could not open or find the image")
    sys.exit()


kernel_size = 5     # 設定kernel size為5x5
# 使用numpy建立 5*5且值為1/(5**2)的矩陣作為kernel。
kernel = np.ones((kernel_size, kernel_size), dtype=np.float32) / kernel_size**2

print (kernel)  # 顯示矩陣內容,所有值皆為0.04的5x5矩陣


    #進行convolute,
result = cv2.filter2D(image, dst=-1, kernel=kernel, anchor=(-1, -1), delta=0, borderType=cv2.BORDER_DEFAULT)


cv2.imshow("Filter", result)   #顯示影像
cv2.imshow("Original", image)

cv2.waitKey(0)  
cv2.destroyAllWindows() #關閉影像視窗

圖片來源&資料參考


上一篇
[D13] 空間濾波例子:Gaussian Filter
下一篇
[D15] CNN
系列文
從林到有_Image processing30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言