自适应局部降噪滤波器的python实现-------冈萨雷斯数字图像处理

自适应局部降噪滤波器

自适应局部降噪滤波器是一种信号处理技术,用于降低图像或信号中的噪声水平,同时保留图像或信号的细节。其原理基于局部区域内信号的统计特性和噪声的特征,通过动态调整滤波器的参数来适应不同区域的信号和噪声属性。
自适应局部降噪滤波器的基本原理:
**局部区域选择:**滤波器首先选择信号中的局部区域,例如使用一个固定大小的窗口或者动态选择尺寸以包含相邻像素或信号点。这个局部区域是用来估计噪声和信号特性的基础。
**估计信号和噪声特性:**在选定的局部区域内,通过统计方法(例如均值、方差等)对信号和噪声的特性进行估计。这些特性通常用于确定滤波器的参数,以便在滤波过程中更好地区分信号和噪声。
参数调整和滤波:基于对局部区域内信号和噪声特性的估计,滤波器动态调整其参数。这些参数可能包括滤波器的增益、阈值或者卷积核的权重等。滤波器根据这些参数对局部区域进行滤波,以抑制噪声并尽可能地保留信号的细节。
重复应用到整个信号或图像:上述步骤被迭代应用到整个信号或图像的每个局部区域,以处理整个信号并减少整体的噪声水平。

自适应局部降噪滤波器的关键在于其能够根据局部区域内信号和噪声的特性来自动调整滤波器参数,以更有效地降低噪声而不丢失重要的信号信息。这种方法常用于图像处理、音频处理和信号处理领域,用于提高图像质量或改善信号清晰度。

编写python代码,输出如下图所示的结果:

在这里插入图片描述
文件是一幅被均值为0,方差为1000的高斯噪声污染的图像。结果依次显示了算术均值滤波器、几何均值滤波器、自适应局部降噪滤波器对该图像滤波的结果。计算公式为:
在这里插入图片描述

代码实现

import cv2
import numpy as np
import skimage
from matplotlib import pyplot as pltimg = cv2.imread('Fig0513.tif',0)
img_n = skimage.util.random_noise(img, mode='gaussian', seed=None, clip=False, mean=0, var=0.01)
img_n = 255*(img_n-img_n.min())/(img_n.max()-img_n.min())
img_n = img_n.astype(np.uint8)def calculate_sigma_eta(image):hist, bins = np.histogram(image.flatten(), bins=256, range=[0, 256], density=True)r = bins[:-1]m = np.sum(r * hist)sigma = np.sum((r - m) ** 2 * hist)return sigmadef calculate_sigma_sxy(block):hist, bins = np.histogram(block.flatten(), bins=256, range=[0, 256], density=True)r = bins[:-1]m = (r * hist).sum()sigma = ((r - m) ** 2 * hist).sum()return sigma, mdef adaptive_local_denoise(image, kernel, sigma_eta=1):epsilon = 1e-8height, width = image.shape[:2]m, n = kernel.shape[:2]padding_h = int((m - 1) / 2)padding_w = int((n - 1) / 2)image_pad = np.pad(image, ((padding_h, m - 1 - padding_h), \(padding_w, n - 1 - padding_w)), mode="edge")img_result = np.zeros(image.shape)for i in range(height):for j in range(width):block = image_pad[i:i + m, j:j + n]gxy = image[i, j]z_sxy = np.mean(block)sigma_sxy = np.var(block)rate = sigma_eta / (sigma_sxy + epsilon)if rate >= 1:rate = 1img_result[i, j] = gxy - rate * (gxy - z_sxy)return img_resultdef ArithmeticMeanAlogrithm(image):# 算术均值滤波new_image = np.zeros(image.shape)image = cv2.copyMakeBorder(image,1,1,1,1,cv2.BORDER_DEFAULT)for i in range(1,image.shape[0]-1):for j in range(1,image.shape[1]-1):new_image[i-1,j-1] = np.mean(image[i-1:i+2,j-1:j+2])new_image = (new_image-np.min(image))*(255/np.max(image))return new_image.astype(np.uint8)def GeometricMeanOperator(roi):roi = roi.astype(np.float64)p = np.prod(roi)return p ** (1 / (roi.shape[0] * roi.shape[1]))def GeometricMeanAlogrithm(image):# 几何均值滤波new_image = np.zeros(image.shape)image = cv2.copyMakeBorder(image, 1, 1, 1, 1, cv2.BORDER_DEFAULT)for i in range(1, image.shape[0] - 1):for j in range(1, image.shape[1] - 1):new_image[i - 1, j - 1] = GeometricMeanOperator(image[i - 1:i + 2, j - 1:j + 2])new_image = (new_image - np.min(image)) * (255 / np.max(image))return new_image.astype(np.uint8)# 自适应局部降噪滤波器处理高斯噪声
kernel = np.ones([7, 7])
img_arithmentic_mean = ArithmeticMeanAlogrithm(img_n)
img_geometric_mean = GeometricMeanAlogrithm(img_n)
img_adaptive_local = adaptive_local_denoise(img, kernel=kernel, sigma_eta=1000)plt.figure(figsize=(7,7))plt.subplot(2,2,1),plt.imshow(img, cmap = 'gray'),plt.title('original')
plt.xticks([]),plt.yticks([])
plt.subplot(2,2,2),plt.imshow(img_arithmentic_mean, cmap = 'gray'),plt.title('arithmentic')
plt.xticks([]),plt.yticks([])
plt.subplot(2,2,3),plt.imshow(img_geometric_mean, cmap = 'gray'),plt.title('geomentric')
plt.xticks([]),plt.yticks([])
plt.subplot(2,2,4),plt.imshow(img_adaptive_local, cmap = 'gray'),plt.title('adaptive')
plt.xticks([]),plt.yticks([])
plt.tight_layout()
plt.show()

实验结果

在这里插入图片描述

自适应滤波器是指根据环境的改变,使用自适应算法来改变滤波器的参数和结构的滤波器。一般情况下,不改变自适应滤波器的结构。而自适应滤波器的系数是由自适应算法更新的时变系数。即其系数自动连续地适应于给定信号,以获得期望响应。自适应滤波器的最重要的特征就在于它能够在未知环境中有效工作,并能够跟踪输入信号的时变特征。

自适应局部滤波器设计流程

① 生成高斯噪声
设计出高斯噪声,并添加到原图像中。
②设计均值滤波器
设计过程为:取出当前n*n阶滤波器对应的像素点,求其均值,并将结果放至结果矩阵中,输出。
③设计自适应均值滤波器
设计过程为:求噪声方差;以矩阵为整体运算,求出n阶滤波器对应的像素点像素的均值,方差;将局部方差与噪声方差进行比较,按照规则计算新的像素,并存在结果矩阵中,输出。

在这里插入图片描述

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

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

相关文章

Mac系统升级node.js版本和npm版本

升级node.js版本 第一步:查询当前node.js版本 node -v 第二步:清除node.js的缓存 sudo npm cache clean -f 第三步:验证缓存是否清空 npm cache verify 第四步:安装n工具,n工具是专门用于管理node.js版本的工具…

Day52力扣打卡

打卡记录 Collapsing Strings&#xff08;Trie树&#xff09; 链接 #include <iostream> #include <algorithm> using namespace std; const int N 2e6 10; int son[N][26], idx, cnt1[N], cnt2[N]; int main() {auto insert [&](string& str, int* c…

【Qt】在表格QTableWidget或者QTableView中,当主键Id存在时更新数据,不存在时添加数据解决方案

问题 有时在开发中&#xff0c;表格需要显示数据&#xff0c;每一行呢&#xff0c;需要记录对应的id。 当更新表格数据时&#xff0c;会根据id进行更新&#xff0c;id存在就更新行数据&#xff0c;不存在就添加一行新数据。 解决方案 如何知道id存在还是不存在呢&#xff1f…

记一次CDH集群迁移产生的问题——HIVE

背景 生产环境CDH集群迁移到新的环境&#xff0c;迁移之后使用Hive Client方执行任务一直失败。 问题1&#xff1a;metadata.SessionHiveMetaStoreClient 产生报错&#xff1a; FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.Ru…

AOP操作日志记录

AOP操作日志记录 1.创建注解 Retention(RetentionPolicy.RUNTIME) Target(ElementType.METHOD) public interface PassportLog {String operatePage();String operateType();ClassTypEnum classType();}2.创建切面 对于字典&#xff0c;可以通过注解属性去转换&#xff0c;枚举…

车联网架构设计(二)_消息缓存

在上一篇博客车联网架构设计(一)_消息平台的搭建-CSDN博客中&#xff0c;我介绍了车联网平台需要实现的一些功能&#xff0c;并介绍了如何用EMQXHAPROXY来搭建一个MQTT消息平台。车联网平台的应用需要消费车辆发布的消息&#xff0c;同时也会下发消息给车辆&#xff0c;以实现车…

SpringBoot 属性配置解析

属性配置介绍 spring官方提供的17中属性配置的方式 Devtools全局配置测试环境TestPropertySource注解测试环境properties属性命令行参数SPRING_APPLICATION_JSON属性ServletConfig初始化参数ServletContext初始化参数JNDI属性JAVA系统属性操作系统环境变量RandomValueProperty…

解释区块链技术的应用场景和优势。

区块链技术的应用场景&#xff1a; 金融行业&#xff1a;区块链可用于加强支付、结算、借贷和保险等金融业务的安全性和效率。 物流行业&#xff1a;区块链可用于追踪物流信息&#xff0c;保证货物的安全、可靠和透明。 版权保护&#xff1a;区块链可用于储存数字资产和版权信…

Nacos和Eureka冲突问题原因分析

目录 一、问题现象二、解决办法三、原因分析 一、问题现象 Description:Field autoServiceRegistration in org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration required a single bean, but 2 were found:- eurekaAutoServiceRegis…

单例模式【C#】

只能生一个儿子。 文件操作只能一个单例去操作。 1static&#xff1a; static的特点是&#xff0c;不需要new就能使用。即使派生了&#xff0c;也是使用静态的对象。 public class SingleObject {//创建 SingleObject 的一个对象private static SingleObject instance new…

基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统——深度学习算法应用(含pytho、JS工程源码)+数据集+模型(二)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境Jupyter Notebook环境Pycharm 环境微信开发者工具OneNET云平台 相关其它博客工程源代码下载其它资料下载 前言 本项目基于Keras框架&#xff0c;引入CNN进行模型训练&#xff0c;采用Dropout梯度…

spark log4j日志配置

1.spark启动参数 先把log4j配置文件放到hdfs&#xff1a;hdfs://R2/projects/log4j-debug.properties --conf spark.yarn.dist.fileshdfs://R2/projects/log4j-debug.properties#log4j-first.properties \ --conf "spark.driver.extraJavaOptions-Dlog4j.configurationf…

【前端设计模式】之单例模式

在前端开发中&#xff0c;单例模式是一种常见的设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供全局访问点。在实现单例模式时&#xff0c;有一些最佳实践和高级技巧可以帮助我们编写更优雅和可维护的代码。 1. 使用闭包 使用闭包是实现单例模式的一种常见…

uni-app 设置tabBar的setTabBarBadge购物车/消息等角标

目录 一、效果二、代码实现二、全部代码1.index.vue2.cart.vue 三、真实案例参考最后 一、效果 二、代码实现 只要使用uni.setTabBarBadge和uni.removeTabBarBadge来进行对红点的设置和移除。 主要代码&#xff1a; //设置红点 uni.setTabBarBadge({index: 1, // 底部菜单栏…

大数据可视化项目——基于Python豆瓣电影数据可视化分析系统的设计与实现

大数据可视化项目——基于Python豆瓣电影数据可视化分析系统的设计与实现 本项目旨在通过对豆瓣电影数据进行综合分析与可视化展示&#xff0c;构建一个基于Python的大数据可视化系统。通过数据爬取收集、清洗、分析豆瓣电影数据&#xff0c;我们提供了一个全面的电影信息平台…

Python自动化——driver.execute_script的用法

用法引入 当您使用Selenium时&#xff0c;您可以指定chrome驱动程序的路径。以下是一个完整的示例&#xff0c;包括指定Chrome驱动程序的路径&#xff1a; from selenium import webdriver# 指定Chrome驱动程序的路径 chrome_driver_path C:/path/to/your/chromedriver.exe …

2-Django、Flask和Tornado三大主流框架对比

在Python的web开发框架中&#xff0c;目前使用量最高的几个是Django、Flask和Tornado&#xff0c; 经常会有人拿这几个对比&#xff0c;相信大家的初步印象应该是 Django大而全、Flask小而精、Tornado性能高。 了解常用框架 Django 主要特点是大而全,集成了很多组件,例如: Mo…

instanceof原理解析

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。 ​ 语法 object instanceof Constructorobject //某个实例对象 Constructor //某个构造函数实例验证 验证的过程中会使用Object.getPrototypeOf(Object)&#xff0c;Object.getProtot…

论文阅读[2023ICME]Edge-FVV: Free Viewpoint Video Streaming by Learning at the Edge

Edge-FVV: Free Viewpoint Video Streaming by Learning at the Edge 会议信息&#xff1a; Published in: 2023 IEEE International Conference on Multimedia and Expo (ICME) 作者&#xff1a; 1 背景 FVV允许观众从多个角度观看视频&#xff0c;但是如果所选视点的视频…

机器学习-逻辑回归

一、引言 逻辑回归&#xff08;Logistic Regression&#xff09;是一种广泛应用于分类问题的监督学习算法。尽管名字中含有“回归”二字&#xff0c;但这并不意味着它用于解决回归问题。相反&#xff0c;逻辑回归专注于解决二元或多元分类问题&#xff0c;如邮件是垃圾邮件还是…