传统的信号理论,是建立在Fourier分析基础上的,而Fourier变换作为一种全局性的变化,其有一定的局限性,如不具备局部化分析能力、不能分析非平稳信号等。在实际应用中人们开始对Fourier变换进行各种改进,以改善这种局限性,如STFT(短时傅立叶变换)。由于STFT采用的的滑动窗函数一经选定就固定不变,故决定了其时频分辨率固定不变,不具备自适应能力。
小波分析很好的解决了这个问题。小波直接把傅里叶变换的基给换了——将无限长的三角函数基换成了有限长的会衰减的小波基。这样不仅能够获取频率,还可以定位到时间了。
常见小波函数:Haar、Daubechies、Biorthogonal、Coiflets、Symlets、Morlet、Mexican Hat、Meyer、Gaus、Dmeyer、ReverseBior、Cgau、Cmor、Fbsp、Shan.
clc;clear all;x1 = imread('images\实验图像1\1.jpg');x2 = imread('images\实验图像1\2.jpg');M1 = double(x1) ;M2 = double(x2);zt = 2;wtype = 'haar';[c0, s0] = Wave_Decompose(M1, zt, wtype);[c1, s1] = Wave_Decompose(M2, zt, wtype);Coef_Fusion = Fuse_Process(c0, c1, s0, s1);Y = Wave_Reconstruct(Coef_Fusion, s0, wtype);I=im2uint8(mat2gray(Y));subplot(1,3,1);imshow(x1);title('左模糊');subplot(1,3,2);imshow(x2);title('右模糊');figure;imshow(I);title('基于小波变换的图像融合');
function varargout = MainForm(varargin)% MAINFORM MATLAB code for MainForm.fig% MAINFORM, by itself, creates a new MAINFORM or raises the existing% singleton*.%% H = MAINFORM returns the handle to a new MAINFORM or the handle to% the existing singleton*.%% MAINFORM('CALLBACK',hObject,eventData,handles,...) calls the local% function named CALLBACK in MAINFORM.M with the given input arguments.%% MAINFORM('Property','Value',...) creates a new MAINFORM or raises the% existing singleton*. Starting from the left, property value pairs are% applied to the GUI before MainForm_OpeningFcn gets called. An% unrecognized property name or invalid value makes property application% stop. All inputs are passed to MainForm_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 MainForm% Last Modified by GUIDE v2.5 22-Dec-2013 09:58:50% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @MainForm_OpeningFcn, ... 'gui_OutputFcn', @MainForm_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []);if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1});endif 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 MainForm is made visible.function MainForm_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 MainForm (see VARARGIN)% Choose default command line output for MainFormhandles.output = hObject;clc; axes(handles.axes1); cla reset; box on; set(gca, 'XTickLabel', '', 'YTickLabel', '');axes(handles.axes2); cla reset; box on; set(gca, 'XTickLabel', '', 'YTickLabel', '');axes(handles.axes3); cla reset; box on; set(gca, 'XTickLabel', '', 'YTickLabel', '');% Update handles structureguidata(hObject, handles);% UIWAIT makes MainForm wait for user response (see UIRESUME)% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.function varargout = MainForm_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 structurevarargout{1} = 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)clc; axes(handles.axes1); cla reset; box on; set(gca, 'XTickLabel', '', 'YTickLabel', '');axes(handles.axes2); cla reset; box on; set(gca, 'XTickLabel', '', 'YTickLabel', '');axes(handles.axes3); cla reset; box on; set(gca, 'XTickLabel', '', 'YTickLabel', '');handles.file1 = [];handles.file2 = [];handles.result = [];[filename, pathname] = uigetfile({'*.jpg;*.tif;*.png;*.gif', 'All Image Files';... '*.*', 'All Files' }, '选择图像1', ... fullfile(pwd, 'images\\实验图像1\\a.tif'));if isequal(filename, 0) return;endhandles.file1 = fullfile(pathname, filename);guidata(hObject, handles);Img1 = imread(fullfile(pathname, filename));axes(handles.axes1); imshow(Img1, []);% --- Executes on button press in pushbutton2.function pushbutton2_Callback(hObject, eventdata, handles)% hObject handle to pushbutton2 (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({'*.jpg;*.tif;*.png;*.gif', 'All Image Files';... '*.*', 'All Files' }, '选择图像2', ... fullfile(pwd, 'images\\实验图像1\\b.tif'));if isequal(filename, 0) return;endhandles.file2 = fullfile(pathname, filename);guidata(hObject, handles);Img2 = imread(fullfile(pathname, filename));axes(handles.axes2);imshow(Img2, []);% --- Executes on button press in pushbutton3.function pushbutton3_Callback(hObject, eventdata, handles)% hObject handle to pushbutton3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)if isempty(handles.file1) msgbox('请载入图像1!', '提示信息', 'modal'); return;endif isempty(handles.file2) msgbox('请载入图像2!', '提示信息', 'modal'); return;end[imA, map1] = imread(handles.file1);[imB, map2] = imread(handles.file2);M1 = double(imA) / 256;M2 = double(imB) / 256;zt = 2;wtype = 'haar';[c0, s0] = Wave_Decompose(M1, zt, wtype);[c1, s1] = Wave_Decompose(M2, zt, wtype);Coef_Fusion = Fuse_Process(c0, c1, s0, s1);Y = Wave_Reconstruct(Coef_Fusion, s0, wtype);handles.result = im2uint8(mat2gray(Y));guidata(hObject, handles);msgbox('小波融合处理完毕!', '提示信息', 'modal');% --- Executes on button press in pushbutton4.function pushbutton4_Callback(hObject, eventdata, handles)% hObject handle to pushbutton4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)if isempty(handles.result) msgbox('请进行填充处理!', '提示信息', 'modal'); return;endaxes(handles.axes3); imshow(handles.result, []);
function [c, s] = Wave_Decompose(M, zt, wtype)if nargin < 3 wtype = 'haar';endif nargin < 2 zt = 2;end[c, s] = wavedec2(M, zt, wtype);
function Y = Wave_Reconstruct(Coef_Fusion, s, wtype)if nargin < 3 wtype = 'haar';endY = waverec2(Coef_Fusion, s, wtype);