• 图像处理--平滑


    图像噪声

    在采集、处理和传输过程中,数字图像可能会受到不同噪声的干扰,从而导致图像质量降低、图像变得模糊、图像特征被淹没,而图像平滑处理就是通过除去噪声来达到图像增强的目的。常见的图像噪声有椒盐噪声、高斯噪声等。

    椒盐噪声

    椒盐噪声(Salt-and-pepperNoise)也称为脉冲噪声,是一种随机出现的白点或黑点,具体表现为亮的区域有黑色像素,或是暗的区域有白色像素,又或是两者皆有。
    下面左侧为图像原图,右侧为添加椒盐噪声的效果图:
    在这里插入图片描述
    高斯噪声(GaussNoise)是指概率密度函数服从高斯分布(正态分布)的一类噪声。除了常用抑制噪声的方法外,常采用数理统计方法对高斯噪声进行抑制。
    下面左侧为图像原图,右侧为添加高斯噪声的效果图:
    在这里插入图片描述

    图像平滑处理

    从信号处理的角度分析,图像平滑就是去除其中的高频信息,保留低频信息,即可以通过低通滤波来去除图像中的噪声,实现对图像的平滑处理。
    根据滤波器的不同,滤波方式可分为均值滤波、高斯滤波和中值滤波。

    均值滤波

    均值滤波(MeanFiltering)就是对图像的所有像素点进行取均值,即以一个方形区域为单位,将该区域的中心像素点赋值为区域内所有像素点的平均值。
    以下图为例,设定3×3领域为核,图(a)的中心像素点值为“226”。图(a)中的9个像素点值之和除以像素点个数,所得值“122”就是中心像素点的新值,计算式如下:
    40+107+5+198+226+223+37+68+193÷9=122
    将中心像素点的值替换为计算得到的新值,如图(b):
    在这里插入图片描述
    均值滤波的算法简单、计算速度较快,但在图像去噪的同时也破环了图像的细节部分,从而导致图像清晰度降低。

    高斯滤波

    将各数值乘以相应的权数后加总求和,并将得到的总体值除以总的单位数,最后求得的值就是加权平均值。高斯滤波(GaussFiltering)就是对图像的所有像素点进行加权平均,即以一个方形区域为单位,将其中心像素点赋值为该区域的加权平均值。以下图为例,图(a)的中心像素点值为“226”,根据图(b)的权重分配计算加权平均值,所得值“164”就是中心像素点的新值,
    计算式如下:40×0.05+107×0.1+5×0.05+198×0.1+226×0.4+223×0.1+37×0.05+68×0.1+ 193×0.05=164
    将中心像素点的值替换为计算得到的新值,如图(c):
    在这里插入图片描述

    中值滤波

    将统计总体中的各个变量按值的大小顺序进行排列,形成一个数列,处于数列中间位置的变量值就称为中值。中值滤波(MedianFiltering)就是对图像的所有像素点进行取中值,即以一个方形区域为单位,将其中心像素点赋值为该区域的中值。
    以下图为例,设定3×3领域为核,图(a)的中心像素点值为“226”,将图(a)中9个像素点值按照从小到大或从大到小的顺序进行排列,即5、37、40、68、107、193、198、223、226,中间值“107”就是中心像素点的新值。
    将中心像素点的值替换为新值,如图(b):
    在这里插入图片描述

    代码

    均值滤波

    通过调用cv2模块中的blur()函数,对指定图像进行均值滤波处理。

    cv2.blur(src, ksize)
    
    • 1

    第一个参数“scr”是输入图像;
    第二个参数“ksize”是卷积核的大小。

    高斯滤波

    cv2.GaussianBlur(src, ksize, sigmaX, sigmaY, borderType)
    
    • 1

    第一个参数“scr”是输入图像;
    第二个参数“ksize”是高斯卷积核的大小,卷积核的高度和宽度都必须为正数和奇数;
    第三个参数“sigmaX”是水平方向的高斯核标准偏差;
    第四个参数“sigmaY”是垂直方向的高斯核标准偏差,默认值为“0”,表示与参数“sigmaX”相同;
    第五个参数“borderType”是边界的填充类型。

    中值滤波

    cv2.medianBlur(src, ksize)
    
    • 1

    第一个参数“scr”是输入图像;
    第二个参数“ksize”是卷积核的大小。

    图像显示

    创建自定义图像

    通过调用matplotlib.pyplot模块中的figure()函数,创建一个自定义画像(Figure),用于显示滤波处理的结果图像。

    plt.figure(figsize=(10, 5), dpi = 100)
    
    • 1

    在这里插入图片描述

    设置图像显示参数

    通过调用matplotlib.pyplot模块中的subplot()、imshow()和title()函数,指定画像(Figure)内的子图位置分布、子图颜色类型和子图标题。

    plt.subplot(141), plt.imshow(img), plt.title("Original")
    
    • 1

    1)subplot()函数用于设置子图的位置分布,其语法格式如下:

    matplotlib.pyplot.subplot(nrows, ncols, index, **kwargs)
    
    • 1

    第一个参数“nrows”和第二个参数“ncols”分别是subplot的行、列数;第三个参数“index”是索引位置,从“1”开始累计(左上角为“1”),依次向右递增。当行、列数都小于“10”,可以将两个数值缩写为一个整数,例如,代码“subplot(1,4,1)”和“subplot(141)”的含义相同,都表示将画像分为1行4列,当前子图排在第1位,即第1行的第1列。
    2)imshow()函数用于设置子图颜色类型,其语法格式如下:

    matplotlib.pyplot.imshow(X, camp = None)
    
    • 1

    第一个参数“X”是图像数据;第二个参数“cmap”是颜色图谱(colormap),默认为RGB(A)颜色空间。
    3)title()函数用于设置子图标题,函数括号内的参数是子图名称,其语法格式如下:

    matplotlib.pyplot.title(label, fontdict = None, loc = None, pad = None, *, y = None, **kwargs)
    
    • 1

    第一个参数“label”是标题文本,类型为字符串;
    第二个参数“fontdict”是标题文本的字体属性,类型为字典;
    第三个参数“loc”是标题位置,可取值“left”、“center”或“right”,默认值为“center”;
    第四个参数“pad”是标题与子图的填充距离(内边距),默认值为“6.0”;
    第五个参数“y”是标题在子图中的垂直距离,单位为子图高度的百分比,默认值为“None”,即自动确定标题位置,避免与其他元素重叠。值为“1.0”表示在子图顶端;
    第六个参数“**kwargs”是文本对象关键字属性,用于控制文本的外观属性,如字体、文本颜色等。

    设置坐标刻度

    通过调用matplotlib.pyplot模块中的xticks()和yticks()函数,设置X、Y轴的刻度及标签,由于此例程在显示图像时无需使用坐标轴信息,此处将列表设为空,即不显示坐标轴。

    plt.xticks([]), plt.yticks([])
    
    • 1

    xticks()函数的语法格式如下:

    xticks(ticks=None, labels=None, **kwargs)
    
    • 1

    当参数为空,函数会返回当前X轴的刻度及标签;否则,函数用于设置当前X
    轴的刻度及标签。
    第一个参数“ticks”是X轴刻度的位置列表,若列表为空,X轴刻度将清空;
    第二个参数“labels”是X轴刻度的标签,当参数“ticks”不为空,此参数才会传递;
    第三个参数“**kwargs”用于控制刻度标签的外观。
    yticks()函数的语法格式和xticks()函数的相同,区别在于yticks()函数的作用对象是Y轴。

    显示图像

    plt.show()
    
    • 1
  • 相关阅读:
    Linux下离线调试之coredump文件介绍
    架构漫谈 - 如何设计高性能、高可用、高扩展架构
    简单解析表格table标签的用法
    用神经网络实现一次加法运算
    Spring Cache使用Redis自定义缓存key
    【送书福利-第二十五期】《AI时代系列书籍》
    栈在求值表达式中的应用
    如何在 Anolis 8上部署 Nydus 镜像加速方案?
    uverbs的交互方式——ioctl和write
    Oracle 排查慢SQL
  • 原文地址:https://blog.csdn.net/weixin_51711289/article/details/127298309