iT邦幫忙

0

關於OpenCV高斯模糊函數

  • 分享至 

  • xImage
最近在學習影像處理經常看到很多人使用cv2.GaussianBlur(image,kernel,sigma)為影像做模糊以達到消除雜訊的功用,此函數內部的數學運算看了很久還是不懂(數學太爛了)。

根據我研究出來的是kernel size必須是奇數,kernel的用意是比如3 * 3的kernel,其影像中每3 * 3的像素中心被模糊的程度最大,kernel size或者sigma越大模糊效果越好。

關於這函數有幾個問題想請教:
Q1:關於sigma與kernel之間的關係,kernel size設越大sigma就要設越小嗎?看很多人會把sigma設為0

Q2:kernel設為(0,0),sigma非0,這樣的功效我自己測試是也會變得模糊,只是效果與kernel size非0,sigma = 0 感覺模糊效果不太一樣,這樣的目的為何呢?

Q3:看有人在調整銳利度時,使用Q2所說的方式,並將結果與原圖透過不同比例混合藉此使影像變得更加清晰,為何這樣能做到呢?

process = cv2.GaussianBlur(image,(0,0),50)
result = cv2.addWeighted(image,1.5,process,-0.5,0)

以上3個問題想請教影像處理大師,若我的理解有錯,也希望能糾正我,謝謝!

froce iT邦大師 1 級 ‧ 2022-05-01 17:57:16 檢舉
不是啥大師,也沒在搞影像處理,不過這篇我覺得已經夠清楚了。
https://www.796t.com/content/1547093196.html

1. 不是,這要看你要的效果
sigma是常態分配裡的方差,這文章裡舉1.5做例子。
kernel越大表示取平均的範圍越大,sigma越大表示邊緣的權重越小。
理論上kernel範圍取大,你邊緣不應該太影響中心的平均。
所以才會有這樣的經驗總結

2.kernel設為(0,0),opencv 會自動幫你用sigma去計算kernel size。
https://docs.opencv.org/3.4/d4/d86/group__imgproc__filter.html#gaabe8c836e97159a9193fb0b11ac52cf1

3. 原理參考這個
https://kknews.cc/zh-tw/photography/66gxekq.html
你的code就是讓原圖權重*1.5去減掉0.5權重的模糊
vuj8104 iT邦新手 4 級 ‧ 2022-05-02 11:23:50 檢舉
謝謝
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答