方盒滤波器和均值滤波器(python实现)

1.方盒滤波器

去噪,将图像变得模糊。
方盒滤波器和均值滤波器(python实现)

2.函数讲解

函数讲解:boxFilter(src, ddepth, ksize, dst=None, anchor=None, normalize=None, borderType=None):

参数讲解:
(1)src:输入的原始图片;
(2)Ddepth:输出的图像位深,默认值为-1,表示和原图位深一样
(3)Ksize:方盒滤波卷积核大小
方盒滤波器和均值滤波器(python实现)
(4)dst:输出图像
(5)Anchor:默认值为(-1,-1),表示卷积核的中心点
关于这个anchor可以看
https://mydreamambitious.blog.csdn.net/article/details/125153829
(6)borderType:用于推断图像外部像素的某种边界模式。有默认值BORDER_DEFAULT实例代码

3.方盒滤波器实例代码

(1)注程序代码

import os
import cv2
import numpy as np

def BoxFilter(img_path='images/lenna.png'):
    #读取图片
    img_src=cv2.imread(img_path)
    #缩放图片大小
    img=cv2.resize(src=img_src,dsize=(450,450))
    #方盒滤波
    img=cv2.boxFilter(src=img,ddepth=-1,ksize=(5,5),normalize=True)
    #显示图片
    cv2.imshow('img',img)
    cv2.imshow('img_src',img_src)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


if __name__ == '__main__':
    print('Pycharm')
    BoxFilter()

(2)生成高斯噪声代码

#添加高斯噪声
# loc:float
#     此概率分布的均值(对应着整个分布的中心centre)
# scale:float
#     此概率分布的标准差(对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)
def Add_Gauss_Noise(img_path='images/lenna.png',mean=0.0,val=0.01):
    image=cv2.imread(img_path)
    image=cv2.resize(src=image,dsize=(450,450))
    image=image/255.0
    noise=np.random.normal(mean,val**0.5,image.shape)
    image=image+noise
    cv2.imshow('image',image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    #保存图片
    cur_path=os.getcwd()
    save_img_path=cur_path+'\\images\\'+'lenna_GaussNoise.png'
    print(save_img_path)
    noise_image=image*255.0
    cv2.imwrite(save_img_path,noise_image)
    return image

(3)生成椒盐噪声代码

#生成椒盐噪声prob:噪声比例
def Papper_Noise(img_path='images/lenna.png',prob=0.1):
    img=cv2.imread(img_path)
    noise=np.zeros(img.shape,np.uint8)
    thres=1-prob
    
    for i in range(img.shape[0]):
        for j in range(img.shape[1]):
            #产生0-1之间的浮点数(大于等于0且小于1之间的小数)
            rand=random.random()
            #如果随机数小于给定的噪声比例
            if rand<prob:
                noise[i][j]=0
               
            elif rand>thres:
                count_thres+=1
                
            else:
                noise[i][j]=img[i][j]
   
    cv2.imshow('img_noise', noise)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    # 保存图片
    cur_path = os.getcwd()
    save_img_path = cur_path + '\\images\\' + 'lenna_PapperNoise.png'
    print(save_img_path)
    cv2.imwrite(save_img_path, noise)
    return noise

(4)处理高斯噪声效果

方盒滤波器和均值滤波器(python实现)
可以发现处理高斯噪声的效果还是比较好的(通过模糊的方式处理噪声-平滑)

(5)处理椒盐噪声效果

方盒滤波器和均值滤波器(python实现)
原始图椒盐噪声非常的严重,所以处理之后的效果相对于原始图还是不错的。

4.均值滤波器

算法简单,计算速度较快,在去噪的同时去除了很多细节部分,将图像变得模糊。

5.函数讲解

函数:blur(src, ksize, dst=None, anchor=None, borderType=None):
参数讲解:
(1)src:输入原始图像
(2)Kszie:均值卷积核大小
(3)Dst:输出图像
(4)Anchor:默认值为(-1,-1),表示卷积核中心
(5)borderType:用于推断图像外部像素的某种边界模式。有默认值BORDER_DEFAULT

6.均值滤波器实例代码

import os
import cv2
import numpy as np

def BlurFilter(img_path='images/lenna.png'):
    #读取图片
    img_src=cv2.imread(img_path)
    #缩放图片大小
    img=cv2.resize(src=img_src,dsize=(450,450))
    #方盒滤波
    img=cv2.blur(src=img,ksize=(5,5))
    #显示图片
    cv2.imshow('img',img)
    cv2.imshow('img_src',img_src)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


if __name__ == '__main__':
    print('Pycharm')
    BlurFilter()

生成高斯噪声和椒盐噪声上面代码示例

(1)去高斯噪声的效果

方盒滤波器和均值滤波器(python实现)

(2)去椒盐噪声的效果

方盒滤波器和均值滤波器(python实现)
和上面的方盒滤波器的效果是一样的,因为我设置的参数normalize==True.

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2022年6月8日 下午12:10
下一篇 2022年6月9日

相关推荐