【图像去噪】鲁棒PCA图像去噪【含Matlab源码 463期】

news2024/11/26 2:48:59

⛄一、图像去噪及滤波简介

1 图像去噪
1.1 图像噪声定义
噪声是干扰图像视觉效果的重要因素,图像去噪是指减少图像中噪声的过程。噪声分类有三种:加性噪声,乘性噪声和量化噪声。我们用f(x,y)表示图像,g(x,y)表示图像信号,n(x,y)表示噪声。
图像去噪是指减少数字图像中噪声的过程。现实中的数字图像在数字化和传输过程中常受到成像设备与外部环境噪声干扰等影响,称为含噪图像或噪声图像。去噪是图像处理研究中的一个重点内容。在图像的获取、传输、发送、接收、复制、输出等过程中,往往都会产生噪声,其中的椒盐噪声是比较常见的一种噪声,它属于加性噪声。

1.2 图像噪声来源
(1)图像获取过程中
图像传感器CCD和CMOS采集图像过程中受传感器材料属性、工作环境、电子元器件和电路结构等影响,会引入各种噪声。
(2)图像信号传输过程中
传输介质和记录设备等的不完善,数字图像在其传输记录过程中往往会受到多种噪声的污染。

1.3 噪声分类
噪声按照不同的分类标准可以有不同的分类形式:
基于产生原因:内部噪声,外部噪声。
基于噪声与信号的关系:
加性噪声:加性噪声和图像信号强度是不相关的,这类带有噪声的图像g可看成为理想无噪声图像f与噪声n之和:
g = f + n;
乘性嗓声:乘性噪声和图像信号是相关的,往往随图像信号的变化而变化,载送每一个象素信息的载体的变化而产生的噪声受信息本身调制。在某些情况下,如信号变化很小,噪声也不大。为了分析处理方便,常常将乘性噪声近似认为是加性噪声,而且总是假定信号和噪声是互相统计独立。
g = f + f*n
按照基于统计后的概率密度函数:
是比较重要的,主要因为引入数学模型这就有助于运用数学手段去除噪声。在不同场景下噪声的施加方式都不同,由于在外界的某种条件下,噪声下图像-原图像(没有噪声时)的概率密度函数(统计结果)服从某种分布函数,那么就把它归类为相应的噪声。下面将具体说明基于统计后的概率密度函数的噪声分类及其消除方式。

1.4 图像去噪算法的分类
(1)空间域滤波
空域滤波是在原图像上直接进行数据运算,对像素的灰度值进行处理。常见的空间域图像去噪算法有邻域平均法、中值滤波、低通滤波等。
(2)变换域滤波
图像变换域去噪方法是对图像进行某种变换,将图像从空间域转换到变换域,再对变换域中的变换系数进行处理,再进行反变换将图像从变换域转换到空间域来达到去除图像嗓声的目的。将图像从空间域转换到变换域的变换方法很多,如傅立叶变换、沃尔什-哈达玛变换、余弦变换、K-L变换以及小波变换等。而傅立叶变换和小波变换则是常见的用于图像去噪的变换方法。
(3)偏微分方程
偏微分方程是近年来兴起的一种图像处理方法,主要针对低层图像处理并取得了很好的效果。偏微分方程具有各向异性的特点,应用在图像去噪中,可以在去除噪声的同时,很好的保持边缘。偏微分方程的应用主要可以分为两类:一种是基本的迭代格式,通过随时间变化的更新,使得图像向所要得到的效果逐渐逼近,这种算法的代表为Perona和Malik的方程,以及对其改进后的后续工作。该方法在确定扩散系数时有很大的选择空间,在前向扩散的同时具有后向扩散的功能,所以,具有平滑图像和将边缘尖锐化的能力。偏微分方程在低噪声密度的图像处理中取得了较好的效果,但是在处理高噪声密度图像时去噪效果不好,而且处理时间明显高出许多。
(4)变分法
另一种利用数学进行图像去噪方法是基于变分法的思想,确定图像的能量函数,通过对能量函数的最小化工作,使得图像达到平滑状态,现在得到广泛应用的全变分TV模型就是这一类。这类方法的关键是找到合适的能量方程,保证演化的稳定性,获得理想的结果。
形态学噪声滤除器将开与闭结合可用来滤除噪声,首先对有噪声图像进行开运算,可选择结构要素矩阵比噪声尺寸大,因而开运算的结果是将背景噪声去除;再对前一步得到的图像进行闭运算,将图像上的噪声去掉。据此可知,此方法适用的图像类型是图像中的对象尺寸都比较大,且没有微小细节,对这类图像除噪效果会较好。

⛄二、部分源代码

clc;
clear;
addpath …/…/…/…
addpath ./…/…
addpath ./PatchDenoise
%% set parameter
par.patchsize=8;
par.overlapsize=4;
par.snr=20; %SNR db
par.Kneibor=20;
par.Maxiter=1000;
%% read image and creat noisy image
I_ori=im2double(imread(‘Monarch.PNG’));
%% creat noisy image
I_nois=awgn(I_ori,par.snr);
%% PatchDenoise rrocess
[I_res]=PatchDenoise(I_nois,par);
%% show result
figure;
subplot(1,3,1)
imshow(I_ori);
title(‘original image’);
subplot(1,3,2)
imshow(I_nois);
title(‘corrupt image’);
subplot(1,3,3)
imshow(I_res);
title(‘restored image’);
%% snr calulate
clc;
snr_nois=10log10(norm(I_ori,‘fro’)2/norm(I_ori-I_nois,‘fro’)2);
snr_res=10
log10(norm(I_ori,‘fro’)2/norm(I_ori-I_res,‘fro’)2);
disp([‘the snr of noise image is:’ num2str(snr_nois)]);
disp([‘the snr of restored image is:’ num2str(snr_res)]);
function [Patch Resdi Appearnum]=im2patch(I,par)
[imgh imgw]=size(I);
oversize=par.patchsize-par.overlapsize;
patch_xlen=floor((imgh-par.patchsize)/oversize)+1;
patch_ylen=floor((imgw-par.patchsize)/oversize)+1;
Totalpatch=patch_xlenpatch_ylen;
Patch=zeros(par.patchsize^2,Totalpatch);
Resdi=I;
Appearnum=ones(imgh,imgw);
coord=[1:par.patchsize];
k=1;
for i=0:patch_xlen-1
for j=0:patch_ylen-1
pat=I(coord+i
oversize,coord+joversize);
Patch(:,k)=pat(😃;
k=k+1;
Appearnum(coord+i
oversize,coord+joversize)=…
Appearnum(coord+i
oversize,coord+j*oversize)+1;
end
end
Resdi(1:par.patchsize+(patch_xlen-1)*oversize,1:par.patchsize+(patch_ylen-1)*oversize)=0;
Appearnum(1:par.patchsize+(patch_xlen-1)*oversize,1:par.patchsize+(patch_ylen-1)*oversize)=…
Appearnum(1:par.patchsize+(patch_xlen-1)*oversize,1:par.patchsize+(patch_ylen-1)*oversize)-1;

⛄三、运行结果

在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]基于matlab的传统算法图像去噪的实现原理

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

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

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

相关文章

jmeter性能测试-Arrivals 线程组解释

📌 博客主页: 程序员二黑 📌 专注于软件测试领域相关技术实践和思考,持续分享自动化软件测试开发干货知识! 📌 公号同名,欢迎加入我的测试交流群,我们一起交流学习! 目录…

Go项目目录结构该怎么写?

原文地址:Go项目目录结构该怎么写? Go 目录 /cmd 项目的主干。 每个应用程序的目录名应该与想要的可执行文件的名称相匹配(例如,/cmd/myapp)。 不要在这个目录中放置太多代码。如果认为代码可以导入并在其他项目中使用,那么它…

Python入门自学到精通需要看哪些书籍?

Python语言在近几年可以算得上如日中天,越来越火爆的同时,学习Python的人也越来越多了。对于不同基础的学习者来讲,学习的重点和方式也许会有差别,但是基础语法永远都是重中之重。在牢牢掌握基础知识的前提下,我们才能…

SAP ABAP 利用弹窗(POPUP)实现屏幕(DIALOG)快速开发

SAP ABAP 利用弹窗(POPUP)实现屏幕(DIALOG)快速开发 引言: 在 ABAP 开发中经常用到屏幕(DIALOG)开发,这通常都比较耗时。按复杂度可以分成复杂和简单两类屏幕开发,复杂的…

linux(乌班图)开发环境搭建

乌班图远程连接方法:安装openssh-server 和openssh-clientsudo apt-get -y install openssh-server openssh-client 设置允许root用户进行远程连接 方法一: /etc/ssh/sshd_config里面添加PermitRootLogin yes #重启 service ssh restart方法二&#xff1…

Pandas小白入门(一)---将value_counts的结果转为DataFrame

文章目录代码示例工作原理rename_axisreset_index各函数对于DataFrame下的应用其他应用quantile结果转为DataFrame代码示例 value_counts的结果是一个series,其index为原来列的值,value为值的个数。要将其转为DataFrame需要两个函数rename_axis和reset_…

为什么每个程序员都必须写博客

工作了好几年了,一直没写过技术类的博客,最近才开始尝试写一些技术类的博客。通过写博客的这段时间发现,写博客能够帮助我们快速成长已经提高我们学习的积极性,本文将和大家详细说说程序员写博客的好处。 🚀 一、加深对…

机器学习必会技能之微积分【一文到底】

机器学习必会技能 —— 微积分【一文到底】 文章目录机器学习必会技能 —— 微积分【一文到底】1 微积分的四类问题2 深入理解导数的本质3 深入理解复合函数求导4 理解多元函数偏导5 梯度究竟是什么?6 真正理解微积分6.1 直观理解6.2 理解微积分基本定理7 非常重要的…

NLP之文本分类项目(基于tensorflow1.14版本)

1.README.md:(查看项目整体结构以及各个部分作用) # Text Classification with RNN使用循环神经网络进行中文文本分类本文是基于TensorFlow在中文数据集上的简化实现,使用了字符级RNN对中文文本进行分类,达到了较好的效果。## 环境- Python 3 - TensorF…

Oracle项目管理之设施与资产管理Facilities and Asset (English)

目录 Maintenance Management Stand Alone or Integrated Facility Condition Assessment Space Management Lease Management Full Lease Expenses and Payment Management Transaction Management Asset Portfolio Management Portfolio Management Capabilities S…

改进二进制粒子群算法在配电网重构中的应用(Matlab实现)【论文复现】

目录 ​ 0 概述 1 配电网重构的目标函数 2 算例 3 matlab代码实现 0 概述 配电系统中存在大量的分段开关和联络开关,配电网重构正是通过调整分段开关和联络升大的组合状态来变换网络结构,用于优化配电网某些指标,使其达到最优状态。正常运行时,则通…

简单理解Vue的data为啥只能是函数

在学习vue的时候vue2只有在组件中严格要求data必须是一个函数,而在普通vue实例中,data可以是一个对象,但是在vue3出现后data必须一个函数,当时看着官方文档说的是好像是对象的引用问题,但是内部原理却不是很了解&#…

[附源码]Node.js计算机毕业设计高校教学过程管理系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

异常检测方法总结

在数据挖掘中,异常检测(英语:anomaly detection)对不匹配预期模式或数据集中其他项目的项目、事件或观测值的识别。 通常异常项目会转变成银行欺诈、结构缺陷、医疗问题、文本错误等类型的问题。异常也被称为离群值、新奇、噪声、…

1999-2020年各省农村综合数据

1999-2020年各省农村综合数据 1、时间:1999-2020年 2:来源:各省NJ、统计NJ、农村NJ 3、范围:包括31省 4、指标包括: 第一产业增加值占地区生产总值比重(%)、第一产业人员占就业人员比重&a…

scikit-learn 决策树入门实践 iris花分类

背景 为了了解sklearn的API,以及决策树的工作原理,本文以经典的花分类问题为例,编写代码并讲解。最后深入源代码查看其实现 关键词:决策树、基尼系数、决策树可视化、特征重要性。 代码案例 训练决策树 首先要准备数据集&#…

1.引入——如何创建Spring项目

目录 1.创建SpringBoot项目 1.未安装插件 2.安装插件 2.尝试着运行这个FirstApplication 3.Spring的核心——IOC(控制反转)/DI的讲解 1.相关概念: 2.什么是IOC,为什么要有IOC? 4.基于XML的方式,演示…

制造企业数字化车间MES系统方案

在市场经济越发严峻的局面下,现代制造业工厂越来越追求效率与精益生产管理,争相通过各种技术手段实现生产线上的现代管理,其中,可视化生产管理技术受到企业的关注,对MES系统也越来越重视。 MES系统解决的问题 1、条码…

094基于nodejs框架的学生作业管理系统vue

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 前端技术:nodejsvueelementui 前端:HTML5,CSS3、JavaScript、VUE 系统分为不同的层次:视图层(vue页面…

【C语言数据结构(基础版)】第三站:链表(二)

目录 一、单链表的缺陷以及双向链表的引入 1.单链表的缺陷 2.双向链表的引入 3.八大链表结构 (1)单向和双向 (2)带头和不带头 (3)循环和不循环 (4)八种链表结构 二、带头双向…