当前位置: 首页 > article >正文

OpenCV学习记录——平滑处理

文章目录

  • 前言
  • 一、图像噪声
  • 二、图像平滑处理
  • 三、完整应用代码

前言

        当我们用树莓派进行opencv图像处理时,摄像头所获取的图像质量通常会有所下降,此时,需要多种手段来优化图像的质量,提高图像识别的准度。今天所记录的是当图片经过传输等过程后出现的图像噪声现象及对应解决方法——平滑

一、图像噪声

        在数字图像的采集、处理和传输过程中,可能会受到各种噪声干扰,这会导致图像质量下降、图像变得模糊,甚至使图像的特征难以辨认。为了增强图像的质量,我们需要对图像进行平滑处理,以去除这些噪声的影响。常见的图像噪声包括椒盐噪声高斯噪声等。

(1)椒盐噪声

        椒盐噪声也称为脉冲噪声,是一种随机出现的白点或黑点,具体表现为亮的区域有黑色像素,或是暗的区域有白色像素,又或是两者皆有

        下图中,左图为原图像右图为添加椒盐噪声的图像

(2)高斯噪声

        高斯噪声是指概率密度函数服从高斯分布(正态分布)的一类噪声

        下图中,左图为原图像右图为添加高斯噪声的图像

二、图像平滑处理

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

(一)均值滤波

        均值滤波就是对图像的所有像素点进行取均值,即以一个方形区域为单位,将该区域的中心像素点赋值为区域内所有像素点的平均值。如图所示3*3矩形,中心值为235,这个值由于过大,会形成黑点,即噪声图像,为了消除噪声,将这个点重新设置为以它为中心的九个点的平均值,即:

(23+98+168+46+235+2+67+55+211)\div 9 = 100.5

           

        均值滤波是一种简单的滤波方法,尤其对高斯噪声的消除有较好的作用,但通常会使图像的细节变的稍微模糊,在需要观察图像细节时不建议使用均值滤波

        均值滤波处理函数如下:

cv2.blur(scr, ksize)

其中的两个参数分别为:

(1)“scr”, 要处理的图像

(2) “ksize”, 滤波核的大小,它是一个表示宽度和高度的元组。例如,(3, 3)表示一个3*3的滤波核

(二)高斯滤波

        高斯滤波就是对图像的所有像素点进行加权平均,即以一个方形区域为单位,将其中心像素点赋值为该区域的加权平均值:

23*0.05+98*0.1+168*0.05+46*0.1+235*0.4+2*0.1+67*0.5+55*0.1+211*0.05 = 137

            

        高斯滤波考虑了像素周围邻域的距离,使得离中心像素更近的像素具有更高的权重,可以有效地去除噪声,同时保留图像的边缘和细节

        高斯滤波处理函数如下:

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

其中的五个参数分别为:

(1)“src”, 要处理的图像

(2)“ksize”, 高斯滤波核的大小,它是一个表示宽度和高度的元组。例如,(3, 3)表示一个3*3的滤波核

(3)“sigmaX”, X方向的高斯核标准差,通常可以写为0或者不写

(4)“sigmaY”, Y方向的高斯核标准差,如果sigmaY为0,则默认与sigmaX相同

(5)“borderType”, 边界处理类型,用于处理滤波核超出图像边界的情况

(三)中值滤波

        中值滤波就是对图像的所有像素点进行取中值,即以一个方形区域为单位,将其中心像素点赋值为该区域的中值。例如下图所示3*3矩形中:2、23、46、55、67、98、168、211、235,其中67为中值,所以将中心设置为67

             

        中值滤波是一种非线性滤波方法,对于去除椒盐噪声等椒盐噪声非常有效,但可能会导致图像细节模糊

        中值滤波处理函数如下:

cv2.medianBlur(src, ksize)

(1)“scr”, 要处理的图像

(2) “ksize”, 滤波核的大小,它是一个表示宽度和高度的元组。例如,(3, 3)表示一个3*3的滤波核

三、完整应用代码

三种滤波方法的具体应用代码如下:

import cv2

# 图像读取
img = cv2.imread('noise.jpg')

# 图像平滑
blur1 = cv2.blur(img, (5, 5))               # 均值滤波
blur2 = cv2.GaussianBlur(img, (5, 5), 1)    # 高斯滤波
blur3 = cv2.medianBlur(img, 5)              # 中值滤波

# 图像显示
cv2.imshow('image1', img)
cv2.imshow('image2', blur1)
cv2.imshow('image3', blur2)
cv2.imshow('image4', blur3)
cv2.waitKey(0)
cv2.destroyAllWindows()

http://www.kler.cn/a/228338.html

相关文章:

  • 【RabbitMQ 消息丢失常见情况分析】
  • Node.js——express中间件(全局中间件、路由中间件、静态资源中间件)
  • Debian 上安装PHP
  • CANoe Trace窗口
  • IOS 安全机制拦截 window.open
  • python学opencv|读取图像(四十)掩模:三通道图像的局部覆盖
  • 【ARM Trace32(劳特巴赫) 使用介绍 3.1 -- 不 attach core 直接访问 memory】
  • 【linux】校招中的“熟悉linux操作系统”一般是指达到什么程度?
  • ubuntu 安装 ffmpeg 6.0
  • 设计模式概述
  • 如何结合ChatGPT生成个人魔法咒语词库
  • 【UE 材质】球形遮罩材质
  • 【力扣经典面试题】189. 轮转数组
  • C++新特性 扩展和聚合类型
  • 网易腾讯面试题精选----50 个 Git 面试问题
  • 笔记本电脑的WIFI模块,突然不显示了,网络也连接不上
  • 计算机软件能力认证考试CCF-202312-1 仓库规划
  • 《剑指 Offer》专项突破版 - 面试题 30 和 31:详解如何设计哈希表以及利用哈希表设计更加高级、复杂的数据结构
  • 远程桌面时连接不上远程计算机是什么问题
  • YOLOv8改进 | 检测头篇 | 重参数化检测头RepHead解决困难样本检测(全网独家首发)
  • Ubuntu Linux 下安装和卸载cmake 3.28.2版本
  • Stable diffusion使用和操作流程
  • 记录一下怎么重装服务器
  • Java设计模式-模板方法模式(14)
  • Stable Diffusion 模型下载:Juggernaut XL - V8+RunDiffusion
  • 【Java 数据结构】对象的比较