原圖片讀入后如下所示,會有很多噪音點
這時就要用到濾波處理來處理這些噪音點,有以下幾種方式:
1、均值濾波
對於一個像素點,可以在它周圍畫一個卷積盒子,用盒子中的均值來代替這個像素點,計算公式為(121+75+...+235)/9
也就相當於一個3×3的卷積矩陣,每個位置的值都為1,該卷積矩陣與像素點矩陣做乘法,然后除以矩陣的大小
經過均值濾波處理后,結果如下:
1 #均值濾波 2 blur=cv2.blur(img,(3,3))
可以看到噪音點比原始圖像少了很多,但還是有一些噪音點
2、方框濾波
方框濾波有兩種情況,如果做了歸一化處理,就和均值濾波一樣
1 #方框濾波(歸一化即和均值濾波一樣) 2 box1=cv2.boxFilter(img,-1,(3,3),normalize=True)
如果不做歸一化處理,就是將卷積盒子中的所有數值加起來,不取平均值,即121+75+...+235
因為像素點的取值范圍是0~255,如果加起來超過這個范圍,顯示出來就是一個白點
1 #方框濾波(不做歸一化處理) 2 box2=cv2.boxFilter(img,-1,(3,3),normalize=False)
3、高斯濾波
在卷積盒子中,有些像素點離中心像素點的距離近一些,那么它和中心像素點的關系更近一些,求平均值的時候權重應該更大一些
例如3×3的盒子中,上下左右就離中心點的距離短一些,四個角距離就稍長些
高斯濾波就是在求均值的基礎上給各個點都加上了權重
1 #高斯濾波 2 gaussian=cv2.GaussianBlur(img,(5,5),1)
4、中值濾波
就是將卷積盒子中的像素點按順序排成一列,取它的中間數,即中位數
24,75,78,104,113,121,154,204,235,中位數是113,就用113來代替中心像素點的值
1 #中值濾波 2 median=cv2.medianBlur(img,5)
可以看到,利用中值濾波處理后,噪音點基本沒有了