图像处理:Python使用OpenCV 减少图片噪音

文章目录

      • 1. 均值滤波 (Mean Filtering)
      • 2. 高斯滤波 (Gaussian Filtering)
      • 3. 中值滤波 (Median Filtering)
      • 4.代码实现示例
      • 5.效果展示

在图像处理中,均值滤波、高斯滤波和中值滤波是三种常用的降噪方法。它们的实现原理各有不同:

1. 均值滤波 (Mean Filtering)

实现原理
均值滤波是通过计算滤波窗口内所有像素值的平均值来平滑图像。它是一种线性滤波器,能有效地减少噪声,但也会模糊图像的边缘。

步骤

  1. 选择一个大小为 ( k \times k ) 的窗口(滤波器核)。
  2. 将窗口在图像上滑动,每次计算窗口内所有像素的均值。
  3. 用该均值替换窗口中心的像素值。

公式
对于每个像素 ((i, j)),新的像素值 (I’(i, j)) 计算如下:

I ′ ( i , j ) = 1 k 2 ∑ m = − k 2 k 2 ∑ n = − k 2 k 2 I ( i + m , j + n ) I'(i, j) = \frac{1}{k^2} \sum_{m=-\frac{k}{2}}^{\frac{k}{2}} \sum_{n=-\frac{k}{2}}^{\frac{k}{2}} I(i+m, j+n) I(i,j)=k21m=2k2kn=2k2kI(i+m,j+n)

2. 高斯滤波 (Gaussian Filtering)

实现原理
高斯滤波使用高斯函数的权重来计算滤波窗口内像素的加权平均值。相比均值滤波,它能更好地保留边缘信息。高斯滤波器是一种线性滤波器,权重的分布是中心对称的高斯分布。

步骤

  1. 选择一个大小为 ( k \times k ) 的高斯窗口(滤波器核),并计算其权重。
  2. 将窗口在图像上滑动,每次计算窗口内像素的加权平均值。
  3. 用该加权平均值替换窗口中心的像素值。

公式
高斯函数的权重 ( G(x, y) ) 计算如下:

G ( x , y ) = 1 2 π σ 2 exp ⁡ ( − x 2 + y 2 2 σ 2 ) G(x, y) = \frac{1}{2\pi\sigma^2} \exp\left(-\frac{x^2 + y^2}{2\sigma^2}\right) G(x,y)=2πσ21exp(2σ2x2+y2)
对于每个像素 ((i, j)),新的像素值 (I’(i, j)) 计算如下:
I ′ ( i , j ) = ∑ m = − k 2 k 2 ∑ n = − k 2 k 2 G ( m , n ) ⋅ I ( i + m , j + n ) I'(i, j) = \sum_{m=-\frac{k}{2}}^{\frac{k}{2}} \sum_{n=-\frac{k}{2}}^{\frac{k}{2}} G(m, n) \cdot I(i+m, j+n) I(i,j)=m=2k2kn=2k2kG(m,n)I(i+m,j+n)

3. 中值滤波 (Median Filtering)

实现原理
中值滤波是通过选择滤波窗口内所有像素值的中值来平滑图像。它是一种非线性滤波器,特别适用于去除椒盐噪声,并且能很好地保留图像边缘。

步骤

  1. 选择一个大小为 ( k \times k ) 的窗口。
  2. 将窗口在图像上滑动,每次提取窗口内所有像素值。
  3. 将提取的像素值排序,选择中间值作为新的像素值。

公式
对于每个像素 ((i, j)),新的像素值 (I’(i, j)) 计算如下:

I ′ ( i , j ) = median { I ( i + m , j + n ) ∣ m , n ∈ [ − k 2 , k 2 ] } I'(i, j) = \text{median} \{ I(i+m, j+n) | m, n \in [-\frac{k}{2}, \frac{k}{2}] \} I(i,j)=median{I(i+m,j+n)m,n[2k,2k]}

4.代码实现示例

下面是使用OpenCV实现上述三种滤波方法的代码示例:

import cv2
import numpy as np
import matplotlib.pyplot as pltdef apply_mean_filter(image):return cv2.blur(image, (5, 5))def apply_gaussian_filter(image):return cv2.GaussianBlur(image, (5, 5), 1.0)def apply_median_filter(image):return cv2.medianBlur(image, 5)def display_images(original, mean_filtered, gaussian_filtered, median_filtered):titles = ['Original Image', 'Mean Filtered Image', 'Gaussian Filtered Image', 'Median Filtered Image']images = [original, mean_filtered, gaussian_filtered, median_filtered]for i in range(4):plt.subplot(2, 2, i+1), plt.imshow(cv2.cvtColor(images[i], cv2.COLOR_BGR2RGB))plt.title(titles[i])plt.xticks([]), plt.yticks([])plt.show()def main():image_path = 'path_to_your_image.jpg'  # 请替换为你的图像路径image = cv2.imread(image_path)if image is None:print(f"Error: Unable to load image at {image_path}")returnmean_filtered = apply_mean_filter(image)gaussian_filtered = apply_gaussian_filter(image)median_filtered = apply_median_filter(image)display_images(image, mean_filtered, gaussian_filtered, median_filtered)if __name__ == "__main__":main()
  1. 均值滤波:使用 cv2.blur(image, (5, 5)) 实现。
  2. 高斯滤波:使用 cv2.GaussianBlur(image, (5, 5), 1.0) 实现,其中 1.0 是标准差。
  3. 中值滤波:使用 cv2.medianBlur(image, 5) 实现。

5.效果展示

在本次实验中,明显中值滤波的效果更优
在这里插入图片描述

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

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

相关文章

Object类hashCode方法和equals方法源码

hashCode方法 顶级类Object里面的方法,所有类都是继承Object的,返回值int类型 根据一定的hash规则(存储地址、字段、或者长度等),映射成一个数值,即散列值 public static int hashCode(Object a[]) {if (a…

wps要会员才能把pdf分开,这不纯属智商税吗

我有一个文档 然后 我给你们写好了一个代码 from PyPDF2 import PdfReader, PdfWriterdef split_pdf(file_path, ranges, output_names):# Open the input PDF filewith open(file_path, rb) as pdf_file:reader = PdfReader(pdf_file)total_pages = len(reader.pages)if len…

Cookie、Session、Token的关系和区别

关系 Session与Cookie:Session通常依赖于Cookie来工作。当服务器为客户端创建一个Session时,它会在服务器上存储与客户端相关的信息,并将一个唯一的SessionID通过Cookie发送给客户端。客户端在后续的请求中会携带这个Cookie(包含…

北航数据结构与程序设计查找与排序编程题

查找与排序编程题 单词查找(查找——基本题)排座位(简)a 单词查找(查找——基本题) 【问题描述】 从标准输入中读入一个英文单词及查找方式,在一个给定的英文常用单词字典文件dictionary3000.…

如何使用SQL工具批量执行SQL文件?(以MySQL和SQLynx为例)

目录 1. 配置MySQL数据源 2. 打开 SQL 文件 3. 执行 SQL 文件 4. 检查执行结果 5. SQL文件示例 6. 注意事项 7. 总结 在现代数据库管理和操作中,批量执行 SQL 文件在 MySQL 中显现出其巨大的价值和不可替代的作用。通过将多个 SQL 语句集成在一个文件中进行批…

MySQL安装教程,包含root账户密码的修改(绿色版安装)---超简单好用

1、下载(mysql-8.0.27-winx64) 2、下载地址:https://dev.mysql.com/downloads/mysql/ 3、已经将 mysql-8.0.27-winx64 文件放在了文章最后,有需要的自取(解压配置即可用)。 4、配置环境变量: 右键点击我的电脑->属性->高级系统设置->高级->环境变量->系…

FineReport报表

一、报表类型 模板设计是 FineReport 学习过程中的主要难题所在,FineReport 模板设计主要包括普通报表、聚合报表、决策报表三种设计类型。 官网: ‘‘报表类型简介- FineReport帮助文档 - 全面的报表使用教程和学习资料 ‘’ 二、聚合报表 2-1 介绍…

爬虫逆向实战(41)-某花顺登陆(Cookie、MD5、SHA256)

一、数据接口分析 主页地址:某花顺 1、抓包 通过抓包可以发现在登陆时,网站首先请求了pwdRangeCalcRegular.json、getGS两个接口,接着请求dologinreturnjson2进行登陆,但是此接口会返回请先完成滑块验证码校验的响应。然后网站…

智慧公厕的五大好处:深圳光明源全面解析

智慧公厕通过集成现代智能技术和优化管理,显著提升了公共卫生设施的使用体验和管理效率。以下是智慧公厕的五大好处: 提升卫生条件: 自动感应设备:智能感应水龙头、洗手液机和干手器等设备减少了用户对设备的直接接触&#xff0…

【嵌入式开发】STM32+USB的快速开发

目录 一、概述 二、STM32+USB开发流程 2.1 建立新的工程 2.2 系统配置 2.3 时钟配置 2.4 操作系统 2.5 选择USB配置 2.6 在USB_HOST中选择支持的子类(class) 2.7 Clock 配置 三、注意事项 3.1 应用驱动配置 3.2 上电调试基础工作 一、概述 USB作为大家耳熟能详的…

20240621 每日AI必读资讯

🤖GPT-4 通过图灵测试!! 研究人员称人们在图灵测试中无法区分 GPT-4 和人类,圣地亚哥加州大学认知科学系的研究人员针对GPT 4复刻了图灵测试。 研究人员招募了500名参与者,与四个代理人:人类、1960年代的…

龙讯旷腾PWmat计算vdW异质结中热载流子冷却 | 复刻《Phys. Chem. Chem. Phys 》文献

01 NAMD 背景介绍 在各类光物理与光化学过程当中,均会牵涉到激发态载流子动力学过程,诸如电荷弛豫、复合以及输运等等。光激发或者电子注入将初始的平衡状态打破,所产生的热载流子在其演化进程中,会与原子核产生强烈耦合。此时&a…

环境配置02:CUDA安装

1. CUDA安装 Nvidia官网下载对应版本CUDA Toolkit CUDA Toolkit 12.1 Downloads | NVIDIA Developer CUDA Toolkit 12.5 Downloads | NVIDIA Developer 安装配置步骤参考:配置显卡cuda与配置pytorch - 知乎 (zhihu.com) 2. 根据CUDA版本,安装cudnn …

生育是家庭和个人的重要的选择

生育是个人和家庭的重要选择,而国家对于生育政策的制定应该综合考虑多种因素,包括人口结构、经济发展和社会稳定等。同时,我们也应该认识到,男女不应该成为决定一个人是否能够生育的因素。男女在生育中扮演着不同的角色&#xff0…

程序员必须知道!Serverless超强打造国产BAAS

在当今快节奏的软件开发领域,懒人开发者和独立开发者们一直在寻找能够简化开发流程、提高效率的利器。而今,MemFire Cloud以其强大的功能和简便的操作,成为了解决方案中的明星。无需搭建服务,无需开发API接口,你甚至可…

Python画箱线图展示数据分布情况

箱线图(Boxplot)是一种常用的统计图表,用于展示数据的分布情况。 它由五个统计量组成:最小值、第一四分位数(Q1)、中位数(Q2)、第三四分位数(Q3)和最大值。 …

【c语言】字符串函数和内存函数

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:C语言 目录 前言 一、字符串函数 1.strlen的使用和模拟实现 2.strcpy的使用和模拟实现 3.strcat的使用和模拟实现 4.strcmp的使用和模拟实现 5.strstr的使…

springboot3多模块实践

先帖下目录结构&#xff0c;直接在idea里面新建就行&#xff0c;删掉多余的文件 子模块的新建 根目录pom文件&#xff0c;注意modules、packaging&#xff0c;dependencyManagement统一管理依赖&#xff0c;子模块添加依赖的时候就不用加版本号 <?xml version"1.0…

SAP_FICO模块-获利能力段新增特征字段

业务背景&#xff1a; 公司有启用获利能力分析功能&#xff0c;有一个销售订单接口&#xff0c;是通过第三方销售订单管理平台推送数据到SAP的&#xff0c;用户希望对接新增一个编号ID到销售订单上&#xff0c;并且可以用KE24/KE30报表查看显示&#xff1b; 对于我这么一个后勤…

Java面试八股之简述JVM内存结构

简述JVM内存结构 Java虚拟机&#xff08;JVM&#xff09;内存结构主要分为线程私有区域和线程共享区域两大部分&#xff0c;具体组成部分如下&#xff1a; 线程私有区域 程序计数器&#xff08;Program Counter Register&#xff09;&#xff1a; 记录当前线程执行的字节码行…