OpenCv(三)——图像平滑处理

目录

图像平滑处理

(1)椒盐噪声生成函数

(2)均值滤波

(3)方框滤波

(4)高斯滤波

(5)中值滤波


图像平滑处理

复制代码
图像平滑(smoothing)也称为“模糊处理”(bluring), 是一项简单且使用频率很高的图像处理方法。
可以用来压制、弱化或消除图像中的细节、突变、边缘和噪声。但最常见的是用来减少图像上的噪声或者失真。降低图像分辨率时,平滑处理是很重要的。
下面是常用的一些滤波器
         均值滤波(邻域平均滤波)–> blur函数
         方框滤波–> boxFilter函数
         高斯滤波–>GaussianBlur函数
         中值滤波–>medianBlur函数

(1)椒盐噪声生成函数

生成噪声的方法有很多种,这里只提供一种思路。

python 复制代码
import numpy as np
def add_peppersalt_noise(image, n=10000):
    result = image.copy()
    h, w = image.shape[:2]    # 获取图片的高和宽
    for i in range(n):    # 生成n个椒盐噪声
        x = np.random.randint(1, h)        #在1~h之间随机产生一个数
        y=  np.random.randint(1, w)        #在1~w之间随机产生一个数
        if np.random.randint(0, 2) == 0:    #随机产生0和1,两者产生的概率相同
            result[x, y] = 0
        else:
            result[x,y] = 255
    return result


#随机产生黑点和白点,总共产生10000个椒盐噪声点

读取原图片,绘制椒盐噪声图

python 复制代码
image = cv2.imread('zl.png')
cv2.imshow('sro',image)
cv2.waitKey(0)
noise = add_peppersalt_noise(image)    #调用上面的椒盐噪声函数
cv2.imshow('noise',noise)
cv2.waitKey(0)

效果:

(2)均值滤波

原理:

均值滤波(Mean filtering):是指用当前像素点周围nxn个像素值的均值来代替当前像素值。边界点的处理可以扩展当前图像的周围像素点padding。

python 复制代码
import cv2
dst=cv2.blur(src,ksize,anchor,borderType)

参数:

dst是返回值,src是需要处理的图像,kszie是滤波核(卷积核)的大小,anchor是锚点,默认值是(-1,-1)一般无需更改 borderType是边界样式,一般无需更改 一般情况下,使用dst=cv2.blur(src,ksize)即可。

python 复制代码
blur_1 = cv2.blur(noise,(3,3))  #卷积核为3,3   效果一般,清晰度一般
cv2.imshow('blur_1',blur_1)
cv2.waitKey(0)

blur_2 = cv2.blur(noise,(5,5))#卷积核为5,5    效果稍好但模糊
cv2.imshow('blur_2',blur_2)
cv2.waitKey(0)
# cv2.destroyAllWindows()

效果:核越大损失的特征会增加,减少特征损失的方法就是设置padding边界填充,可以使周围的边缘的点利用次数增加。

(3)方框滤波

原理:

方框滤波是指用当前像素点周围nXn个像素值的和来替代当前像素值。

复制代码
参数:
dst=cv2.boxFilter(src,ddepth,ksize,anchor,normalize,borderType)式中:
  ● dst是返回值,表示进行方框滤波后得到的处理结果。
  ● src 是需要处理的图像,即原始图像。
  ● ddepth是处理结果图像的图像深度,一般使用-1表示与原始图像使用相同的图像深度。(可以理解为数据类型)
  ● ksize 是滤波核的大小。滤波核大小是指在滤波处理过程中所选择的邻域图像的高 度和宽度。
  ● anchor 是锚点,(指对应哪个区域)
  ● normalize 表示在滤波时是否进行归一化。
      1.当值为True时,归一化,用邻域像素值的和除以面积。  此时方框滤波与 均值滤波 效果相同。
      2.当值为False时,不归一化,直接使用邻域像素值的和。和>255时使用255
python 复制代码
boxFilter_1 = cv2.boxFilter(noise,-1,(3,3),normalize = True)
cv2.imshow('boxFilter_1',boxFilter_1)
cv2.waitKey(0)
python 复制代码
boxFilter_2 = cv2.boxFilter(noise,-1,(3,3),normalize = False)
cv2.imshow('boxFilter_2',boxFilter_2)
cv2.waitKey(0)

效果:做了归一化之后图像更加均衡,不做归一化中心点的值是周围像素值的和,所以中心点的数值大概率会大于255,大于255的值会被设为255,所以不做归一化整个图像会呈现出更亮的效果。

(4)高斯滤波

**原理:**对整幅图像进行加权平均的过程,每一个像素点的值,都是由其本身和邻域内的其他像素值经过加权平均后得到。

复制代码
距离中心点最近的的点位的权重为0.1,距离中心点次近邻的点的权重为0.05,类似于高斯分布,越靠近中心数值越大。


参数:
cv2.GaussianBlur(src, ksize[, sigmaX[, sigmaY[, dst]]])高斯滤波
 参数说明:
 src:输入图像,通常是一个NumPy数组。
 ksize:滤波器的大小,它是一个元组,表示在水平和垂直方向上的像素数量。例如,(5, 5)表示一个5x5的滤波器。
 sigmaX和sigmaY:分别表示在X轴和Y轴方向上的标准差。这些值与滤波器大小相同。默认情况下,它们都等于0,这意味着没有高斯模糊。
 dst:输出图像,通常是一个NumPy数组。如果为None,则会创建一个新的数组来存储结果。
python 复制代码
GaussianB = cv2.GaussianBlur(noise,(3,3),1) #标准差为1,标准正太分布。
cv2.imshow('GaussianBlur',GaussianB)
cv2.waitKey(0)

效果:

(5)中值滤波

**原理:**中值滤波:会取当前像素点及其周围临近像素点(一共有奇数个像素点)的像素值,将这些像素值从小到大排序,然后将位于中间位置的像素值作为当前像素点的像素值。

0,48,56,95,128,130,212,215,250

参数:

cv2.medianBlur(src, ksize[, dst])中值滤波 参数说明: src:输入图像。 ksize:滤波器的大小,它是一个整数,表示在水平和垂直方向上的像素数量。例如,5表示一个5x5的滤波器。 dst:输出图像,通常是一个NumPy数组。如果为None,则会创建一个新的数组来存储结果。

python 复制代码
medianB = cv2.medianBlur(noise,5)
cv2.imshow('medianBlur',medianB)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果:

总结:通过上面的对比,可以看出中值滤波处理这样的噪声点的效果比其他的平滑效果要更好。

相关推荐
鸿蒙布道师3 分钟前
OpenAI战略转向:开源推理模型背后的行业博弈与技术趋势
人工智能·深度学习·神经网络·opencv·自然语言处理·openai·deepseek
白雪讲堂11 分钟前
AISEO (GEO )中的知识图谱
人工智能·chatgpt·知识图谱
智能汽车人25 分钟前
自动驾驶---学术论文的常客:nuScenes数据集的使用
人工智能·机器学习·自动驾驶
小白的高手之路29 分钟前
torch.nn.Conv2d介绍——Pytorch中的二维卷积层
人工智能·pytorch·python·深度学习·神经网络·机器学习·cnn
飞桨PaddlePaddle33 分钟前
飞桨PP系列新成员PP-DocLayout开源,版面检测加速大模型数据构建,超百页文档图像一秒搞定
人工智能·百度·paddlepaddle·飞桨·deepseek
执笔论英雄42 分钟前
【Deepseek 学投机推理】Sequoia
人工智能
杭州默安科技1 小时前
大模型AI Agent的工作原理与安全挑战
人工智能·安全
bug404_1 小时前
jetson orin nano super AI模型部署之路(三)stable diffusion部署
人工智能·stable diffusion
Qiming_v1 小时前
如何使用stable diffusion 3获得最佳效果
人工智能·stable diffusion
liruiqiang051 小时前
循环神经网络 - 通用近似定理 & 图灵完备
人工智能·rnn·深度学习·神经网络·机器学习