图像处理--平滑

图像噪声

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

椒盐噪声

椒盐噪声(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)

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

高斯滤波

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

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

中值滤波

cv2.medianBlur(src, ksize)

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

图像显示

创建自定义图像

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

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

在这里插入图片描述

设置图像显示参数

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

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

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

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

第一个参数“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)

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

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

第一个参数“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([])

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

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

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

显示图像

plt.show()
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天一道题

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值