【OpenCV计算机视觉】图像处理——平滑

news2024/12/18 11:33:13

本篇文章记录我学习【OpenCV】图像处理中关于“平滑”的知识点,希望我的分享对你有所帮助。

目录

一、什么是平滑处理

1、平滑的目的是什么? 

2、常见的图像噪声 

(1)椒盐噪声

​编辑(2) 高斯噪声

(3) 泊松噪声

(4) 斑点噪声

 二、图像平滑处理的方法

1、均值滤波

 2、高斯滤波

(1)高斯函数 

(2)高斯滤波的卷积核 

(3)高斯滤波的操作过程

 3、中值滤波

(1)中值滤波的原理 

(2)中值滤波的步骤

​编辑(3)中值滤波的优缺点 

 4、双边滤波

(1)双边滤波的原理 

(2)双边滤波的数学公式 

 (3)双边滤波的步骤

(4)双边滤波的优缺点 


一、什么是平滑处理

在图像处理中,"平滑"是指减少图像中噪声或细节的过程,目的是让图像看起来更加平滑、柔和,或是突出主要特征,同时抑制不必要的细节。平滑操作常常用于噪声去除、边缘检测之前的预处理等任务。

因此,你只需明白图像处理中“平滑”操作就是一种“预处理”的手段,目的是为后续的处理工作做铺垫。 

1、平滑的目的是什么? 

  • 噪声去除图像在采集过程中可能会受到各种噪声的影响,平滑操作能够有效减小噪声对图像质量的影响。
  • 特征提取通过平滑去除细节,有助于在后续处理(如边缘检测、形态学处理等)中更好地提取关键特征。
  • 图像压缩某些压缩算法依赖于图像的平滑化,以降低数据冗余。

2、常见的图像噪声 

在介绍平滑处理的方法时,我想想介绍一下常见的图像噪声。

图像噪声是指在图像中出现的无意义的、随机的像素值,通常由传感器、信号处理或环境干扰等因素引起。这些噪声会破坏图像的质量,使得图像显得模糊、杂乱、失真。

(1)椒盐噪声

这种噪声在图像中表现为一些亮白色或黑色的随机小点,通常是由数据传输错误或压缩过程中的问题引起的。

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

(2) 高斯噪声

是一种呈现正态分布的噪声,通常表现为图像中的像素值出现细微的随机波动。高斯噪声在许多实际场景中都很常见,尤其是在低光照条件下。

高斯噪声(GaussNoise)是指概率密度函数服从高斯分布(正态分布)的一类噪声。除了常用抑制噪声的方法外,常采用数理统计方法对高斯噪声进行抑制

(3) 泊松噪声

在低光照条件下,图像的噪声可能呈现泊松分布,这种噪声通常表现为图像中某些区域的像素值有较大的波动。

(4) 斑点噪声

常见于雷达成像或医学成像中,它的特点是图像局部区域的像素值变化比较剧烈,通常是由成像设备的工作原理或测量误差引起的。

 二、图像平滑处理的方法

1、均值滤波

  • 原理:将每个像素值替换为其邻域内像素的平均值。
  • 效果:均值滤波能够有效去除噪声,但会导致图像模糊,特别是当噪声较多时。
  • 实现:使用一个固定大小的卷积核(如 3x3、5x5)对图像进行卷积操作。

均值滤波(MeanFiltering)就是对图像的所有像素点进行取均值,即以一个方形区域为单位,将该区域的中心像素点赋值为区域内所有像素点的平均值。

​​​​​​​

 数学表达式:

设图像为二维矩阵,图像的像素值表示为I(x,y),其中xy是图像的横纵坐标。

  • 均值滤波器通常采用一个大小为k*k的卷积核,表示为 K
  • 假设滤波后的像素值\dot{I}(x,y) 是当前像素周围k*k区域的平均值,可以通过卷积操作来实现:

其中(x,y)是当前像素点的位置,k*k是滤波器的尺寸。

  • 在这个过程中,卷积核的每个元素都等于\frac{1}{k^{2}},即均值滤波器是一个均匀的滤波器。

均值滤波的步骤: 

  1. 选择滤波器大小:选择一个 k*k的滤波器大小(通常为奇数,例如 3×33×3, 5×55×5, 7×77×7 等),这个大小决定了每个像素周围的邻域范围。
  2. 遍历图像:遍历图像中的每一个像素点,对于每个像素点,计算其周围邻域内像素的均值。
  3. 更新像素值:将该邻域的均值赋给当前像素点,完成平滑处理。

在Python中,可以通过使用OpenCV库来实现均值滤波。 

import cv2
import numpy as np

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

# 使用3x3的均值滤波器
result = cv2.blur(image, (3, 3))

# 显示原图和处理后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Filtered Image', result)

# 等待按键关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

此代码利用OpenCV中的cv2.blur()函数应用3x3大小的均值滤波器对图像进行平滑处理。 

均值滤波是一种简单而有效的图像去噪方法,适用于去除随机噪声。然而,由于它会模糊图像细节,尤其是边缘,因此在需要保留细节的场景下,可能需要使用更复杂的滤波算法(如高斯滤波或中值滤波)。 

 2、高斯滤波

  • 原理:利用高斯分布对图像进行加权平均处理,权重较高的像素对结果的贡献较大,权重较低的像素对结果的影响较小。
  • 效果:高斯滤波比均值滤波保留更多的图像结构,减少了噪声的同时,边缘损失较少,平滑效果较为自然。
  • 实现:使用高斯函数生成卷积核,然后用该卷积核对图像进行卷积操作。

高斯滤波(Gaussian Filtering)是一种常见的图像处理方法,主要用于去除图像中的噪声或平滑图像。它通过卷积运算与高斯函数(正态分布函数)相结合,对图像进行模糊处理。高斯滤波的核心思想是:使用一个高斯核(即一个矩阵)与图像进行卷积,从而在图像上应用模糊效果,减弱细节并减少噪声。

(1)高斯函数 

高斯滤波的基础是高斯函数,它的公式如下:

  • G(x,y)是高斯分布的值,表示在点(x,y)处的权重。
  • \sigma是高斯函数的标准差,控制高斯分布的宽度。标准差越大,平滑效果越强;标准差越小,平滑效果越弱。
  • (x,y)是相对于高斯滤波器中心点的坐标。

这个高斯函数呈现钟形曲线,值在中心最大,随着远离中心的距离增大,值逐渐减小。因此,高斯滤波会根据距离中心的远近对周围像素赋予不同的权重,离中心越远的像素权重越小。

(2)高斯滤波的卷积核 

高斯滤波通常通过一个卷积核(或称为滤波器)来实现,该核是基于二维高斯函数构造的。卷积核的大小决定了滤波的效果,通常为奇数尺寸(如3×3、5×5、7×7等)

 例如,一个简单的3×3高斯核可能如下所示(假设\sigma =1):

这个矩阵表示了高斯滤波器的权重。每个像素的值都被乘以相应的位置权重,然后加总,得到新的像素值。高斯滤波器对图像进行卷积时,权重较大的像素会对中心像素的影响更大,而权重较小的像素则对其影响较小。

(3)高斯滤波的操作过程

高斯滤波的基本操作过程可以分为以下几步:

  1. 选择卷积核大小和标准差 \sigma:选择一个适合的高斯核,并确定标准差\sigma来控制平滑程度。

  2. 对每个像素进行卷积操作:对图像中的每个像素位置,使用高斯核与其周围的像素进行卷积运算。卷积的计算方式是:将高斯核与图像像素值逐点相乘,得到加权和。

  3. 更新像素值:将卷积运算得到的加权和作为该像素的新值。

  4. 处理边界问题:在边缘或角落处,由于周围像素不足以填满整个卷积核,可以采用零填充、镜像填充等方法来处理。

 在Python中,可以通过使用OpenCV库来实现高斯滤波。

import cv2

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

# 使用高斯滤波进行图像平滑,(5, 5)为核大小,0为自动计算标准差
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)

# 显示原图与处理后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Gaussian Blurred Image', blurred_image)

# 等待按键关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

 3、中值滤波

  • 原理:将每个像素值替换为其邻域内所有像素值的中位数。
  • 效果:中值滤波对于去除椒盐噪声(即黑白像素的随机分布)非常有效,比均值滤波更能保留边缘信息。
  • 实现:遍历图像,每次将一个窗口内的像素值排序,取其中间的值作为当前像素的值。

中值滤波(Median Filtering)是一种常用的图像平滑和去噪方法,尤其在处理椒盐噪声时表现优异。它的基本思想是:对于图像中的每个像素,将该像素的邻域内像素值按大小排序,然后用排序后的中位数值替代当前像素的值。中值滤波不仅能有效去除噪声,还能较好地保留图像的边缘特征。

(1)中值滤波的原理 

与均值滤波不同,中值滤波并不是取邻域像素的平均值,而是选择邻域内像素值的中位数。中位数是指一组数据按大小排序后,位于中间位置的值。对于一个大小为k*k的邻域窗口,将该邻域的像素值排序,并取中间的值作为当前像素的新值。

例如,对于一个 3×3 的邻域窗口:

[ 7, 2, 3 ]
[ 5, 8, 1 ]
[ 4, 9, 6 ]

排序后的像素值为:

[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

中位数是排序后的中间值,位置为第五个元素,即 5。因此,这个窗口中心的像素值将被替换为 5

(2)中值滤波的步骤

  1. 选择窗口大小:通常选择一个k*k的邻域窗口(例如 3×3, 5×5 等)。窗口大小为奇数,确保有一个明确的中心点。
  2. 遍历图像:对图像中的每个像素点进行操作,取该像素及其邻域的像素值。
  3. 排序并替换:将邻域内的像素值排序,取排序后的中位数,并用该中位数值替代当前像素的值。
  4. 处理边界:对于图像的边缘像素,邻域可能会超出图像范围,通常可以采取填充边界或镜像填充等方法处理。

(3)中值滤波的优缺点 

优点:

  • 去噪效果好:中值滤波能够有效去除椒盐噪声,因为椒盐噪声通常是极端的亮点或暗点,而中值滤波能够将这些极端值替换为邻域的中位数。
  • 保边缘能力强:相比均值滤波,中值滤波对图像的边缘信息影响较小,因为它不会对像素值进行平均化,而是通过排序选择合适的中位数来替换。
  • 无需假设噪声分布:与高斯滤波等方法不同,中值滤波不依赖于噪声的统计特性,因此对不同类型的噪声具有较好的鲁棒性。

缺点:

  • 计算复杂度较高:对于每个像素,需对邻域像素进行排序,时间复杂度为O(k^{2}\log (k^{2})),尤其是当图像较大时,计算量较大。
  • 对细节有一定影响:尽管中值滤波能有效去除噪声,但在处理较复杂的图像时,过度滤波可能会导致图像细节的损失。

在OpenCV中,可以使用cv2.medianBlur()函数实现中值滤波。 

import cv2

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

# 使用3x3的中值滤波
median_blurred_image = cv2.medianBlur(image, 3)

# 显示原图与处理中值滤波后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Median Filtered Image', median_blurred_image)

# 等待按键关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.medianBlur(image, ksize):这个函数接受两个参数,image 是输入图像,ksize 是滤波器的大小,通常为奇数(例如 3、5、7 等)。它会使用一个 k×k 的邻域进行中值滤波。

中值滤波是一种有效的图像去噪方法,尤其适用于去除椒盐噪声。它的主要优点是能够在去噪的同时保留边缘和细节信息,因此在许多图像处理和计算机视觉任务中得到了广泛应用。尽管它的计算复杂度相对较高,但它对于处理噪声的鲁棒性和效果常常使其成为首选方法之一。

 4、双边滤波

  • 原理:双边滤波不仅考虑像素空间中的邻近关系,还考虑像素值的相似性,能够在平滑图像的同时保留边缘。
  • 效果:在去噪的同时能较好地保留图像的边缘信息,适用于去除细微噪声且保持图像细节的场景。
  • 实现:双边滤波结合了空间距离和像素值差异进行加权处理,相较于其他滤波器,计算复杂度较高。

双边滤波(Bilateral Filtering)是一种在图像处理中常用的非线性滤波方法,能够在平滑图像的同时保留图像的边缘信息。与传统的线性滤波方法(如均值滤波、高斯滤波)不同,双边滤波不仅考虑像素的空间邻近性,还考虑像素值的相似性,这使得它在处理图像细节和边缘时表现出色。 

(1)双边滤波的原理 

双边滤波的核心思想是在每个像素的邻域内进行加权平均,但权重不仅依赖于空间距离,还依赖于像素值的相似度。这种加权方式使得在平滑区域(没有边缘的地方)能够有效地进行平滑,而在边缘附近则能够保留边缘信息。

对于图像中的每个像素点 p,双边滤波通过以下步骤进行:

  1. 空间权重:基于像素之间的空间距离d(p,q),越靠近的像素,其权重越大。
  2. 像素值权重:基于像素值之间的相似度\left | \left | I(p)-I(q) \right | \right |,像素值相似的点给予更高的权重。
  3. 加权平均:最终通过计算空间和像素值的加权平均来得到新的像素值。

(2)双边滤波的数学公式 

对于图像中一个像素I(p),其经过双边滤波后的值{I}'(p)是通过加权平均其邻域内像素值得到的,公式如下:

 (3)双边滤波的步骤

  1. 计算邻域内像素的空间权重:使用高斯函数计算像素之间的空间距离d(p,q)权重。
  2. 计算像素值的相似性权重:使用高斯函数计算像素值之间的差异\left | I(p)-I(q) \right |权重。
  3. 计算加权平均:对每个像素,考虑空间权重和像素值权重的加权平均,得到新的像素值。
  4. 归一化处理:为了使得加权平均的结果合理,需要对加权和进行归一化,通常会通过计算一个归一化因子W_{p}来完成。

(4)双边滤波的优缺点 

优点:

  • 边缘保留:双边滤波能够在去噪的同时保持图像的边缘信息,因此特别适合去除噪声同时保持细节的任务。
  • 非线性:由于双边滤波是基于像素值的相似度加权的,因此它是非线性的,可以很好地处理图像中的各种噪声。
  • 适用性广泛:双边滤波不仅可以用于图像去噪,还可以用于图像平滑、纹理去除等多种应用。

缺点:

  • 计算量大:由于双边滤波需要计算每个像素与其邻域内其他像素的空间距离和像素值差异,因此其计算量较大,尤其是在高分辨率图像上,效率较低。
  • 参数调节困难:双边滤波有两个重要的参数:空间权重的标准差\sigma _{d}和像素值权重的标准差\sigma _{r}​,需要根据图像的不同特性进行调节,调节不当可能会导致过度平滑或保留过多噪声。

在OpenCV中,可以使用cv2.bilateralFilter()函数实现双边滤波。 

import cv2

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

# 使用直径为15,标准差为75的双边滤波
bilateral_filtered_image = cv2.bilateralFilter(image, d=15, sigmaColor=75, sigmaSpace=75)

# 显示原图与双边滤波后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Bilateral Filtered Image', bilateral_filtered_image)

# 等待按键关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2261563.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

秒优科技-供应链管理系统 login/doAction SQL注入漏洞复现

0x01 产品简介 秒优科技提供的供应链管理系统,即秒优SCM服装供应链管理系统,是一款专为服装电商企业设计的全方位解决方案。是集款式研发、订单管理、物料管理、生产管理、工艺管理、收发货管理、账单管理、报表管理于一体的服装电商供应链管理解决方案。它涵盖了从企划到开…

快速掌握源码部署Filebeat

文章目录 1. 裸金属安装1.1 压缩包方式安装1.2 yum方式安装 2. docker安装3. K8s安装 项目使用了Filebeat,现在需要运行在ARM架构的服务器上,但是Filebeat官方没有提供,需要自己编译一份 filebeat等组件的源码地址 https://github.com/elasti…

ST-Linker V2 烧录器详解说明文档

目录 ST-Linker v2烧录器介绍 STM8烧录口 STM32烧录接口 JTAG烧录接口 ​​​​​​​ ​​​​​​​ ​​​​​​​ 编写不易,仅供学习,请勿搬运,感谢理解 ST-Linker v2烧录器介绍 图片中是两种IC芯片的烧录器&#x…

同三维TL201H2S4 4+2机手术互动录播主机产品

同三维TL201H2S4 42机手术互动录播主机产品 录制点播、直播导播、互动、音频处理器、中控等多功能为一体 6路视频输入:4路SDI1路HDMI1(4K30)1路(3选1:HDMI2/2路VGA) 2路视频输出:1路HDMI1(4K30)1路(2选1:VGA和HDMI2) 5路音频输入&#xf…

RabbitMQ实现网络分区

RabbitMQ实现网络分区 网络分区的判断应答时间范围判定方式日志方式命令查看监控页面提示API查看 模拟网络分区封禁端口封禁IP封禁网卡挂起恢复操作系统 网络分区的影响未配置镜像队列情况下已配置镜像队列情况下 处理网络分区手动处理恢复步骤挑选信任分区重启方式&#xff08…

一、LRU缓存

LRU缓存 1.LRU缓存介绍2.LRU缓存实现3.LRU缓存总结3.1 LRU 缓存的应用3.2 LRU 缓存的优缺点 1.LRU缓存介绍 LRU是Least Recently Used 的缩写,意为“最近最少使用”。它是一种常见的缓存淘汰策略,用于在缓存容量有限时,决定哪些数据需要被删…

【大前端vue:组件】鼠标上移 出现动画

【大前端vue&#xff1a;组件】鼠标上移 出现动画 <template><div class"view-introduction-culture"><div class"culture-wrapper"><h2 class"culture-title">鼠标上移&#xff1a;展示动画 显示出来</h2><di…

解决电脑网速慢问题:硬件检查与软件设置指南

电脑网速慢是许多用户在使用过程中常见的问题&#xff0c;它不仅会降低工作效率&#xff0c;还可能影响娱乐体验。导致电脑网速慢的原因多种多样&#xff0c;包括硬件问题、软件设置和网络环境等。本文将从不同角度分析这些原因&#xff0c;并提供提高电脑网速的方法。 一、检查…

快速本地化部署 OnlyOffice服务 ( Linux+Docker)

文章目录 一、OnlyOffice介绍&#x1f4d6;二、集成OnlyOffice&#x1f9e9;2.1 环境准备&#x1f5a5;️2.2 搜索镜像2.3 拉取镜像2.4 查看镜像2.5 创建容器2.6 进入容器配置2.7 重启服务2.8 添加字体字号2.9 测试OnlyOffice服务 三、在线预览office文档四、Cpolar内网穿透 一…

Leecode刷题C++之形成目标字符串需要的最少字符串数①

执行结果:通过 执行用时和内存消耗如下&#xff1a; 代码如下&#xff1a; class Solution { public:int minValidStrings(vector<string>& words, string target) {auto prefix_function [](const string& word, const string& target) -> vector<…

51c嵌入式~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/11529950 一、不同的电平信号的MCU怎么通信 “电平转换”电路 ​ 先说一说这个电路的用途&#xff1a;当两个MCU在不同的工作电压下工作&#xff08;如MCU1 工作电压5V&#xff1b;MCU2 工作电压3.3V&#xff09;&#xf…

2024年第十五届蓝桥杯青少组C++国赛—割点

割点 题目描述 一张棋盘由n行 m 列的网格矩阵组成&#xff0c;每个网格中最多放一颗棋子。当前棋盘上已有若干棋子。所有水平方向或竖直方向上相邻的棋子属于同一连通块。 现给定棋盘上所有棋子的位置&#xff0c;如果要使棋盘上出现两个及以上的棋子连通块&#xff0c;请问…

Java线程池解读

Java 线程池是一个提供多线程管理和调度的工具&#xff0c;通常用来处理多个并发任务。线程池能够帮助有效管理线程的创建、调度、执行和销毁&#xff0c;避免频繁的线程创建和销毁&#xff0c;提高系统性能。 前言 Java 线程池是面试中的常客&#xff0c;面试官经常会问线程…

如何为IntelliJ IDEA配置JVM参数

在使用IntelliJ IDEA进行Java开发时&#xff0c;合理配置JVM参数对于优化项目性能和资源管理至关重要。IntelliJ IDEA提供了两种方便的方式来设置JVM参数&#xff0c;以确保你的应用程序能够在最佳状态下运行。本文将详细介绍这两种方法&#xff1a;通过工具栏编辑配置和通过服…

【CC2530开发基础篇】继电器模块使用

一、前言 1.1 开发背景 本实验通过使用CC2530单片机控制继电器的吸合与断开&#xff0c;深入了解单片机GPIO的配置与应用。继电器作为一种常见的电气控制元件&#xff0c;广泛用于自动化系统中&#xff0c;用于控制大功率负载的开关操作。在本实验中&#xff0c;将通过GPIO口…

通过解调使用正则化相位跟踪技术进行相位解包裹

1. 绪论 光学计量学通常使用光学干涉仪来测量各种物理量。1,2 根据应用的不同&#xff0c;可以使用多种类型的干涉仪&#xff0c;但它们的共同目标是产生一个由被测物理量调制的条纹图案。使用这种光束编码程序可以检测到的物理量范围非常广&#xff1a;深度测量、应变分析、温…

数字图像处理技术期末复习

1. 已知图像的分辨率和深度&#xff0c;怎么求图像的存储空间&#xff08;位&#xff0c;字节&#xff0c;KB&#xff09;&#xff1f; 题目&#xff1a; 已知图像的分辨率和深度&#xff0c;怎么求图像的存储空间&#xff08;位&#xff0c;字节&#xff0c;KB&#xff09;&a…

Elasticsearch 架构及 Lucene 索引结构原理入门

文章目录 Elasticsearch 整体架构Lucene 索引结构Lucene 倒排索引核心原理倒排索引倒排表&#xff08;Posting List&#xff09; Elasticsearch 整体架构 一个 ES Index 在集群模式下&#xff0c;有多个Node&#xff08;节点&#xff09;组成&#xff0c;每个节点就是ES的 inst…

人脸检测的若干思考!!!

1.目前主要有人脸检测方法分类&#xff1f; 主要包含两类&#xff1a;传统人脸检测算法和基于深度学习的人脸检测算法。 传统人脸检测算法主要可以分为4类&#xff1a; 基于知识、模型、特征和外观的人脸检测方法&#xff1b; 基于深度学习的方法&#xff1a;基于级联CNN的人脸…

突破时间与空间限制的富媒体百宝箱——智能工具箱:让云上内容生产更easy

“这是你的同款日常吗&#xff1f;老是在赶deadline&#xff0c;苦练PS还未出师&#xff0c;premiere、达芬奇真的好难&#xff0c;学python脑容量确实不够~打工人太难了~~” 来试试智能工具箱吧&#xff01;即来即用&#xff0c;一键实现办公自由。图片工具、视频工具、音频工…