iT邦幫忙

0

[OpenCV 學習筆記] 5. Image Blurring: 使用 Convolution 技巧模糊化圖片

  • 分享至 

  • xImage
  •  

在影像處理中,模糊化圖像是一項最基本且重要的技巧。
本文將簡單示範如何透過 OpenCV 使用 Convolution 技巧對圖片進行模糊化處理。


Convolution 模糊化圖片概念:

  • 當一群顏色相近的像素聚在一起時,則難以辨別出 "Edge",因此我們可以知道 Edge 附近的像素值會有劇烈變化。
    https://ithelp.ithome.com.tw/upload/images/20260825/201828936ovuwHbm0f.png
  • 將每個像素附近的值和該像素進行平均後取代掉該像素,即可減緩 Edge 附近像素值的劇烈變化➡️用來區分色塊和區域的 Edge 表徵就會變得較為柔和,圖像就會漸漸變得模糊,如下圖所示。
    https://ithelp.ithome.com.tw/upload/images/20260825/20182893RXkmhUEAZo.png
  • 上述將每個像素附近的值依照"權重"相加後取得新的值替代的技巧被稱做 "捲積(Convolution)",而記錄權重的正方形 matrix,被稱作 Kernel,或叫做 Convolution matrix,也有人口語上習慣叫做 window,該矩陣的邊長被稱做(window) size,例如上方的 kernel 的 size 是 3。

接下來將示範如何簡單用 OpenCV Custormize Kernel 對圖片進行 convolution,將其模糊化。


程式碼(Python):

import cv2
import numpy as np

dog_pic = '../images/dog.png' # 圖片位址
dog_img = cv2.imread(dog_pic)

window_sizes = [3, 5, 10] # 捲積的 Window Size
imgs = [dog_img]

for k in window_sizes:

    blurring_kernel = np.ones((k, k))/(k*k)
    # 可以將註解拿掉觀察 kernel 的樣子
    # print(blurring_kernel) 
    blurred_img = cv2.filter2D(src=dog_img, ddepth = -1, kernel = blurring_kernel)
    cv2.putText(blurred_img, f'k={k}', (10,50), cv2.FONT_ITALIC, 1.5, (0,0,0), 2,  cv2.FILLED) # 將 window size 的文字描述放入適當位置

    imgs.append(blurred_img)

cv2.imshow('original pic with different window sizes', np.hstack(imgs))
 
cv2.waitKey()
cv2.destroyAllWindows()

Result:
https://ithelp.ithome.com.tw/upload/images/20260825/201828937ZebDADEru.png
Note:

  • 可以觀察到隨著 Window size 的遞增,每一像素和周圍越來越多的像素進行平均,導致圖片會變得越來越模糊。
  • Kernel 內的權重不見得要全部相等,也不見得所有權重值總和要等於1(eg:Gaussian Kernel、Sharpen Kernel)。

以上就是使用 kernel 對圖像進行模糊化的相關介紹, 謝謝~


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言