高斯模糊的介紹與原理
通常,圖像處理軟件會(huì)提供"模糊"(blur)濾鏡,使圖片產(chǎn)生模糊的效果。
"模糊"的算法有很多種,其中有一種叫做"高斯模糊"(Gaussian Blur)。它將正態(tài)分布(又名"高斯分布")用于圖像處理。
所謂"模糊",可以理解成每一個(gè)像素都取周邊像素的平均值。
上圖中,2是中間點(diǎn),周邊點(diǎn)都是1。
"中間點(diǎn)"取"周?chē)c(diǎn)"的平均值,就會(huì)變成1。在數(shù)值上,這是一種"平滑化"。在圖形上,就相當(dāng)于產(chǎn)生"模糊"效果,"中間點(diǎn)"失去細(xì)節(jié)。
顯然,計(jì)算平均值時(shí),取值范圍越大,"模糊效果"越強(qiáng)烈。
上面分別是原圖、模糊半徑3像素、模糊半徑10像素的效果。模糊半徑越大,圖像就越模糊。從數(shù)值角度看,就是數(shù)值越平滑。
接下來(lái)的問(wèn)題就是,既然每個(gè)點(diǎn)都要取周邊像素的平均值,那么應(yīng)該如何分配權(quán)重呢?
如果使用簡(jiǎn)單平均,顯然不是很合理,因?yàn)閳D像都是連續(xù)的,越靠近的點(diǎn)關(guān)系越密切,越遠(yuǎn)離的點(diǎn)關(guān)系越疏遠(yuǎn)。因此,加權(quán)平均更合理,距離越近的點(diǎn)權(quán)重越大,距離越遠(yuǎn)的點(diǎn)權(quán)重越小。
python生成高斯模糊
Python可以使用opencv庫(kù)很方便地生成模糊圖像,如果沒(méi)有安裝opencv的,可以用pip安裝:
pip install python-opencv
想了解高斯模糊是什么的話,可以看wiki百科-高斯模糊。對(duì)于一般人,只要知道這個(gè)操作可以生成模糊圖片就好了,一行代碼即可搞定:
import cv2
img = cv2.GaussianBlur(ori_img, (9, 9), 0)
這個(gè)函數(shù)的第一個(gè)參數(shù)是原圖像,第二個(gè)參數(shù)是高斯矩陣,要注意長(zhǎng)和寬都必須為單數(shù),第三個(gè)參數(shù)是標(biāo)準(zhǔn)差,如果寫(xiě)0,則函數(shù)會(huì)自行計(jì)算。
那怎么控制模糊程度呢?很簡(jiǎn)單,高斯矩陣的尺寸越大,標(biāo)準(zhǔn)差越大,處理過(guò)的圖像模糊程度越大。
介紹完了簡(jiǎn)單的高斯模糊操作,我們加一個(gè)隨機(jī)處理,來(lái)隨機(jī)生成模糊程度不同的幾張圖像,其實(shí)也很簡(jiǎn)單,加一個(gè)隨機(jī)函數(shù)來(lái)生成高斯矩陣的尺寸就可以了:
import cv2
import random
imgName = "img.png"
min_size = 11
ori_img = cv2.imread(imgName)
for i in range(3):
addition = random.choice((0, 2, 4, 6, 8, 10, 12))
size = min_size + addition
kernel_size = (size, size)
img = cv2.GaussianBlur(ori_img, kernel_size, 0)
new_imgName = "New_" + str(i) + "_" + str(kernel_size[0]) + "_" + imgName
cv2.imwrite(new_imgName, img)
這里利用了random庫(kù),來(lái)在一組數(shù)字中隨機(jī)選擇一個(gè)數(shù),加到最小尺寸上,作為每次生成的模糊圖片的高斯矩陣尺寸,這里我的尺寸最小值設(shè)為了11,大家可以根據(jù)需要自己嘗試看效果來(lái)設(shè)定。
總結(jié)
到此這篇關(guān)于Python如何生成隨機(jī)高斯模糊圖片的文章就介紹到這了,更多相關(guān)python生成高斯模糊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- python 基于opencv實(shí)現(xiàn)高斯平滑
- python繪制高斯曲線
- Python OpenCV高斯金字塔與拉普拉斯金字塔的實(shí)現(xiàn)
- python實(shí)現(xiàn)高斯投影正反算方式
- Python 實(shí)現(xiàn)順序高斯消元法示例
- python 多維高斯分布數(shù)據(jù)生成方式
- OpenCV半小時(shí)掌握基本操作之高斯雙邊