Opencv笔记(3):图像平滑处理

本文介绍了图像处理中的几种关键技术,包括如何添加和去除噪声(如高斯噪声、椒盐噪声等),以及均值滤波、方框滤波、高斯滤波和中值滤波的具体应用和原理,展示了不同滤波器在图像平滑和噪声减少方面的对比效果。
摘要由CSDN通过智能技术生成

目录​​​​​​​

图像平滑处理

如何添加噪声

均值滤波

方框滤波

高斯滤波

中值滤波

对比效果


图像平滑处理

图像噪声:图像中不希望存在的随机干扰或失真,它通常是由于摄像机传感器、环境条件、传输过程等因素引起的。噪声会使图像变得模糊、失真或者产生其他不良效果,常见噪声有

高斯噪声(Gaussian Noise)、椒盐噪声(Salt-and-Pepper Noise)、周期性噪声(Periodic Noise)、量化噪声(Quantization Noise)、散斑噪声(Speckle Noise)

效果:减少图像中的噪声并使其更加平滑

如何添加噪声

高斯噪声:一种服从正态分布的噪声,可以通过生成具有正态分布的随机值与输入图像的像素值相加。(之后补充解释)

import numpy as np
import cv2

def add_gaussian_noise(image, mean=0, std_dev=25):
    """
    添加高斯噪声到图像中
    """
    row, col, ch = image.shape
    gauss = np.random.normal(mean, std_dev, (row, col, ch))
    gauss = gauss.reshape(row, col, ch)
    noisy = image + gauss
    return noisy.astype(np.uint8)

# 读取图像
image = cv2.imread('input_image.jpg')

# 添加高斯噪声
noisy_image = add_gaussian_noise(image)

# 显示原始图像和添加噪声后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Noisy Image', noisy_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

均值滤波

原理:以一个图像像素值为例(临近的像素值大小应该是差不多大的,根据这点,对图像3*3的中心像素值做改变)

#均值滤波
import cv2 
def cv_show(name,img):
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
img=cv2.imread('zaodian.jpg')
cv_show('zaodian',img)

blur=cv2.blur(img,(3,3))#要表明核的大小一般为奇数
cv_show('blur',blur)

噪点原图
blur处理后

方框滤波

基本和均值滤波一样,3x3的盒子核将应用于输入图像,并且输出图像中的每个像素值将是其周围9个像素值的平均值。(基本和均值滤波原理一样)

#前面读取图像代码都是一样的
box=cv2.boxFilter(img,-1,(3,3),normalize=True)
cv_show('box',box)

解释一下第九行代码:

  • -1:表示输出图像的深度,设置为-1表示输出图像与输入图像具有相同的深度(每个像素的颜色值的位数或者字节数)。
  • (3,3):表示滤波核的大小,这里是一个3x3的核。
  • normalize=True:表示在滤波操作时是否进行归一化处理。不做归一化处理,就相当于把九个像素值加到一起,没有除以9。设置为True表示进行归一化处理(False不进行)

图像归一化处理:将图像的像素值缩放到特定范围内(如果像素值>255,直接默认>255的像素值为255,为白色,因此归一化可以防止越界)

归一化
未归一化

高斯滤波

相对于均值滤波,高斯滤波对于离中心点越接近的像素值赋予更高的权重,更加‘‘公正’’

比如对于3*3图像,我可以设置这样一个核​​​​​​​,中间权重最大

#前面代码相同
aussian=cv2.GaussianBlur(img,(5,5),1)
cv_show('aussian',aussian)

中值滤波

取3*3图像的9个像素值,从大到小排列,取中值(中位数),再赋给中间像素点的值

median=cv2.medianBlur(img,5)
cv_show('median',median)

处理后效果确实很好

对比效果

import numpy as np
res=np.hstack((blur,box,aussian,median))
cv_show('res',res)

  • 22
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值