【图像分析】基于matlab小波变换图像分析【含Matlab源码 1365期】

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、小波变换图像分析简介

0 引言
21世纪是信息化时代,图像成为了人类获取信息的重要载体,在人类日常生活中扮演着越来越重要的角色,地位越来越高,例如,在线浏览、下载图像和视频、医院根据MRI(核磁共振图像)诊断疾病。但在图像产生以及传输等过程中,会遭到设施、环境等要素的干扰,导致图像信息的破坏或丢失[1,2]。阻碍人的视觉或系统传感器对所接收信源信息进行理解的各种因素就叫做噪声。在图像采集和传输过程中,往往会遭到各种噪声的污染。噪声的产生会很大程度上降低原始图像的分辨率,使原始图像变得模糊难以用与日常的生活或者研究,严重影响后续的一系列高级数字图像处理。

因此,如何将图像在采集以及传输过程后的噪声进行消除就变得非常重要。然而,传统的图像去噪方法在降低噪声和保留图像细节方面的确难以令人满意。小波变换在高频段可以用低频分辨率分析信号,并在不同的空间上进行分析。基于小波理论的数字信号处理已经取得了蓬勃的发展,提供了一种全新的强劲信号处理手段。理所当然的将小波变换用于图像降噪中。

1 研究意义以及发展过程
基于小波变换的图像去噪主要是由小波域中的小波阈值处理完成。小波域图像去噪处理可被认为是对输入图像的最佳估计使用阈值的噪声数据。其结构图如图1所示。
在这里插入图片描述
图1 小波去噪结构框图
小波理论在图像去噪中应用的发展过程大致上可以分成三个阶段:第一阶段,Mallat提出了非常著名的基于小波系数模极大值的去噪方法。第二阶段,在以斯坦福大学的Donoho和Johnstone提出的一系列基于理论研究的小波阈值去噪方法。第三阶段,在各种模型的发展下,该阶段的主要特点是根据图像小波系数,通过图像小波系数的多尺度统计建模,对层内和层间存在的相关性进行去噪。
在这里插入图片描述
图2.a灰度图
在这里插入图片描述
图2.b一次离散小波变换图
在这里插入图片描述
图2.c一次逆离散小波变换图
图像是一个二维函数f(x,y),其中x和y是平面坐标,振幅在任何一对坐标(x,y)称为灰度级或强度那个时候的图。有两种类型的图像,即灰色缩放图像和RGB图像。图像在获取和传输中常常会被噪声破坏。有各种降噪技术被使用用于消除噪音。大多数使用的标准算法去噪图像并执行个体过滤过程。去噪通常会降低噪音水平但由于图像模糊或过度平滑边缘或线条等损失。近年来出现了大量关于小波阈值的研究和图像去噪的阈值部分,因为小波为分离噪声信号提供了适当的基础图像信号。小波变换擅长能量压实,小系数更有可能是由于重要的信号特征而产生的噪声和大系数。这些小系数可以在没有阈值的情况下进行阈值处理影响图像的重要特征。

2 技术实验以及分析
小波变换(WT)是信号分析的有力工具在处理多分辨率的场景下不像傅里叶变换,小波变换适用于应用具有瞬态的非平稳信号现象,其中频率响应随时间变化。小波系数表示相似度的度量信号和所选小波之间的频率成分功能。这些系数计算为信号和缩放小波函数的卷积,这可以解释为扩张的带通滤波器,因为其带通样频谱。通过小波分析从一个高尺度的信号,提取的全局信息称为近似值,并在两个尺度上,提取精细信息称为详细信息。
在这里插入图片描述
图5.c小波阈值去噪图像

离散小波变换(DWT)需要更少的空间利用节省空间的编码小波是正交或双正交基,并且因此不会产生多余的分析。离散的小波变换对应其连续版本通常在二元网格上采样。阈值化一次对一个小波系数进行运算,是一种简单的非线性技术。在其最基本形式,每个系数将与阈值进行比较。如果系数小于阈值然后将它设置为零,否则将保留或修改。

连续小波在处理对象时会造成理论对象的系数冗余,在实际应用中我们所需要在除去干扰信号的同时保有原始信号的低冗余性,因为离散的小波变换与连续的小波变换运算相比更加的便捷,且在实际的信号处理上计算机储存的都是离散信息。因此需要对尺寸参数和平移量参数离散处理,将原有的连续平移伸缩分量变换[7]。

如2图所示将lena图进行离散化,图2.a为灰度图像、图2.b一次离散小波变换图像、图2.c一次逆离散小波变换图像。

图3.a为灰度图像、图3.b为两次离散小波变换图像、图3.c为二次逆离散小波变换图像。

利用小波变换对图像进行去噪就是将有噪声的小波系数进行分解,然后从纯图像中计算出无限接近的小波系数值,噪声图像经过小波系数分解处理。小波系数由两部分组成分别是纯小波系数和噪声小波系数。两部分系数的和就是含噪图像分解的小波系数,而使用阈值对带噪图像的处理,就是阈值后的小波系数也叫作阈值函数。这样可以在最大限度上处理噪声,得到更加纯净的利用小波系数重构的图像。算法流程图如图4所示。
在这里插入图片描述
图4 小波阈值去噪基本流程图
算法实现后的图像如图所示,图5.a为灰度图像,图5.b为加入高斯噪声的图像,图5.c为小波软阈值去噪之后的图像。将灰度图像原图、加入高斯噪声的图像与降噪后的图像进行对比,降噪效果显而易见。

阈值函数在小波变换中对于图像降噪起到的作用就是系数选择,通过阈值对于高频小波系数进行处理,在阈值化中加入阈值函数表达式。在基于小波阈值去噪方法中,其中阈值的确定决定了去噪后的图像质量的好坏,对去除噪声的效果有着很大的影响。本实验选取的是软阈值函数,其数学表达式如下。
在这里插入图片描述
其中:y为含噪声信号的小波变化系数;T为去噪阈值;Tsoft为软阈值滤波的收缩函数;sgn(y)为符号函数。

软阈值滤波将幅值大于阈值的小波系数收缩且保留下来,软阈值的收缩函数的优点就是连续性好。

小波去噪还包括模极大值重构滤波方法。优点是它不像小波阈值去噪那样提前估计噪声的方差,但是它要使用到模极大值重构小波系数,这就导致大大增加的计算量,而且该方法降噪效果并不好,所以使用受到限制。

还有空域滤波方法,该方法利用小波系数尺度之间的相关性进行去噪,虽然原理简单,但是运算过程中需要进行多次迭代,这就也使得计算量大大增加,在图像去噪方面也不能广泛使用。

⛄二、部分源代码

function varargout = wavelet(varargin)
% WAVELET MATLAB code for wavelet.fig
% WAVELET, by itself, creates a new WAVELET or raises the existing
% singleton*.
%
% H = WAVELET returns the handle to a new WAVELET or the handle to
% the existing singleton*.
%
% WAVELET(‘CALLBACK’,hObject,eventData,handles,…) calls the local
% function named CALLBACK in WAVELET.M with the given input arguments.
%
% WAVELET(‘Property’,‘Value’,…) creates a new WAVELET or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before wavelet_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to wavelet_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 wavelet

% Last Modified by GUIDE v2.5 10-Jan-2021 05:42:48

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @wavelet_OpeningFcn, …
‘gui_OutputFcn’, @wavelet_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 wavelet is made visible.
function wavelet_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 wavelet (see VARARGIN)

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

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes wavelet wait for user response (see UIRESUME)
% uiwait(handles.figure_wavelet);
setappdata(handles.figure_wavelet,‘img_src’,0) %初始化变量到窗口框架
setappdata(handles.figure_wavelet,‘WAVELET_NAME’,0);
setappdata(handles.figure_wavelet,‘Filter_style’,0);
setappdata(handles.figure_wavelet,‘Image_R’,0);

% — Outputs from this function are returned to the command line.
function varargout = wavelet_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;

%%
% 一、导入图片
%
%
% — Executes on button press in Import_image.
function Import_image_Callback(hObject, eventdata, handles)
% hObject handle to Import_image (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[filename, pathname] = uigetfile( …
{‘.bmp;,jpg;.png;.jpeg;.tif’,'Image File(.bmp,.jpg,.png,jpeg,.tif)’;…
.’, ‘All File(.)’},…
‘Pick an image’);
axes(handles.axes_original); %用axes命令设定当前操作的坐标轴是axes_src
fpath = [pathname filename]; %将文件名和目录名组合成一个完整的路径
img_src = imread(fpath); %读取图片

imshow(img_src);                   %用imread读入图片,并用imshow在axes_src上显示
setappdata(handles.figure_wavelet,'img_src',img_src);

% — Executes on button press in analyze_image.
function analyze_image_Callback(hObject, eventdata, handles)
% hObject handle to analyze_image (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%Main

img_src = getappdata(handles.figure_wavelet,‘img_src’);
%[ X,map] = rgb2ind( img_src, 256);%把RGB图转化为索引图像,得到颜色矩阵map
%save ‘00’ X map; load 00;
%colormap( map);
HANDDLE_IMAGE = img_src;
%image(HANDDLE_IMAGE);

%%
% 二、选择小波的基波,计算出相关的滤波函数
%
%
WAVELET_NAME = getappdata(handles.figure_wavelet,‘WAVELET_NAME’);
%WAVELET_NAME = ‘sym8’;
[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(WAVELET_NAME);
RowLo_DTemp = RanksSampling(RanksConv(HANDDLE_IMAGE,Lo_D,‘r’),‘c’,2);

%%
% 三、分解
%
%
CA = RanksSampling(RanksConv(RowLo_DTemp,Lo_D,‘c’),‘r’,2);
RowLo_DTemp = RanksSampling(RanksConv(HANDDLE_IMAGE,Lo_D,‘r’),‘c’,2);
CA = RanksSampling(RanksConv(RowLo_DTemp,Lo_D,‘c’),‘r’,2);
CH = RanksSampling(RanksConv(RowLo_DTemp,Hi_D,‘c’),‘r’,2);
RowHi_DTemp = RanksSampling(RanksConv(HANDDLE_IMAGE,Hi_D,‘r’),‘c’,2);
CV = RanksSampling(RanksConv(RowHi_DTemp,Lo_D,‘c’),‘r’,2);
CD = RanksSampling(RanksConv(RowHi_DTemp,Hi_D,‘c’),‘r’,2);
%[CA,CH,CV,CD] = dwt2(HANDDLE_IMAGE,WAVELET_NAME);
axes(handles.axes_CA);
image(CA);
axes(handles.axes_CH);
image(CH);
axes(handles.axes_CV);
image(CV);
axes(handles.axes_CD);
image(CD);
%%
% 四、去噪
%
%

Filter_style = getappdata(handles.figure_wavelet,‘Filter_style’);
newCA =CA;
if(2 == Filter_style)

[THR,SORH,KEEPAPP]=ddencmp('den','wv',CH);%获取去噪过程中的默认阈值(软或硬)
newCH=wdencmp('gbl',CH,WAVELET_NAME,2,THR,SORH,KEEPAPP);
[THR,SORH,KEEPAPP]=ddencmp('den','wv',CV);%获取去噪过程中的默认阈值(软或硬)
newCV=wdencmp('gbl',CV,WAVELET_NAME,2,THR,SORH,KEEPAPP);%用全局阈值对图像去噪
[THR,SORH,KEEPAPP]=ddencmp('den','wv',CD);%获取去噪过程中的默认阈值(软或硬)
newCD=wdencmp('gbl',CD,WAVELET_NAME,2,THR,SORH,KEEPAPP);%用全局阈值对图像去噪

end
if(3 == Filter_style)
%下面用独立阈值选项进行图像的消噪
thr_h=[96.245,97.411];%水平方向阈值
thr_v=[99.321,94.122];%垂直方向阈值
thr_d=[95.762,92.330];%对角方向阈值
thr1=[thr_h;thr_v;thr_d];%三维矩阵,长度为N
newCH=wdencmp(‘lvd’,CH,WAVELET_NAME,2,thr1,‘s’);%选择软阈值
newCV=wdencmp(‘lvd’,CV,WAVELET_NAME,2,thr1,‘s’);
newCD=wdencmp(‘lvd’,CD,WAVELET_NAME,2,thr1,‘s’);
end

axes(handles.axes_newCA);
image(newCA);
axes(handles.axes_newCH);
image(newCH);
axes(handles.axes_newCV);
image(newCV);
axes(handles.axes_newCD);
image(newCD);

%%
% 五、重构
%
%
CA_Temp = RanksInterpolation(newCA,‘r’,2);
CH_Temp = RanksInterpolation(newCH,‘r’,2);
CloumnTemp1 = RanksConv(CA_Temp,Lo_R,‘c’)+RanksConv(CH_Temp,Hi_R,‘c’);
CV_Temp = RanksInterpolation(newCV,‘r’,2);
CD_Temp = RanksInterpolation(newCD,‘r’,2);
CloumnTemp2 = RanksConv(CV_Temp,Lo_R,‘c’)+RanksConv(CD_Temp,Hi_R,‘c’);

CloumnTempA = RanksInterpolation(CloumnTemp1,‘c’,2);
CloumnTempB = RanksInterpolation(CloumnTemp2,‘c’,2);
RowTemp = RanksConv(CloumnTempA,Lo_R,‘r’)+RanksConv(CloumnTempB,Hi_R,‘r’);

Image_R =wkeep(RowTemp,size(HANDDLE_IMAGE),‘c’); %提取向量和矩阵的部分

axes(handles.axes_worked);
image (Image_R)

setappdata(handles.figure_wavelet,‘Image_R’,Image_R);
%HANDDLE_IMAGE = img_src; %为避免后续程序中误用X故用自定义变量替代
%image(HANDDLE_IMAGE);
% imshow(X); %用imread读入图片,并用imshow在axes_src上显示

% WAVELET_NAME = ‘sym8’;
%[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(WAVELET_NAME);
%RowLo_DTemp = RanksSampling(RanksConv(HANDDLE_IMAGE,Lo_D,‘r’),‘c’,2);
%CA = RanksSampling(RanksConv(RowLo_DTemp,Lo_D,‘c’),‘r’,2);
%subplot(221);image(CA);colormap(map);title(‘Lo_D低通分解后的图像CA’)%画出CA的图像

% — Executes on selection change in popupmenu1.
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,‘String’)) returns popupmenu1 contents as cell array
% contents{get(hObject,‘Value’)} returns selected item from popupmenu1

% — Executes on selection change in wavelet_style.
function wavelet_style_Callback(hObject, eventdata, handles)
% hObject handle to wavelet_style (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,‘String’)) returns wavelet_style contents as cell array
% contents{get(hObject,‘Value’)} returns selected item from wavelet_style
WAVELET_NAME = ‘haar’;
val = get(handles.wavelet_style,‘Value’); %获取下拉框的值
switch val %选择小波
case 1
WAVELET_NAME = ‘haar’
case 2
WAVELET_NAME = ‘db2’;
case 3
WAVELET_NAME = ‘db4’;
case 4
WAVELET_NAME = ‘db6’;
case 5
WAVELET_NAME = ‘db8’;
case 6
WAVELET_NAME = ‘db10’;
case 7
WAVELET_NAME = ‘sym2’;
case 8
WAVELET_NAME = ‘sym4’;
case 9
WAVELET_NAME = ‘sym6’;
case 10
WAVELET_NAME = ‘sym8’;
case 11
WAVELET_NAME = ‘sym10’;
case 12
WAVELET_NAME = ‘coif1’;
case 13
WAVELET_NAME = ‘coif3’;
case 14
WAVELET_NAME = ‘coif5’;
case 15
WAVELET_NAME = ‘dmey’
case 16
WAVELET_NAME = ‘haar’
end
setappdata(handles.figure_wavelet,‘WAVELET_NAME’,WAVELET_NAME);

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

% Hint: popupmenu 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 selection change in filter_style.
function filter_style_Callback(hObject, eventdata, handles)
% hObject handle to filter_style (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,‘String’)) returns filter_style contents as cell array
% contents{get(hObject,‘Value’)} returns selected item from filter_style
Filter_style = get(handles.filter_style,‘Value’);
setappdata(handles.figure_wavelet,‘Filter_style’,Filter_style);

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

% Hint: popupmenu 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 m_thanks_Callback(hObject, eventdata, handles)
% hObject handle to m_thanks (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
h = thanks;

% --------------------------------------------------------------------
function m_about_Callback(hObject, eventdata, handles)
% hObject handle to m_about (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
h = about;

⛄三、运行结果

在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]韩天奇,杨文杰,赵建光.基于小波变换阈值图像去噪分析[J].软件. 2021,42(06)

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

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
f1=50; % 频率1 f2=100; % 频率2 fs=2*(f1+f2); % 采样频率 Ts=1/fs; % 采样间隔 N=120; % 采样点数 n=1:N; y=sin(2*pi*f1*n*Ts)+sin(2*pi*f2*n*Ts); % 正弦波混合 figure(1) plot(y); title('两个正弦信号') figure(2) stem(abs(fft(y))); title('两信号频谱') %% 2.小波滤波器谱分析 h=wfilters('db30','l'); % 低通 g=wfilters('db30','h'); % 高通 h=[h,zeros(1,N-length(h))]; % 补零(圆周卷积,且增大分辨率变于观察) g=[g,zeros(1,N-length(g))]; % 补零(圆周卷积,且增大分辨率变于观察) figure(3); stem(abs(fft(h))); title('低通滤波器图'); figure(4); stem(abs(fft(g))); title('高通滤波器图') %% 3.MALLET分解算法(圆周卷积的快速傅里叶变换实现) sig1=ifft(fft(y).*fft(h)); % 低通(低频分量) sig2=ifft(fft(y).*fft(g)); % 高通(高频分量) figure(5); % 信号图 subplot(2,1,1) plot(real(sig1)); title('分解信号1') subplot(2,1,2) plot(real(sig2)); title('分解信号2') figure(6); % 频谱图 subplot(2,1,1) stem(abs(fft(sig1))); title('分解信号1频谱') subplot(2,1,2) stem(abs(fft(sig2))); title('分解信号2频谱') %% 4.MALLET重构算法 sig1=dyaddown(sig1); % 2抽取 sig2=dyaddown(sig2); % 2抽取 sig1=dyadup(sig1); % 2插值 sig2=dyadup(sig2); % 2插值 sig1=sig1(1,[1:N]); % 去掉最后一个零 sig2=sig2(1,[1:N]); % 去掉最后一个零 hr=h(end:-1:1); % 重构低通 gr=g(end:-1:1); % 重构高通 hr=circshift(hr',1)'; % 位置调整圆周右移一位 gr=circshift(gr',1)'; % 位置调整圆周右移一位 sig1=ifft(fft(hr).*fft(sig1)); % 低频 sig2=ifft(fft(gr).*fft(sig2)); % 高频 sig=sig1+sig2; % 源信号 %% 5.比较 figure(7); subplot(2,1,1) plot(real(sig1)); title('重构低频信号'); subplot(2,1,2) plot(real(sig2)); title('重构高频信号'); figure(8); subplot(2,1,1) stem(abs(fft(sig1))); title('重构低频信号频谱'); subplot(2,1,2) stem(abs(fft(sig2))); title('重构高频信号频谱'); figure(9) plot(real(sig),'r','linewidth',2); hold on; plot(y); legend('重构信号','原始信号') title('重构信号与原始信号比较') f1=50; % 频率1 f2=100; % 频率2 fs=2*(f1+f2); % 采样频率 Ts=1/fs; % 采样间隔 N=120; % 采样点数 n=1:N; y=sin(2*pi*f1*n*Ts)+sin(2*pi*f2*n*Ts); % 正弦波混合 figure(1) plot(y); title('两个正弦信号') figure(2) stem(abs(fft(y))); title('两信号频谱') %% 2.小波滤波器谱分析 h=wfilters('db30','l'); % 低通 g=wfilters('db30','h'); % 高通 h=[h,zeros(1,N-length(h))]; % 补零(圆周卷积,且增大分辨率变于观察) g=[g,zeros(1,N-length(g))]; % 补零(圆周卷积,且增大分辨率变于观察) figure(3); stem(abs(fft(h))); title('低通滤波器图'); figure(4); stem(abs(fft(g))); title('高通滤波器图') %% 3.MALLET分解算法(圆周卷积的快速傅里叶变换实现) sig1=ifft(fft(y).*fft(h)); % 低通(低频分量) sig2=ifft(fft(y).*fft(g)); % 高通(高频分量) figure(5); % 信号图 subplot(2,1,1) plot(real(sig1)); title('分解信号1') subplot(2,1,2) plot(real(sig2)); title('分解信号2') figure(6); % 频谱图 subplot(2,1,1) stem(abs(fft(sig1))); title('分解信号1频谱') subplot(2,1,2) stem(abs(fft(sig2))); title('分解信号2频谱') %% 4.MALLET重构算法 sig1=dyaddown(sig1); % 2抽取 sig2=dyaddown(sig2); % 2抽取 sig1=dyadup(sig1); % 2插值 sig2=dyadup(sig2); % 2插值 sig1=sig1(1,[1:N]); % 去掉最后一个零 sig2=sig2(1,[1:N]); % 去掉最后一个零 hr=h(end:-1:1); % 重构低通 gr=g(end:-1:1); % 重构高通 hr=circshift(hr',1)'; % 位置调整圆周右移一位 gr=circshift(gr',1)'; % 位置调整圆周右移一位 sig1=ifft(fft(hr).*fft(sig1)); % 低频 sig2=ifft(fft(gr).*fft(sig2)); % 高频 sig=sig1+sig2; % 源信号 %% 5.比较 figure(7); subplot(2,1,1) plot(real(sig1)); title('重构低频信号'); subplot(2,1,2) plot(real(sig2)); title('重构高频信号'); figure(8); subplot(2,1,1) stem(abs(fft(sig1))); title('重构低频信号频谱'); subplot(2,1,2) stem(abs(fft(sig2))); title('重构高频信号频谱'); figure(9) plot(real(sig),'r','linewidth',2); hold on; plot(y); legend('重构信号','原始信号') title('重构信号与原始信号比较')
小波变换是一种用于图像去噪的有效方法。MATLAB提供了小波变换的函数,可用于实现去噪算法。 图像去噪可以通过如下步骤完成: 1. 读取原始的图像。 2. 将原始图像转换为灰度图像,以便进行小波变换。 3. 对灰度图像进行小波变换。 4. 根据设定的阈值,确定小波变换系数中需要去掉的噪声。 5. 对剩余的小波变换系数进行反变换,得到去噪后的图像MATLAB中可用的小波变换函数有:wavedec、waverec、wthresh等。其中,wavedec函数用于对图像进行小波分解,waverec函数用于进行小波重构,wthresh函数用于设定阈值。 去噪时,可以使用不同的小波基函数(如Daubechies小波、haar小波等),并根据实际需要调整小波分解的层数和阈值等参数,以达到最佳的去噪效果。 以下是一个使用Daubechies小波进行图像去噪的MATLAB示例代码: % 读取原始图像 I = imread('lena.png'); % 将图像转换为灰度图像 gray_I = rgb2gray(I); % 进行小波分解 [c, s] = wavedec2(gray_I, 4, 'db4'); % 获取小波系数 [H1, V1, D1, H2, V2, D2, H3, V3, D3, H4, V4, D4] = detcoef2('all', c, s, 1); A4 = appcoef2(c, s, 'db4', 4); % 设定阈值(本例采用软阈值,系数为2) T1 = wthresh(H1, 's', 2); T2 = wthresh(V1, 's', 2); T3 = wthresh(D1, 's', 2); T4 = wthresh(H2, 's', 2); T5 = wthresh(V2, 's', 2); T6 = wthresh(D2, 's', 2); T7 = wthresh(H3, 's', 2); T8 = wthresh(V3, 's', 2); T9 = wthresh(D3, 's', 2); T10 = wthresh(H4, 's', 2); T11 = wthresh(V4, 's', 2); T12 = wthresh(D4, 's', 2); T13 = wthresh(A4, 's', 2); % 去掉小于阈值的系数 H1 = wthresh(H1, 'h', T1); V1 = wthresh(V1, 'h', T2); D1 = wthresh(D1, 'h', T3); H2 = wthresh(H2, 'h', T4); V2 = wthresh(V2, 'h', T5); D2 = wthresh(D2, 'h', T6); H3 = wthresh(H3, 'h', T7); V3 = wthresh(V3, 'h', T8); D3 = wthresh(D3, 'h', T9); H4 = wthresh(H4, 'h', T10); V4 = wthresh(V4, 'h', T11); D4 = wthresh(D4, 'h', T12); A4 = wthresh(A4, 'h', T13); % 进行小波重构 c_new = [H1(:)', V1(:)', D1(:)', H2(:)', V2(:)', D2(:)', H3(:)', V3(:)', D3(:)', H4(:)', V4(:)', D4(:)', A4(:)']; out_I = waverec2(c_new, s, 'db4'); % 显示原始图像和去噪后的图像 subplot(1,2,1), imshow(gray_I), title('Original Image'); subplot(1,2,2), imshow(out_I, []), title('Denoised Image');

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海神之光

有机会获得赠送范围1份代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值