【图像去噪】基于混合自适应(EM 自适应)实现自适应图像去噪研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
📚2 运行结果
🎉3 参考文献
🌈4 Matlab代码实现
💥1 概述
图像去噪是图像处理领域中的一个重要问题,其目标是通过对图像进行处理,减少或去除图像中的噪声,提高图像质量。混合自适应(EM 自适应)是一种常用的图像去噪方法之一。
混合自适应的基本思想是将图像中的噪声和信号分离开来,并分别对其进行处理。包括以下步骤:
1. 初始估计:首先需要对图像进行一个初始估计,可以使用一些简单的滤波方法,如中值滤波器等。
2. 估计噪声模型:通过对图像进行统计分析,估计出图像中的噪声模型,如高斯噪声、椒盐噪声等。
3. 分离噪声和信号:利用估计的噪声模型,将图像中的噪声和信号分离开来,可以采用波尔兹曼机、高斯混合模型等方法。
4. 自适应滤波:对分离得到的噪声和信号分别进行自适应滤波,针对不同的噪声模型可以采用不同的滤波器,常用的有均值滤波、维纳滤波、非局部均值滤波等。
5. 重组:将滤波后的噪声和信号重组得到最终的去噪图像。
混合自适应方法能够根据图像中的噪声模型进行自适应处理,对不同类型的噪声都有较好的去除效果。然而,该方法在计算复杂度和处理时间上可能较高,并且需要提前对图像的噪声模型进行估计,对于未知噪声模型的图像去噪可能会存在一定的挑战。因此,在实际应用中需要根据具体情况选择合适的图像去噪方法。
📚2 运行结果


主函数代码:
clear;
close all;
addpath('code');
addpath('data/standard_images')
load GSModel_8x8_200_2M_noDC_zeromean.mat
GMM.ncomponents = GS.nmodels;
GMM.mus = GS.means;
GMM.covs = GS.covs;
GMM.weights = GS.mixweights;
clear GS;
x = im2double(imread('House256.png'));
sigmaNoise = 20/255;
y = x + sigmaNoise * randn(size(x)); % noisy test image
%%%% EPLL denoising %%%%
xEPLL = y;
for sigma = sigmaNoise * [1, 1/sqrt(4), 1/sqrt(8), 1/sqrt(16), 1/sqrt(32)]
[xEPLL, psnr_EPLL, ssim_EPLL] = MAP_GMM(x, y, xEPLL, sigmaNoise, sigma, GMM);
end
fprintf('PSNR(EPLL) is:%.2f\n', psnr_EPLL);
fprintf('SSIM(EPLL) is:%.4f\n', ssim_EPLL);
%%%% EM adaptation using EPLL denoised image and MAP denoising with adapted GMM %%%%
xHat = xEPLL;
epsilon = 0.01;
b = randn(size(y));
n = numel(y);
xEPLL1 = y + epsilon*b;
for sigma = sigmaNoise * [1, 1/sqrt(4), 1/sqrt(8), 1/sqrt(16), 1/sqrt(32)]
[xEPLL1, ~, ~] = MAP_GMM(x, y + epsilon*b, xEPLL1, sigmaNoise, sigma, GMM);
end
xHat1 = xEPLL1;
div = (b(:)'*(xHat1(:) - xHat(:))) / (n*epsilon);
beta_opt = (sqrt(mean((y(:) - xHat(:)).^2) - sigmaNoise^2 + 2*sigmaNoise^2*div)) / sigmaNoise;
aGMM = EM_adaptation(GMM, xEPLL, beta_opt * sigmaNoise, 1);
xAdapted_EPLL = y;
for sigma = sigmaNoise * [1, 1/sqrt(4), 1/sqrt(8), 1/sqrt(16), 1/sqrt(32)]
[xAdapted_EPLL, psnr_adapted, ssim_adapted] = MAP_GMM(x, y, xAdapted_EPLL, sigmaNoise, sigma, aGMM);
end
fprintf('PSNR(adapted by EPLL image) is:%.2f\n', psnr_adapted);
fprintf('SSIM(adapted by EPLL image) is:%.4f\n', ssim_adapted);
return
🎉3 参考文献
部分理论来源于网络,如有侵权请联系删除。
[1] E. Luo, S. H. Chan, and T. Q. Nguyen, "Adaptive Image Denoising by Mixture Adaptation," IEEE Trans. Image Process. 2016.
[2] S. H. Chan, E. Luo and T. Q. Nguyen, "Adaptive Patch-based Image Denoising by EM-adaptation," in Proc. IEEE Global Conf. Signal Information Process. (GlobalSIP'15), Dec. 2015.
🌈4 Matlab代码实现
相关文章:
【图像去噪】基于混合自适应(EM 自适应)实现自适应图像去噪研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
[保研/考研机试] KY102 计算表达式 上海交通大学复试上机题 C++实现
描述 对于一个不存在括号的表达式进行计算 输入描述: 存在多组数据,每组数据一行,表达式不存在空格 输出描述: 输出结果 示例1 输入: 6/233*4输出: 18思路: ①设立运算符和运算数两个…...
源码解析Collections.sort ——从一个逃过单测的 bug 说起
本文从一个小明写的bug 开始,讲bug的发现、排查定位,并由此展开对涉及的算法进行图解分析和源码分析。 事情挺曲折的,因为小明的代码是有单测的,让小明更加笃定自己写的没问题。所以在排查的时候,也经历了前世的500年…...
一周 AIGC 丨苹果下架多款 AIGC 应用,阿里云开源通义千问 70 亿参数模型
多个 AIGC 应用在苹果应用商店下架,包含数据采集和使用不够规范等问题。阿里云开源通义千问 70 亿参数模型,包括通用模型 Qwen-7 B 和对话模型 Qwen-7 B-Chat。腾讯混元大模型开始应用内测,内部多个业务线接入测试。百度智能云“千帆大模型平…...
tomcat虚拟主机配置演示
一.新建用于显示的index.jsp文件,写入内容 二.修改tomcat/apache-tomcat-8.5.70/conf/server.xml配置文件 匹配到Host那部分,按上面格式在后面添加自己的域名和文件目录信息 主要是修改name和docBase 保存退出重启tomcat,确保tomcat运行…...
Nacos基本应用
Nacos 基本应用 Nacos 提供了 SDK 和 OpenAPI 方式来完成服务注册与发现等操作,SDK 实际上是对于 http 请求的封装。 微服务架构的电子商务平台,其中包含订单服务、商品服务和用户服务。可以使用 Nacos 作为服务注册和发现的中心,以便各个微…...
UML的类图规则
public:号 private:-号 protected:#号类图多重关系: 泛化关系: 概念:也就是继承关系。表示方式:用带空心三角形的直线来表示。例子:动物和猫,人和老师关联关系: 概念:用于表示一类对…...
uniapp实现微信小程序长按二维码扫码加群或好友
<template><view><view class"tit">欢迎扫码加入</view><image show-menu-by-longpress"true" src"/static/img/qrcode/1.jpg" class"btn-icon" click"previewImage"></image></vie…...
轮转数组(每日一题)
“路虽远,行则将至” ❤️主页:小赛毛 ☕今日份刷题:轮转数组 题目链接:轮转数组 题目描述: 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例1: 输入…...
jmeter使用步骤
jmeter 使用步骤 1,进入jmeter目录中的bin目录,双击jmeter.bat 打开 2,右键test plan 创建线程组 3,配置线程组参数 4,右键刚刚创建的线程组,创建请求,填写请求地址 5,需要携带to…...
Ts中泛型的理解与使用
一、什么是泛型 在定义函数,定义接口或定义class类的时候,不先规定其类型,在使用的时候进行定义类型。 二、使用 1、定义函数: // 函数类型 function AA<T>(arg:T):T{return arg } AA<number>(1) AA<string>…...
uniapp使用eatchs雷达图
引入插件 <template><view class"page"><view class"AllBox"><view class"topTit">标题</view><view class"leftTit">对比分析</view><view class"tableBox"><view cl…...
PostgreSQL jsonb
PostgreSQL jsonb jsonb 函数以及操作符 在PostgreSQL中,有许多用于处理JSONB数据类型的内置函数和操作符。下面列出了一些常用的JSONB函数和操作符: jsonb_pretty(jsonb) 该函数将JSONB数据格式化为易读的多行字符串。jsonb_typeof(jsonb) 该函数返回…...
Spring系列四:AOP切面编程
文章目录 💗AOP-官方文档🍝AOP 讲解🍝AOP APIs 💗动态代理🍝初始动态代理🍝动态代理深入🍝AOP问题提出📗使用土方法解决📗 对土方法解耦-开发最简单的AOP类📗…...
VS+Qt+C++旅游景区地图导航源码实例
程序示例精选 VSQtC旅游景区地图导航 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对<<VSQtC旅游景区地图导航>>编写代码,代码整洁,规则,易读。…...
回调函数和一般函数的区别
回调函数:不是我能控制的,通过外界信号触发调用,例如下面是chatter 一般函数:我能控制的,顺序调用...
使用vite创建Vue/React前端项目,配置@别名和Sass样式,又快又方便
Vite官方网站:Vite | 下一代的前端工具链 Vite 并不是基于 Webpack 的,它有自己的开发服务器,利用浏览器中的原生 ES 模块。这种架构使得 Vite 比 Webpack 的开发服务器快了好几个数量级。Vite 采用 Rollup 进行构建,速度也更快…...
从前序与中序遍历序列构造二叉树,从中序与后序遍历序列构造二叉树
目录 从前序与中序遍历序列构造二叉树从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树 题目链接 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返…...
【JS常见数据结构】
JS数据结构 前言数组JavaScript 中数组的常见操作:1. 创建数组:2. 访问数组元素:3. 插入元素:4. 删除元素:5. 查询元素: 链表单向链表双向链表循环链表 栈队列树二叉树示例 图图的定义图的分类图的表示方法…...
算法基础之插入排序
1、插入排序基本思想 插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序)&a…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

