【图像去噪】DCT图像去噪【含GUI Matlab源码 614期】

news2024/11/15 15:46:46

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

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模型就是这一类。这类方法的关键是找到合适的能量方程,保证演化的稳定性,获得理想的结果。
形态学噪声滤除器将开与闭结合可用来滤除噪声,首先对有噪声图像进行开运算,可选择结构要素矩阵比噪声尺寸大,因而开运算的结果是将背景噪声去除;再对前一步得到的图像进行闭运算,将图像上的噪声去掉。据此可知,此方法适用的图像类型是图像中的对象尺寸都比较大,且没有微小细节,对这类图像除噪效果会较好。

3 离散余弦变换
考虑图像中加入高斯白噪声,其观测模型为
在这里插入图片描述
式中:y———加入噪声的图像,x———原图像,e———均值为0,方差为σ2的高斯白噪声。
通过离散余弦变换将图像变换到频域得到图像的频域信息。考虑M×M的图像块,可以得到其频域系数为
在这里插入图片描述
离散余弦变换具有很强的“能量集中性”,矩阵中左上角的系数代表了图像的大部分信息,右下角的系数则反映了其细节和噪声信息,仅对右下角的系数进行阈值收缩即可达到去噪的目的。
采用离散余弦变换对图像进行去噪是一种简单有效的方法。将图像从时域变换到频域后可以获得一系列的频域系数, 对这些DCT系数进行阈值收缩后再进行离散余弦反变换就可以得到去噪后的图像。因此对于频域系数的处理方法大大影响着去噪的效果,阈值选择过小,会保留下很多噪声,阈值选择过大;则会模糊掉大量的图像细节信息。因此,在噪声水平较高时,这种方法的去噪效果并不理想。

⛄二、部分源代码

function varargout = imDCT(varargin)
% IMDCT M-file for imDCT.fig
% IMDCT, by itself, creates a new IMDCT or raises the existing
% singleton*.
%
% H = IMDCT returns the handle to a new IMDCT or the handle to
% the existing singleton*.
%
% IMDCT(‘CALLBACK’,hObject,eventData,handles,…) calls the local
% function named CALLBACK in IMDCT.M with the given input arguments.
%
% IMDCT(‘Property’,‘Value’,…) creates a new IMDCT or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before imDCT_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to imDCT_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE’s Tools menu. Choose “GUI allows only one
% instance to run (singleton)”.
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help imDCT

% Last Modified by GUIDE v2.5 07-Dec-2009 19:54:09

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @imDCT_OpeningFcn, …
‘gui_OutputFcn’, @imDCT_OutputFcn, …
‘gui_LayoutFcn’, [] , …
‘gui_Callback’, []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% — Executes just before imDCT is made visible.
function imDCT_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to imDCT (see VARARGIN)

% Choose default command line output for imDCT
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes imDCT wait for user response (see UIRESUME)
% uiwait(handles.figure1);

% — Outputs from this function are returned to the command line.
function varargout = imDCT_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;

function edit1_Callback(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,‘String’) returns contents of edit1 as text
% str2double(get(hObject,‘String’)) returns contents of edit1 as a double

% — Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,‘BackgroundColor’), get(0,‘defaultUicontrolBackgroundColor’))
set(hObject,‘BackgroundColor’,‘white’);
end

function edit2_Callback(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,‘String’) returns contents of edit2 as text
% str2double(get(hObject,‘String’)) returns contents of edit2 as a double

% — Executes during object creation, after setting all properties.
function edit2_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,‘BackgroundColor’), get(0,‘defaultUicontrolBackgroundColor’))
set(hObject,‘BackgroundColor’,‘white’);
end

% — Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
ImgPath=get(handles.edit1,‘String’);
CompressRate=uint8(fix(str2num(get(handles.edit2,‘String’))));
if CompressRate>64
CompressRate=64;
end
if CompressRate<1
CompressRate=1;
end
set(handles.edit2,‘String’,num2str(CompressRate));
img=imread(ImgPath);
axes(handles.axes1);
imshow(img);
set(handles.text7,‘Visible’,‘off’);
set(handles.text7,‘String’,‘处理状态:正在处理中…’);
set(handles.text7,‘Visible’,‘on’);
pause(0.1);
Block=ceil(size(img)/8);
ImgDCT=zeros(Block8);
ImgRestoreTemp=zeros(Block
8);
ImgRestore=zeros(size(img));
ImgBlock=zeros(8);
DCTBlock=zeros(8);
vector=zeros(1,64);
for ii=1:Block(1)
for jj=1:Block(2)
ImgBlock(:,:)=zeros(8);
if iiBlock(1)
if jj
Block(2)
ImgBlock(1:size(img,1)-(ii-1)*8,1:size(img,2)-(jj-1)*8)=img((ii-1)*8+1:size(img,1),(jj-1)*8+1:size(img,2));
else
ImgBlock(1:size(img,1)-(ii-1)*8,:)=img((ii-1)*8+1:size(img,1),(jj-1)8+1:jj8);
end
else
if jj==Block(2)
ImgBlock(:,1:size(img,2)-(jj-1)*8)=img((ii-1)8+1:ii8,(jj-1)*8+1:size(img,2));
else
ImgBlock(:,:)=img((ii-1)8+1:ii8,(jj-1)8+1:jj8);
end
end
DCTBlock(:,:)=dct2(ImgBlock(:😅);
if CompressRate~=64
vector(1:64)=m2v(DCTBlock(:😅);
vector(CompressRate+1:64)=0;
DCTBlock(:,:)=v2m(vector(1:64));
end
ImgDCT((ii-1)8+1:ii8,(jj-1)8+1:jj8)=DCTBlock(:😅;
end
end

⛄三、运行结果

在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]宋幻,田洪伟.基于DCT冗余字典学习的红外图像去噪[J].电子测试. 2020,(15)

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

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

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

相关文章

基于java+springmvc+mybatis+vue+mysql的戒烟网站

项目介绍 大量研究证据表明&#xff0c;戒烟可降低或消除吸烟导致的健康危害。任何人在任何年龄戒烟均可获益&#xff0c;且戒烟越早、持续时间越长&#xff0c;健康获益就越大。随着时代发展人们对健康也越来越重视&#xff0c;更多的人参与到了戒烟的行列中来&#xff0c;本…

[go]分布式系统之snowflake与锁

文章目录分布式id生成器分布式锁负载均衡go语言在网络服务模块有着得天独厚的优势&#xff1b; https://www.cnblogs.com/thepoy/p/14573822.html中详细介绍了涉及到的分布式相关技术。分布式id生成器 Snowflake&#xff08;雪花算法&#xff09;&#xff0c;由Twitter提出并开…

六问 Kafka 为啥那么牛

1 Kafka 简介 1.1 Kafka 概述 Kafka 是一个分布式的基于发布/订阅模式的消息队列&#xff0c;依靠其强悍的吞吐量&#xff0c;Kafka 主要应用于大数据实时处理领域。在数据采集、传输、存储的过程中发挥着举足轻重的作用。 Apache Kafka 由 Scala 写成&#xff0c;是由Apache软…

转行IT行业学什么比较好?月薪过万要多久?

学什么&#xff0c;比穿什么衣服的问题更难&#xff0c;因为职业的背后&#xff0c;更多的是抉择而不是选择&#xff0c;选错一件衣服可以重来&#xff0c;而选错一个职业所面对的结果&#xff0c;是非常让人痛苦的。 本文是小编对想转行IT行业的你最真挚的建议。 任何事情&a…

QT5.14.2搭建Android开发环境

项目需求:因项目需求需要使用QT开发功能类似的一个跨平台项目&#xff0c;基于Android系统上运行单机软件。 开发环境&#xff1a;Windows 10 QT5.14.2 搭建步骤&#xff1a; 1、安装Java软件&#xff0c;配置环境变量 java软件安装可以选择默认安装位置&#xff0c;我下载…

KNN学习

学习B站 【什么是KNN&#xff08;K近邻算法&#xff09;&#xff1f;【知多少】】 https://www.bilibili.com/video/BV1Ma411F7Y4/?share_sourcecopy_web&vd_sourced928ac2eb2c6b562d9488d15f78dfbf4 什么是KNN NN neural network 并不是 KNN 是k-Nearest Neighbors K 近…

[附源码]Node.js计算机毕业设计孤儿院救助平台Express

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

jsp+ssm计算机毕业设计大学生就业信息检索系统【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

《Python多人游戏项目实战》第四节 实现房间功能

目录 4.1 确定同一聊天室玩家及房主 4.2 绘制开始或准备按钮 4.3 实现按钮功能 4.4 完整代码下载地址&#xff1a; 在本节&#xff0c;我们会在原有的程序基础上加上房间的功能。当玩家打开游戏窗口后&#xff0c;会自动出现在1号或者2号聊天室。只有当1号聊天室所有玩家准…

【5G MAC】Beam Failure Recovery(BFR)

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

https建立连接加解密原理

https建立连接加解密原理 本文目录https建立连接加解密原理加密并建立连接过程CA的作用服务器获取数字证书过程客户端认证证书过程如何防止中间人攻击解决问题的方法加密并建立连接过程 1.客户端发起HTTPS请求 用户在浏览器里输入一个https网址&#xff0c;然后连接到server的…

EEG- gan:用于脑电图(EEG)大脑信号的生成对抗网络2018

EEG-GAN: Generative adversarial networks for electroencephalograhic (EEG) brain signals Abstract 生成对抗网络(GANs)最近在涉及图像的生成应用中非常成功&#xff0c;并开始应用于时间序列数据。在这里&#xff0c;我们将EEG- gan描述为生成脑电图(EEG)大脑信号的框架…

18-19-20 - 深入特权级转移

---- 整理自狄泰软件唐佐林老师课程 文章目录1. 初识任务状态段&#xff08;TSS&#xff0c;Task State Segment&#xff09;1.1 TSS中不同特权级的栈信息1.2 特权级转移时的栈变化1.3 问题一1.4 目标实验&#xff08;操作系统雏形&#xff09;1.5 编程实验&#xff08;特权级转…

QT系列第3节 QT中混合UI设计

QT开发过程中&#xff0c;经常使用Qt designer设计器和代码方式结合来及进行ui设计&#xff0c;本节将介绍这两种方式混合进行ui开发。 目录 1.工程添加图片资源 2.添加菜单 3.添加工具栏 4.简单文本编辑器实现 5. QT Creator常用快捷键 1.工程添加图片资源 &#xff08;…

javaee之MyBatis框架1

什么是MyBatis框架 先来说一下&#xff0c;什么是框架&#xff0c;框架就是不断升级的半成品软件 框架主要解决的问题&#xff1a;就是应用自身的设计与具体实现解耦&#xff0c;重点放到应用自身的设计上&#xff0c;而不是具体技术实现&#xff0c;具体的技术实现是由底层支…

【JVM知识】插入式注解处理器实现java编程规范检测

【JVM知识】插入式注解处理器实现java编程规范检测一、前言二、Java 规范提案三、注解分类四、java编译器五、插入式注解处理器六、代码规范检测实现&#xff08;代码示例&#xff09;七、项目版本统一控制实现&#xff08;代码示例&#xff09;一、前言 最近在看**《深入理解…

人人都能看懂的Spring原理,看完绝对不会懵逼

人人都能看懂的Spring原理&#xff0c;绝对不会懵逼为什么要使用Spring&#xff1f;Spring的核心组件Spring是如何实现IOC和DI的&#xff1f;定义了BeanDefinition扫描加载BeanDefinition根据BeanDefinition进行Bean的实例化和初始化实例化属性赋值保存到单例缓冲池一个Bean从创…

【Java开发】 Staffjoy 01 :项目目标及案例需求

Staffjoy 是 Spring Boot & Kubernetes 云原生微服务实践&#xff0c;是一个贴近生产的微服务云原生教学案例&#xff0c;本文依波波老师的课程。新开了一个坑&#xff0c;希望能搞懂微服务框架&#xff0c;感兴趣的同学也欢迎讨论~ 目录 1 Staffjoy 项目目标 2 Staffjoy…

【Java寒假打卡】Java基础-StringBuilder类

【Java寒假打卡】Java基础-StringBuilder类一、概述二、构造方法三、常用方法四、StringBuilder提高效率的原理五、StringBuilder实现字符串反转一、概述 也就是使用String 拼接字符串每一次都要开辟新的堆内存空间&#xff0c;使用StringBuilder不需要开辟新的内存空间 String…

软件架构设计的七大原则

学习设计原则是学习设计模式的基础。千万不能形成强迫症。当碰到业务复杂的场景时&#xff0c;需要随机应变。 在实际开发过程中&#xff0c;并不是一定要求所有代码都遵循设计原则&#xff0c;而是要在适当的场景遵循设计原则&#xff0c;就可以帮助开发者设计出更加优雅的代…