图像分解基于matlab GUI二维图像小波分解含Matlab源码 2297期
Posted 海神之光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像分解基于matlab GUI二维图像小波分解含Matlab源码 2297期相关的知识,希望对你有一定的参考价值。
⛄一、小波的二维图像分解简介
本文使用了两种小波分析方法:haar和db3,这两种小波很好的体现了小波变换的特点。下面就分别介绍这两种小波函数。
1 Haar小波函数
Haar函数是在小波分析中最早用到的一个具有紧支撑的正交小波函数,同时也是最简单的一个函数,它是非连续的,类似一个阶梯函数。Haar小波函数的定义为:
2 db3小波函数
db3小波函数是dbN(Daubechies)小波系中的一个,Daubechies函数是由世界著名的小波分析学者Inrid Daubechies构造的小波函数,除了db1(即Haar小波)外,其他的小波没有明确的表达式,但转换函数h的平方模是很明确的。dbN函数是紧支撑标准正交小波,它的出现使离散小波分析成为可能。
下面给出dbN的定义:
dbN小波函数ψ和尺度函数φ的有效支撑长度为2N-1,小波函数ψ的消失矩阶数为N。
dbN大多数不具有对称性,对于有些小波函数,不对称是非常明显的。
正则性随着序号N的增加而增加。
函数具有正交性。
Davbechies小波函数提供了比Haar小波函数更有效的分析和综合。Daubechies系中的小波基记为dbN,N为序号,且N=1,2,…10。
这里就不给出db3的图像了。
2 小波分解与重构过程
Haar小波是最简单的小波函数,因此这里以Haar小波为例说明小波分解与重构的具体过程。假设有一幅分辨率只有4 个像素p0,p1,p2,p3的一维图像,对应的像素值或者叫做图像位置的系数分别为:
[9 7 3 5]
那么计算它的Haar小波变换系数的步骤如下。
步骤1:求均值(averaging)。计算相邻像素对的平均值,得到一幅分辨率比较低的新图像,它的像素数目变成了2个,即新的图像的分辨率是原来的1/2,相应的像素值为:
[8 4]
步骤2:求差值(differencing)。很明显,用2个像素表示这幅图像时,图像的信息已经部分丢失。为了能够从由2个像素组成的图像重构出由4个像素组成的原始图像,就需要存储一些图像的细节系数(detail coefficient),以便在重构时找回丢失的信息。方法是把像素对的第一个像素值减去这个像素对的平均值,或者使用这个像素对的差值除以2。在这个例子中,第一个细节系数是(9-8)=1,因为计算得到的平均值是8,它比9小1 而比7大1,存储这个细节系数就可以恢复原始图像的前两个像素值。使用同样的方法,第二个细节系数是(3-4)=-1,存储这个细节系数就可以恢复后2 个像素值。因此,原始图像就可以用下面的两个平均值和两个细节系数表示:
[8 4 1 -1]
步骤3:重复第1,2 步,把由第一步分解得到的图像进一步分解成分辨率更低的图像和细节系数。在这个例子中,分解到最后,就用一个像素的平均值6和三个细节系数2,1和-1表示整幅图像。
[6 2 1 -1]
由此可见,通过上述分解就把由4像素组成的一幅图像用一个平均像素值和三个细节系数表示,这个过程就是Haar小波变换。
在这个过程中可以看到:
1)变换过程中没有丢失信息,因为能够从所记录的数据中重构出原始图像。
2)对这个给定的变换,可以从所记录的数据中重构出各种分辨率的图像。
3)变换之后产生的细节系数的幅度值比较小,这为图像压缩提供了一种途径,例如去掉一些微不足道的细节系数而不影响对重构图像的理解。
上面的例子可以看出,在对一维信号的变换中求均值和差值的过程实际上就是Haar小波分解的过程,这对于其他的小波函数也是一样的,只是计算方法有所不同。而对于多维信号,只要分别先对每一行进行求均值和差值的过程,然后对每一列进行同样的分解,就可以实现。如,对于下面这个二维数组X进行Haar小波分解:
先对每一行进行求均值和差值的过程,即对每一行进行一维Haar小波变换,可以得到下面这个数组:
其中每行第一个数据是每一行的均值,其余的是这行的细节系数。
然后使用同样的方法对每一列进行求均值和差值的过程,即对每一列进行一维Haar小波变换,就可以得到经Haar小波分解后的信息:
其中,左上角的元素表示整个图像块的像素值的平均值,其余是该图像块的细节系数。由此我们可以设置一个阈值,通过将一些小于此阈值的细节系数看作0来提高编码效率,达到压缩的目的。比如在这里设定阈值d=5,即将细节系数小于5的数据看作0,得到数组:
由于0的数量多了,可以使编码效率大大提高,从而实现压缩的目的。而将此数组进行Haar小波逆变换,即小波重构,就可以得到原数组的近似重构数组:
由此数组看出重构得到的数组与原数组还是有相当的近似程度,在一定程度上是可以接受的。
⛄二、部分源代码
function varargout = waveletgui(varargin)
% WAVELETGUI MATLAB code for waveletgui.fig
% WAVELETGUI, by itself, creates a new WAVELETGUI or raises the existing
% singleton*.
%
% H = WAVELETGUI returns the handle to a new WAVELETGUI or the handle to
% the existing singleton*.
%
% WAVELETGUI(‘CALLBACK’,hObject,eventData,handles,…) calls the local
% function named CALLBACK in WAVELETGUI.M with the given input arguments.
%
% WAVELETGUI(‘Property’,‘Value’,…) creates a new WAVELETGUI or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before waveletgui_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to waveletgui_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 waveletgui
% Last Modified by GUIDE v2.5 25-Dec-2022 00:20:39
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @waveletgui_OpeningFcn, …
‘gui_OutputFcn’, @waveletgui_OutputFcn, …
‘gui_LayoutFcn’, [] , …
‘gui_Callback’, []);
if nargin && ischar(varargin1)
gui_State.gui_Callback = str2func(varargin1);
end
if nargout
[varargout1:nargout] = gui_mainfcn(gui_State, varargin:);
else
gui_mainfcn(gui_State, varargin:);
end
% End initialization code - DO NOT EDIT
% — Executes just before waveletgui is made visible.
function waveletgui_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 waveletgui (see VARARGIN)
% Choose default command line output for waveletgui
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes waveletgui wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% — Outputs from this function are returned to the command line.
function varargout = waveletgui_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
varargout1 = handles.output;
% — Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global im
global cmap
%选择图片路径
[filename, pathname] = …
uigetfile(‘.jpg’;'.bmp’;‘*.gif’,‘选择图片’);
%合成路径+文件名
str = [pathname, filename];
%读取图片
[im,cmap] = imread(str);
%使用第一个axes
axes(handles.axes1);
%显示图片
imshow(im);
% — Executes when selected object is changed in uipanel1.
function uipanel1_SelectionChangeFcn(hObject, eventdata, handles)
% hObject handle to the selected object in uipanel1
% eventdata structure with the following fields (see UIBUTTONGROUP)
% EventName: string ‘SelectionChanged’ (read only)
% OldValue: handle of the previously selected object or empty if none was selected
% NewValue: handle of the currently selected object
% handles structure with handles and user data (see GUIDATA)
⛄三、运行结果
⛄四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]李利明,杨莉军,王洪.基于小波的二维图像分解与重构[J].湖南冶金职业技术学院学报. 2005,(04)
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
以上是关于图像分解基于matlab GUI二维图像小波分解含Matlab源码 2297期的主要内容,如果未能解决你的问题,请参考以下文章
图像融合基于matlab低频融合策略小波图像融合含Matlab源码 2319期
图像融合基于matlab低频融合策略小波图像融合含Matlab源码 2319期
图像融合基于matlab主成分结合小波离散变换PCA-DWT图像融合含Matlab源码 2199期
图像融合基于matlab双树复小波变换像素级图像融合含Matlab源码 2024期