OpenCV-python 实现图像的邻域平均平滑滤波

邻域平均平滑滤波:

一、 ´ 定义: 用一个像素的邻域平均值作为滤波结果,滤波模板所有系数值都取 11
二、 邻域平均的一般表达式为:

                                                  

                    其中N(x,y)对应f(x,y)(x,y)n×n邻域,与模板W所对应的范围对应。

三、 说明:

                当使用的平滑模板尺寸增大时,对噪声的消除效果有所增强,但是图像更模糊,可视细节逐渐减少,运算量逐步增大

        W×H —— 图像尺寸,n×n —— 模板尺寸

                均值滤波器的计算量:O(WHn)

                若使用加法结合律,将二维模板分为两个方向依次计算,就可以将计算量降低到O(WH(n+n)=2WHn)

                若使用递归的方式,还可以将计算量降低到O(WH)

       四、实现:

               开发环境:Windows10、python3.7、OpenCV-2、pycharm。

                先贴代码吧:

import cv2
import numpy as np
import matplotlib.pyplot as plt

#加椒盐噪声的函数
def saltPepper(image, salt, pepper):
    height = image.shape[0]
    width = image.shape[1]
    pertotal = salt + pepper    #总噪声占比
    noiseImage = image.copy()
    noiseNum = int(pertotal * height * width)
    for i in range(noiseNum):
        rows = np.random.randint(0, height-1)
        cols = np.random.randint(0,width-1)
        if(np.random.randint(0,100)

     代码中有几个函数需要在这里介绍说明一下:

参考文档:

https://docs.opencv.org/3.0-last-rst/index.html

https://www.cnblogs.com/Undo-self-blog/p/8423851.html

https://matplotlib.org/index.html

  • cv2.imread(filename, flags)

filename——文件名称

flags——读入类型

IMREAD_GRAYSCALE=0        #以灰度图像的格式读入
IMREAD_UNCHANGED=-1       #以原图格式读入
IMREAD_COLOR=1            #以彩色图像读入
  • cv2.blur(src, ksize, dst, anchor, borderType)

src——输入图像

ksize——卷积核(模板)大小

dst——输出图像

anchor——卷积内核锚点,默认参数(-1, -1)为内核中心

borderType——卷积到中心像素如何填充边界的方法

  • plt.subplot(nrows, ncols, index, **kwargs)

 

前三个参数:nrows、ncols、index——指出子图位置,分别为总行数、总列数、索引值(从1开始,从左上角增加到右下角)。也可以将前三个参数合成为一个参数,例如plt.subplot(221)就指总共有2行2列,该子图在第一个位置,这三个数都不能超过10

第四个参数:projection : {None, ‘aitoff’, ‘hammer’, ‘lambert’, ‘mollweide’, ‘polar’, ‘rectilinear’, str},可选参数,用来说明子图的类型,默认None是一个线形图

第五个参数:polar : boolean, optional。 如果选择true,就是一个极点图,上一个参数也能实现该功能。

  • plt.imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, shape=, filternorm=1, filterrad=4.0, imlim=, resample=None, url=None, *, data=None, **kwargs)

X——类数组或PIL图像

camp——可选参数,字符串或颜色地图中的name属性,对于RGB(A)数据,忽略此参数

其余参数含义不一一赘述。

  • plt.title(label, fontdict=None, loc='center', pad=None, **kwargs)

lable——标题文本(str)

fontdict——一个控制标题字体和大小的字典数据类型

默认字典为:

{'fontsize': rcParams['axes.titlesize'],
 'fontweight' : rcParams['axes.titleweight'],
 'verticalalignment': 'baseline',
 'horizontalalignment': loc}

loc——{'center', 'left', 'right'}标题位置(str),可选参数,默认值为"center"

pad——标题相对于轴顶部的偏移量,以点为单位(float)

text——表示标题的matplotlib文本实例

  • plt.xticks(ticks=None, labels=None, **kwargs)

ticks——刻度线应放置的位置列表,可以传递一个空列表来禁用xticks

labels——显示标签列表,放置在给定位置,可选参数

 

 

你可能感兴趣的:(python,图像处理,图像处理,OpenCV)