opencv 中值滤波

news2024/11/28 16:32:42

 

中值滤波是一种常用的图像滤波算法,是在像素点周围进行多个点的中值滤波,将点的灰度值根据其周围像素点的灰度值进行平均,并使这些点的灰度值具有相似性,以达到平滑去噪的目的。中值滤波在图像处理中应用广泛,在图像滤波和图像增强处理中得到了广泛应用。 中值滤波的原理如下: (1)中值滤波是一种通过计算灰度图像各像素灰度值的均值来实现去噪的算法。它采用灰度均值来代替灰度方差,在保证灰度图像的基本信息不变的同时,滤除噪声。中值滤波的实质是通过对图像进行局部统计和分析,从而确定最佳平滑窗口大小和最佳方向。 (2)中值滤波在图像处理中,利用灰度均值来代替灰度方差是最为简单的一种方法。该算法虽然简单易用,但其对噪声抑制效果不佳。而利用灰度均值来代替灰度方差,其优点在于可以滤除噪声,保留细节信息。 (3)中值滤波是对一个点进行多个点的中值计算,然后根据这个点周围像素点的灰度值进行平均来达到去噪目的。

  • 1、算法思想

    中值滤波是一种基于统计分析的图像处理技术,其基本思想是利用灰度均值代替灰度方差进行图像去噪。它的基本原理是在灰度值空间中,将图像分成若干个相等大小的窗口,并在每个窗口内计算每个像素点的灰度值与邻域窗口中该像素点的灰度值之比,将这一比值作为该像素点的一个灰度特征向量,然后对这一特征向量进行中值滤波,并将其与邻域窗口中所有像素点的灰度值之比加权平均,得到平滑后的图像。 在滤波过程中,往往是在需要滤除噪声的区域内加入噪声,以达到更好的滤波效果。这样在不需要滤除噪声区域内就会出现一些灰度特征不明显、噪声较多的像素点,从而影响图像质量。因此,中值滤波算法不仅具有滤除噪声能力,而且具有良好的边缘保持能力。

  • 2、算法流程

    (1)图像的灰度化:对于每一个像素,其灰度(灰度值)都用一个亮度(亮度值)来描述,并用一个最大亮度(最大值)、最小亮度(最小值)和中值来表示。 (2)求灰度值的均值:对于每一个像素点,用其周围相邻的几个像素点的灰度值与该像素点的灰度值之差计算均值。 (3)确定中值:通过对均值的比较,确定哪几个像素点作为当前像素点。 (4)选择平滑窗口:为了抑制噪声,可根据图像的灰度特征和噪声的特点选择适当大小的平滑窗口。 (5)计算平均值:将当前像素点与其他相邻像素点进行比较,如果当前像素点与其他相邻像素点的灰度相近,则该像素点作为当前像素点。 (6)输出结果:将所得到的中值作为输出结果。 (7)参数设置:设置平滑窗口大小为几,使平滑窗口内所有像素均能获得平滑效果,从而达到去除噪声的目的。

  • 3、窗口大小

    窗口大小决定了窗口中像素点的多少,也就是决定了滤波处理的效果。窗口太大,则在滤波过程中,由于噪声点被淹没而使滤波效果变差;而窗口太小,则噪声点被淹没而使滤波效果变差。因此,选择合适的窗口大小是很重要的。 常用的中值滤波窗口大小选择原则是:以图像像素为单位,相邻两个像素的中值之差不能超过该像素灰度值的一半。 一般情况下,对于小图像窗口选取小一些;对于大图像窗口选取大一些。例如:对于300×300的图像,可以选择: (1)当窗口大小为4时,对噪声点最多处理50个像素;

  • 4、阈值设置

    中值滤波是一种简单、有效的图像滤波算法。它具有以下优点: (1)有效抑制噪声,保留图像细节,对灰度图像的滤波效果较好。 (2)保持了图像的边缘和轮廓,消除了由于图像灰度值突变造成的斑点。 (3)对噪声具有很强的鲁棒性,一般情况下,噪声较多时,滤波效果好。 (4)避免了对图像进行拉伸处理,避免了图像拉伸后产生的条纹和斑点现象。 (5)可以得到良好的滤波效果,能够保持图像中的边缘、纹理、形状等信息。如果需要对图像进行增强处理,那么可以在中值滤波前增加一步中值增强处理,以达到更好的增强效果。 (6)可以对多幅图像进行中值滤波,并能自动设置阈值。这是中值滤波中最重要的参数之一。 (7)中值滤波算法简单、易于实现、计算量较小,因此在实时处理和实时成像等方面得到了广泛应用。 (8)算法处理速度快,运算速度较快,适合于实时处理。

  • 5、中值计算

    中值滤波是一种常用的图像处理技术,它在一定程度上有效地抑制了噪声,但是噪声可能会被保留下来。为了消除噪声,人们设计出了许多中值滤波的方法,常见的方法有平均法、中值平均法和自适应中值法等。这些方法在一定程度上都可以实现对图像的平滑去噪,但其效果并不是很理想。 为了获得较好的效果,人们在中值滤波方法中引入了一个参数—加权中值,它反映了对图像进行处理时所需要的信息。加权中值就是在像素点周围选取若干个点,对这些点计算它们的均值。其计算公式为: 其中:i是像素点;s是一个与i相邻的点,它与i的距离为h (s); h (s)代表第k个像素点的均值; a、b、c分别代表第k个像素点i的均值、j、k。 中值滤波算法最大的优点是它可以平滑噪声,提高图像质量,而且滤波结果清晰稳定,在一定程度上减少了噪声对后续处理所造成的干扰。

  • 6、平滑处理

    在图像处理中,通常采用中值滤波对图像进行平滑处理。中值滤波是一种基本的图像平滑技术,它能在保持图像特征的同时,消除由于噪声引起的干扰。它主要用于解决图像噪声、边缘模糊、纹理失真等问题。 (1)平滑窗口大小。传统中值滤波采用窗口大小固定的方法,它在处理过程中以一定的规律不断地改变窗口大小,当窗口大小与噪声强度成比例时,才能达到最好的去噪效果。而中值滤波则采用固定窗口大小,它在处理过程中不考虑噪声强度的影响,从而能够获得最好的去噪效果。 (2)滤波方向。传统中值滤波一般采用顺时针或逆时针方向进行滤波处理,而中值滤波则可根据图像中噪声所处位置进行选择,从而更有效地滤除噪声。

  • 7、输出结果

    (1)算法的执行过程中,需要考虑到像素值是否均匀,否则会出现局部峰值。当存在局部峰值时,可以判断出图像中可能存在的噪声点。对于灰度图像,通常不需要对其进行中值滤波处理,因为图像的灰度分布不均匀,也很难找出噪声点。但是对于彩色图像来说,如果像素值分布均匀的话,可以直接判断出图像中存在的噪声点。 (2)算法输出结果主要有三种情况: 第一种情况是直接输出结果(即中值滤波后): 第二种情况是在输出结果后进行中值滤波再输出结果,即将中滤波窗口作为原窗口的一部分进行处理。这种方法对噪声抑制的效果非常好。 这种方法虽然没有第一种方法处理效果好,但它有一个好处就是能对噪声起到很好的抑制作用。 (3)算法中通常会涉及到滤波窗口大小的选取,一般选取小窗口即可,即保证了对噪声抑制效果又能达到较好的图像质量。但是如果窗口太小,可能导致图像细节被破坏;如果窗口太大,又容易导致信息丢失。

以下是常用的OpenCV中值滤波代码:

1. 对灰度图像进行中值滤波
```python
import cv2
# 读取灰度图像
img = cv2.imread('image.jpg', 0)
# 中值滤波
img_median = cv2.medianBlur(img, 5)
# 显示原图和中值滤波后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Median Filtered Image', img_median)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
2. 对彩色图像进行中值滤波
```python
import cv2
# 读取彩色图像
img = cv2.imread('image.jpg')
# 中值滤波
img_median = cv2.medianBlur(img, 5)
# 显示原图和中值滤波后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Median Filtered Image', img_median)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
3. 对视频进行实时中值滤波
```python
import cv2
# 打开摄像头
cap = cv2.VideoCapture(0)
while True:
# 读取视频帧
ret, frame = cap.read()
# 中值滤波
frame_median = cv2.medianBlur(frame, 5)
# 显示原视频和中值滤波后的视频
cv2.imshow('Original Video', frame)
cv2.imshow('Median Filtered Video', frame_median)
# 按下q键退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头并关闭所有窗口
cap.release()
cv2.destroyAllWindows()
```

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

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

相关文章

利用java编写的项目设备调配系统代码示例(内含5种设备调配的算法)

利用java编写的项目设备调配系统代码示例(内含5种设备调配的算法) 一、设备调配方案二、设备匹配算法三、代码实现(java) 最近在做一个项目设备调配系统,分享一些干货!!! 一、设备…

Godot引擎 4.0 文档 - 入门介绍 - Godot 关键概念概述¶

本文为Google Translate英译中结果,DrGraph在此基础上加了一些校正。英文原版页面:Overview of Godots key concepts — Godot Engine (stable) documentation in English Godot 关键概念概述 每个游戏引擎都围绕您用来构建应用程序的抽象展开。在 Godo…

【mysql】库的操作+表的操作

文章目录 启动mysql登录mysql1.MySQL环境安装与基础认识修改端口号连接服务器服务器,数据库,表关系建表 第二讲_库与表的操作1.创建数据库2.创建数据库案例3.指明字符集和校验集校验规则对数据库的影响不区分大小写的查询以及结果:区分大小写…

SQL Backup Master 6.3.6 Crack

SQL Backup Master 能够为用户将 SQL Server 数据库备份到一些简单的云存储服务中,例如 Dropbox、OneDrive、Amazon S3、Microsoft Azure、box,最后是 Google Drive。它能够将数据库备份到用户和开发者的FTP服务器上,甚至本地机器甚至网络服务…

速通二次型、二次型标准型、二次型规范型

浅过二次型 理解二次型可以从二次型的多项式入手: 显然,在系数都为实数的情况下,二次型矩阵即为一个实对称矩阵。 取一个代入值的例子就是: 二次型的标准型 OK,再从二次型的标准型的多项式入手,如下&…

FPGA System Planner(FSP)使用手册

FSP工具是cadence公司为了FPGA/PCB协同设计而推出的一个解决方案工具包。它的主要工作是由软件来自动生成、优化FPGA芯片的管脚分配,提高FPGA/PCB设计的工作效率和连通性。FSP完成两顷重要工作:一、可以自动生成FPGA芯片的原理图符号(symbol);二、自动生成、优化和更改FPG…

C++模板(上)

文章目录 模板函数模板函数模板的实例化 类模板总结 模板 模板是C种为了方便用户对于一些场景的使用&#xff0c;引入的新概念&#xff0c;使得我们的代码不会冗余 template关键字 template关键字的意思就是模板&#xff0c;语法为&#xff1a;template<typename T1,type…

内网渗透之Linux权限维持-OpenSSHPAM后门SSH软链接公私钥登录

0x01替换版本-OpenSSH后门 原理&#xff1a;替换本身操作系统的ssh协议支撑软件openssh&#xff0c;重新安装自定义的openssh,达到记录帐号密码&#xff0c;也可以采用万能密码连接的功能&#xff01; 可以修改软件版本和删除安装记录 1.环境准备&#xff1a; yum -y install…

【Java EE 初阶】网络初识

目录 1.网络互连 1.局域网&#xff1a; 2.广域网WAN 2.网络通信基础 3.IP地址&#xff1a;端口号 4.协议 1.五元组 2.协议分层 1.为什么要用网络分层&#xff1f; 3.OSI七层模型 4.TCP/IP五层&#xff08;或四层&#xff09;模型 5.封装和分用 1.应用层 2.传输层A…

Oracle数据库中了locked1勒索病毒攻击后怎么办,什么是locked1勒索病毒

Oracle数据库是一种被集团企业广泛使用的关系型数据库管理系统&#xff0c;但是随着科学技术的不断发展&#xff0c;在现代互联网环境中数据库安全性成为了一个非常重要的问题。而其中主要的威胁就是勒索病毒攻击。一旦数据库被勒索病毒攻击入侵&#xff0c;许多重要的数据就会…

【JVM】3. 运行时数据区及程序计数器

文章目录 3.1. &#x1f379;运行时数据区3.1.1. &#x1f942;概述3.1.2. &#x1f942;线程3.1.3. &#x1f942;JVM系统线程 3.2. &#x1f379;程序计数器(PC寄存器) 3.1. &#x1f379;运行时数据区 3.1.1. &#x1f942;概述 本节主要讲的是运行时数据区&#xff0c;也就…

跟我一起使用 compose 做一个跨平台的黑白棋游戏(2)界面布局

前言 在上一篇文章中&#xff0c;我们讲解了实现这个游戏的总体思路&#xff0c;这篇文章我们将讲解如何实现游戏界面。 本文将涉及到 compose 的自定义绘制与触摸处理&#xff0c;这些内容都可以在我往期的文章中找到对应的教程&#xff0c;如果对这部分内容不太熟悉的话&am…

论文阅读_语音合成_VALL-E

论文阅读 number headings: auto, first-level 2, max 4, _.1.1 name_en: Neural Codec Language Models are Zero-Shot Text to Speech Synthesizers name_ch: 神经网络编解码器语言模型实现零样本TTS paper_addr: http://arxiv.org/abs/2301.02111 date_read: 2023-04-25 da…

Docker代码环境打包进阶 - DockerHub分享镜像

1. Docker Hub介绍 Docker Hub是一个广泛使用的容器镜像注册中心&#xff0c;为开发人员提供了方便的平台来存储、共享和分发Docker容器镜像。它支持版本控制、访问控制和自动化构建&#xff0c;并提供了丰富的公共镜像库&#xff0c;方便开发人员快速获取和使用各种开源应用和…

Redis+Lua脚本防止超卖

超卖就是因为查询库存和扣减库存两个操作不是原子性操作&#xff0c;通过rua脚本执行这两个操作可以保证这两个操作原子性 判断库存量是不是大于等于1&#xff0c;如果大于等于1对库存减1&#xff0c;否则就不去减库存 StringBuilder sb new StringBuilder();sb.append("…

【数据分享】我国地级市绿地利用现状数据(9个指标\Shp格式)

绿地是城市生态的重要组成部分&#xff0c;在很多分析中都会用到绿地数据&#xff01;之前我们分享过Shp和Excel格式的全国地级市2003-2020年绿地面积数据&#xff08;可查看之前文章获悉详情&#xff09;&#xff0c;以及中国31个主要城市的绿地空间分布的栅格数据&#xff08…

vue中使用colorthief获取图片的主色调成分

colorthief官网 https://lokeshdhakar.com/projects/color-thief/#examples 安装 npm i --save colorthief yarn add colorthief 使用案例 <template><div class"box app" :style"{ background: bodyBgColor }"><div class"img-item&…

NSS LitCTF Web 部分wp

目录 1、PHP是世界上最好的语言&#xff01;&#xff01; 2、这是什么&#xff1f;SQL &#xff01;注一下 &#xff01; 3、Ping 4、作业管理系统 5、我Flag呢&#xff1f; 6、1zjs 7、Vim yyds 8、Http pro max plus 1、PHP是世界上最好的语言&#xff01;&#xff01…

C++中vector的用法

博主简介&#xff1a;Hello大家好呀&#xff0c;我是陈童学&#xff0c;一个与你一样正在慢慢前行的人。 博主主页&#xff1a;陈童学哦 所属专栏&#xff1a;CSTL 前言&#xff1a;Hello各位小伙伴们好&#xff01;欢迎来到本专栏CSTL的学习&#xff0c;本专栏旨在帮助大家了解…

Compose太香了,不想再写传统 xml View?教你如何在已有View项目中混合使用Compose

前言 在我的文章 记一次 kotlin 在 MutableList 中使用 remove 引发的问题 中&#xff0c;我提到有一个功能是将多张动图以N宫格的形式拼接&#xff0c;并且每个动图的宽保证一致&#xff0c;但是高不保证一致。 在原本项目中我使用的是传统 view 配合 RecyclerView 和 GridL…