@不要在奮斗的年紀 選擇安逸
均值模糊
- 中值模糊
- 自定義模糊
- 意義與應用場景
模糊的基本原理:
1、基於離散卷積
2、定義好每個卷積核
3、不同卷積核得到不同的卷積效果
4、模糊是卷積的一種表象


#均值模糊 (2,8)高模糊2 寬模糊8 def blur_demo(image): dst = cv.blur(image,(2,8)) cv.imshow('blur_demo',dst) #中值模糊 適合椒鹽噪聲去噪 def median_blur_demo(image): dst = cv.medianBlur(image,5) cv.imshow('median_blur_demo',dst) #自定義模糊 def customer_blur_demo(image): #定義卷積核---均值模糊的效果 # kernel = np.ones([5,5],np.float32/25) # 定義卷積核---銳化 kernel = np.array([[0,-1,0],[-1,5,-1],[0,-1,0]],np.float32)
dst = cv.filter2D(image,-1,kernel=kernel) cv.imshow('customer_blur_demo',dst)
高斯噪點
高斯分布的概率密度函數

numpy.random.normal(loc=0.0, scale=1.0, size=None)
參數的意義為:
loc:float
概率分布的均值,對應着整個分布的中心center
scale:float
概率分布的標准差,對應於分布的寬度,scale越大越矮胖,scale越小,越瘦高
size:int or tuple of ints
輸出的shape,默認為None,只輸出一個值,可以指定輸出值個數返回列表
我們更經常會用到np.random.randn(size)所謂標准正太分布(μ=0, σ=1),對應於np.random.normal(loc=0, scale=1, size)
n = np.random.normal(0,8,4) print(n) ##[ -5.65830268 4.27277753 2.97616802 -15.1577604 ]

#定義高斯噪聲 def gaussian_noise(image): h,w,ch = image.shape for row in range(h): for col in range(w): s = np.random.normal(0,20,3) #均值為0 方差為20 輸出3個值 b = image[row,col,0] #blue g = image[row,col,1] #green r = image[row,col,2] #red # 給blue層加上正態分布噪點 image[row,col,0] = clamp(b + s[0]) image[row,col,1] = clamp(g + s[1]) image[row,col,2] = clamp(r + s[2]) cv.imshow('noise image',image)

"""高斯模糊:這里(5, 5)表示高斯矩陣的長與寬都是5 標准差取6,當取尺寸(5,5)時標准差失效、當取尺寸(0,0)時標准差有效。並且高斯矩陣的尺寸越大或者標准差越大,處理過的圖像模糊程度越大""" dst = cv.GaussianBlur(src,(5,5),6) cv.imshow('Gaussian Blur1',dst) dst = cv.GaussianBlur(src,(0,0),10) cv.imshow('Gaussian Blur2',dst)
EPF(Edge Preserver Filter)邊緣保留濾波
高斯模糊只考慮了權重,只考慮了像素空間的分布,沒有考慮像素值和另一個像素值之間差異的問題,如果像素間差異較大的情況下(比如圖像的邊緣),高斯模糊會進行處理,但是我們不需要處理邊緣,要進行的操作就叫做邊緣保留濾波(EPF)
知識點:邊緣輪廓差異較大的時候得到保留、

案例:

""" #EPF-高斯雙邊濾波 其中各參數所表達的意義: src:原圖像; d:像素的鄰域直徑,可有sigmaColor和sigmaSpace計算可得; sigmaColor:顏色空間的標准方差,一般盡可能大; sigmaSpace:坐標空間的標准方差(像素單位),一般盡可能小。 """ def bi_demo(image): dst = cv.bilateralFilter(image,0,150,10) cv.imshow('bilateralFilter',dst) """ #EPF-均值偏移濾波 其中各參數所表達的意義: src:原圖像; sp:空間窗的半徑(The spatial window radius); sr:色彩窗的半徑(The color window radius); 注意: 通過均值遷移來進行邊緣保留濾波有時會導致圖像過度模糊 """ def shift_demo(image): dst = cv.pyrMeanShiftFiltering(image,10,50) cv.imshow('pyrMeanShiftFiltering',dst)
