[Python图像处理] 基于图像均值消除随机噪声

news2024/11/23 21:52:00

基于图像均值消除随机噪声

    • 前言
    • 图像均值计算
    • 去除图像噪声
    • 相关链接

前言

在本节中,我们将学习如何从一组带有噪声的输入图像中估算一个无噪声的图像,所有图像都是通过使用原始(无噪声)图像像素添加独立同分布的随机噪声创建的,只需计算噪声图像的平均值/中值。

图像均值计算

X X X 为尺寸 h × w h×w h×w 的原始输入图像,并通过添加 n n n 个不同的随机噪声矩阵生成 n n n 个噪声输出图像, E k E_k Ek 是尺寸为 h x w hxw hxw 的随机噪声矩阵,因此带有噪声的图像为 X + E k X +E_k X+Ek,其中 k = 1 , 2 , 3 … k = 1,2,3… k=1,2,3
我们假设噪声矩阵 E k E_k Ek 中的每个元素都是均值为 0 的满足独立同分布的高斯函数, E k ( i , j ) E^{(i,j)}_k Ek(i,j) 表示第 k k k 个噪声矩阵的元素。根据中心限制定理:

lim ⁡ x → ∞ E ˉ ( i , j ) σ n → 0 {\lim_{x \to \infty}} \frac {\bar E ^{(i,j)}} {\frac {\sigma} {\sqrt n}}\to 0 xlimn σEˉ(i,j)0

因此,可以得到以下结果:

E ˉ ( i , j ) = ∑ k = 1 n E k ( i , j ) n {\bar E ^{(i,j)}} =\frac {\sum_{k=1}^n E_k^{(i,j)}} {n} Eˉ(i,j)=nk=1nEk(i,j)

E ˉ ( i , j ) {\bar E ^{(i,j)}} Eˉ(i,j) 对应于噪声矩阵中 ( i , j ) (i,j) (i,j) 元素的平均值。
这意味着,如果我们有很多带有噪声的图像,并且假设噪声满足独立同分布,通过简单计算带有噪声图像的均值,就可以去除图像中的噪音。如果我们有彩色的噪声图像,在每个颜色通道上计算均值,那么通过独立同分布假设,我们可以获得(几乎)无噪声图像。该理论适用于具有零均值的任意分布的噪声,而无需是高斯分布。

去除图像噪声

我们也可以用中位数而不是平均值来从带有噪声的图像(满足独立同分布)中估计无噪声图像,则也可以得到相似的结果。

(1) 导入所有必需的库、模块和函数,从磁盘中读取输入图像并将其转换为浮点类型:

from skimage import img_as_float
from skimage.util import random_noise
from skimage.metrics import peak_signal_noise_ratio
from skimage.io import imread
import matplotlib.pylab as plt
import numpy as np
def plot_image(image, title=None, sz=10):
    plt.imshow(image)
    plt.title(title, size=sz)
    plt.axis('off')

im = img_as_float(imread('1.png')) # original image 

(2) 通过向原始图像中添加独立同分布的高斯噪声(具有零均值)来创建 n 个带有噪声图像:

n = 100
images = np.zeros((n, im.shape[0], im.shape[1], im.shape[2]))
sigma = 0.2
for i in range(n):
    images[i,...] = random_noise(im, var=sigma**2)

(3) 使用 scikit-image 库函数,计算噪声图像的平均值和中位数:

im_mean = images.mean(axis=0)
im_median = np.median(images, axis=0)

(4) 将输出图像的 PSNR 与原始无噪声图像进行比较。绘制原始图像、带有噪声图像和输出图像:

plt.figure(figsize=(10,10))
plt.subplots_adjust(left=.02, right=.98, bottom=.001, top=.96, wspace=.05, hspace=.01)
plt.subplot(221), plot_image(im, 'Original image')
plt.subplot(222), plot_image(images[0], 'Noisy PSNR: ' + str(round(peak_signal_noise_ratio(im, images[0]),3)))
plt.subplot(223), plot_image(im_mean, 'Mean PSNR: ' + str(round(peak_signal_noise_ratio(im, im_mean),3)))
plt.subplot(224), plot_image(im_median, 'Median PSNR: ' + str(round(peak_signal_noise_ratio(im, im_median),3)))
plt.show()

均值去噪

从上图可以看出,估计的无噪图像在视觉效果上与原始的无噪声图像类似,且同样具有较高 PSNR

(5) 根据给定带有噪声的图像绘制彩色通道直方图,将像素的真实值绘制为实线,将通过计算均值得到的每个彩色通道的像素估计值绘制为虚线:

plt.figure(figsize=(10,5))
plt.hist(images[:,100,100,0], color='red', alpha=0.2, label='red')
plt.hist(images[:,100,100,1], color='green', alpha=0.2, label='green')
plt.hist(images[:,100,100,2], color='blue', alpha=0.2, label='blue')
plt.vlines(im[100,100,0], 0, 20, color='red', label='original')
plt.vlines(im[100,100,1], 0, 20, color='green', label='original')
plt.vlines(im[100,100,2], 0, 20, color='blue', label='original')
plt.vlines(im_mean[100,100,0], 0, 20, color='red', linestyles='dashed', label='estimated')
plt.vlines(im_mean[100,100,1], 0, 20, color='green', linestyles='dashed', label='estimated')
plt.vlines(im_mean[100,100,2], 0, 20, color='blue', linestyles='dashed', label='estimated')
plt.legend()
plt.grid()
plt.show()

直方图

相关链接

Python图像处理【1】图像与视频处理基础
Python图像处理【2】探索Python图像处理库
Python图像处理【3】Python图像处理库应用
Python图像处理【4】图像线性变换
Python图像处理【5】图像扭曲/逆扭曲
Python图像处理【6】通过哈希查找重复和类似的图像
Python图像处理【7】采样、卷积与离散傅里叶变换
Python图像处理【8】使用低通滤波器模糊图像
Python图像处理【9】使用高通滤波器执行边缘检测
Python图像处理【10】基于离散余弦变换的图像压缩
Python图像处理【11】利用反卷积执行图像去模糊
Python图像处理【12】基于小波变换执行图像去噪
Python图像处理【13】使用PIL执行图像降噪
Python图像处理【14】基于非线性滤波器的图像去噪
Python图像处理【15】基于非锐化掩码锐化图像

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

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

相关文章

智能手表上的音频(三):音频文件播放

上篇讲了智能手表上音频相关的驱动。本篇开始讲具体的功能,先讲音频文件播放。 音频文件格式众多,目前我们仅支持了最常见的几种:WAV/MP3/AAC/AMR(主要用于播放录音文件)。相对于播放WAV(即PCM),MP3/AAC/AMR多了个解码过程。音频文…

Synchronized关键字详解

1. Synchronized简介及使用 1.1 简介 在Java中,synchronized 是一个关键字,用于实现多线程环境下的同步控制,确保线程安全性。它可以应用于方法、代码块或静态方法上,提供了对临界区(共享资源)的互斥访问…

Python知识点——高维数据的格式化

常用JSON格式对高维数据进行表达和存储&#xff1a; 常见的高维数据最典型的例子&#xff1a;<key,value>键值对 JSON格式表达键值对<key, value>的基本格式如下&#xff0c;键值对都保存在双引号中&#xff1a; "key" : "value" Json库 dump…

前后端交互常见的几种数据传输格式 form表单+get请求 form表单+post请求 json键值对格式

目录 1. get请求 query string 2.form表单get请求 3..form表单post请求 4..json格式 5.总结 1. get请求 query string 前端通过get请求携带 query string&#xff08;键值对&#xff09; ,后端通过req.getParameter(key)方法获取数据。如果key不存在&#xff0c;获取到的就…

苹果手机钱包怎么付款?教你如何使用Apple Pay支付

苹果钱包是iPhone手机的一项实用功能&#xff0c;可以将银行卡、信用卡、交通卡、学生证等收纳在其中。在日常生活中&#xff0c;手机支付变得越来越方便。那么&#xff0c;如何在苹果手机上使用Apple Pay进行支付呢&#xff1f;苹果手机钱包怎么付款&#xff1f;下面请跟着小编…

Redis小记(一)

NoSQL数据库简识 引入 随着web时代的到来&#xff0c;PC端和移动端的用户越来越多&#xff0c;之前的单体服务器已经承载不住这么大量的访问请求操作&#xff0c;如今就演化成了下图这种&#xff0c;通过ngnix负载均衡&#xff0c;将请求以分摊到多个不同的服务器上&#xff…

微信小程序rich-text里面写单行溢出显示省略号在ios中不显示的问题

项目用uniapp开发。然后赋值用v-html来写。&#xff08;v-html可以转换html格式并且展示。运行到小程序里面是用rich-text标签展示&#xff09; 原来返回的item.titleName如下&#xff1a;<font style"color: #ff4343;">测试</font>课程名称长度加加加爱…

【微信小程序】新版获取手机号码实现一键登录(uniapp语法)(完整版附源码)

需求 如图&#xff0c;点击按钮&#xff0c;获取用户手机号实现一键登录&#xff0c;当然&#xff0c;用户也可以自行输入其他手机号进行登录 问题 要想获取用户手机号并不复杂&#xff0c;但由于近几年微信小程序获取手机号的api进行了更新&#xff0c;当前很多帖子使用的…

【delphi】中 TNetHTTPClient 注意事项

一、TNetHTTPClient 是什么&#xff1f; 用于管理 HTTP 客户端的组件。相当于indy中的TidHTTP控件&#xff0c;是实现HTTP请求的客户端控件。 二、TNetHTTPClient 需要注意什么&#xff1f; 需要注意的是几个Timeout&#xff0c;因为我们使用TNetHTTPClient控件的时候&#x…

1 快速了解Paimon数据湖核心原理及架构

1.1 什么是Apache Paimon Apache Paimon的前身属于Flink的子项目&#xff1a;Flink Table Store。 目前业内主流的数据湖存储项目都是面向批处理场景设计的&#xff0c;在数据更新处理时效上无法满足流式数据湖的需求&#xff0c;因此Flink社区在2022年的时候内部孵化了 …

Golang Windows系统使用make build

gcc -v 找到上面mingw64/bin目录&#xff0c;复制mingw32-make.exe一份&#xff0c;改成make.exe ,即可。

9.spark自适应查询-AQE之动态调整Join策略

目录 概述动态调整Join策略原理实战 动态优化倾斜的 Join原理实战 概述 broadcast hash join 类似于 Spark 共享变量中的广播变量&#xff0c;Spark join 如果能采取这种策略&#xff0c;那join 的性能是最好的 自适应查询AQE(Adaptive Query Execution) 动态调整Join策略 原…

金蝶云星空单据转换下推时上游单据的主键和明细主键获取和保存

文章目录 金蝶云星空单据转换下推时上游单据的主键和明细主键获取和保存产品序列号对照表增加字段创建单据转换插件在单据转换规则注册插件测试 金蝶云星空单据转换下推时上游单据的主键和明细主键获取和保存 比如&#xff1a;售后单下推对照表&#xff0c;是一对一&#xff0…

(深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会

hi&#xff0c;同学们&#xff0c;我是赤辰 7月份的时候&#xff0c;Open AI就找来了一位全球顶级的华人产品经理Peter Deng&#xff0c;要给这个技术很强但交互很差ChatGPT动一番大手术。 在11月7日凌晨2点&#xff0c;终于等到了Open AI发布的首届开发者大会&#xff0c;也被…

Vb6 TCP Server服务端监听多个RFID读卡器客户端上传的刷卡数据

本示例使用设备介绍&#xff1a;WIFI无线4G网络RFID云读卡器远程网络开关物流网阅读器TTS语音-淘宝网 (taobao.com) Option ExplicitConst BUSY As Boolean False 定义常量 Const FREE As Boolean TrueDim ConnectState() As Boolean 定义连接状态 Dim ServerSendbuf(…

超级好用的几个工具

JamTools JamTools是一个全平台支持的小工具集软件&#xff0c;可用于Windows 7/8/10/11、MacOS、Ubuntu等系统&#xff08;其他系统可自行编译源码进行打包&#xff09;。该工具集包含了多项实用功能&#xff0c;如滚动/区域截屏、录屏、文字识别、多语言互译、多媒体格式转换…

计算机网络——物理层-物理层的基本概念、物理层下面的传输媒体

目录 物理层的基本概念 传输媒体 物理层的基本概念 在计算机网络中&#xff0c;用来连接各种网络设备的传输媒体种类众多。大致可以分为两类。一类是导引型传输媒体&#xff0c;另一类是非导引型传输媒体。 在导引型传输媒体中&#xff0c;常见的有双绞线、同轴电缆、光纤。…

Qt开发流程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;…

是时候和 Confluence 说再见了

作为最早为 Confluence 中文化提供服务的社区&#xff0c;我们也面临着最后的时间了。 Confluence 已经不再为用户签发开源许可证了&#xff0c;这意味着在今年许可证到期后&#xff0c;我们要不就需要把所有数据迁移到 Confluence 云平台上。 要不就自己部署完整的云平台服务…

Apache Airflow (一) : Airflow架构及

&#x1f3e1; 个人主页&#xff1a;IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;加入大数据技术讨论群聊&#xff0c;获取更多大数据资料。 &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你大数据的个人空间-豹…