Study-基于小波技术进行图像融合

简介: Study-基于小波技术进行图像融合

案例背景


  图像融合最早是以数据融合理论为基础的,通过计算像素算术平均的方式得到合成图像。该方法忽略了像素间的相互关系,往往会产生融合图像的对比度差、可视化效果不理想等问题。因此,为了提高目标检测的分辨率,抑制不同传感器的检测噪声,本案例选择了--种基于小波变换的图像数据融合方法,首先通过小波变换将图像分解到高频、低频,然后分别进行融合处理,最后再逆变换到图像矩阵"。


在融合过程中,为了尽可能保持多源图像的特征,在小波分解的高频域内,选择图像邻域平均绝对值较大的系数作为融合小波重要系数;在小波分解的低频域内,选择对多源图像的低频系数进行加权平均作为融合小波近似系数。在反变换过程中,利用重要小波系数和近似小波系数作为输入进行小波反变换。在融合图像输出后,对其做进一步的处理。实验结果表明,基于小波变换的图像数据融合方法运行效率高,具有良好的融合效果,并可用于广泛的研究领域,具有- -定的使用价值。


  根据融合的作用对象,图像融合一般可以分为3个层次:像素级图像融合、特征级图像融合和决策级图像融合。其中,像素级融合是作用于图像像素点最底层的融合,本章所研究的图像融合是像素级图像融合口。



基础原理


  对图像进行小波变换的原理就是通过低通滤波器和高通滤波器对图像进行卷积滤波,再进行二取- -的下抽样。因此,图像通过一层小波变换可以被分解为1个低频子带和3个高频子带。其中,低频子带LL1通过对图像水平方向和垂直方向均进行低通滤波得到;高频子带HL1通过对图像水平方向高通滤波和垂直方向低通滤波得到;高频子带LH通过对图像水平方向低通滤波和垂直方向高通滤波得到;高频子带HH通过对图像水平方向高通滤波和垂直方向高通滤波得到。各子带的分辨率为原始图像的1/2。


同理,对图像进行二层 小波变换时只对低频子带LL进行,可以将LL1子带分解为LL2、LH2、HL2和HH2,各子带的分辨率为原始图像的1/4。以此类推可得到三层及更高层的小波变换结果。所以,进行一层小波变换得到4个子带,进行二层小波变换得到7个子带,进行x层分解就得到3●x+1个子带。如下图所示为三层小波变换后的系数分布。

image.png



程序实现


  本案例采用二维小波分解、融合、重建的操作流程进行程序实现,为增加实验效果的对比性,采用MATLAB的GUI框架建立软件主界面,关联相关功能函数实现小波图像融合处理。本节将介绍程序实现过程中的核心代码。


按钮1:载入图像1


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;
end
handles.file1 = fullfile(pathname, filename);
guidata(hObject, handles);
Img1 = imread(fullfile(pathname, filename));
axes(handles.axes1); 
imshow(Img1, []);


按钮2:载入图像2


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;
end
handles.file2 = fullfile(pathname, filename);
guidata(hObject, handles);
Img2 = imread(fullfile(pathname, filename));
axes(handles.axes2);
imshow(Img2, []);


按钮3:图像小波融合


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;
end
if 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');


按钮4:图像显示


if isempty(handles.result)
    msgbox('请进行填充处理!', '提示信息', 'modal');
    return;
end
axes(handles.axes3); 
imshow(handles.result, []);


子函数:Wave_Reconstruct


function Y = Wave_Reconstruct(Coef_Fusion, s, wtype)
if nargin < 3
    wtype = 'haar';
end
Y = waverec2(Coef_Fusion, s, wtype);


子函数:Wave_Decompose


function [c, s] = Wave_Decompose(M, zt, wtype)
if nargin < 3
    wtype = 'haar';
end
if nargin < 2
    zt = 2;
end
[c, s] = wavedec2(M, zt, wtype);


操作界面展示:


image.png


通过融合结果可以看出基于小波变换的图像融合比直接进行图像融合的效果要好很多。基于小波变换的融合图像弥补了两幅原图不同的缺陷,得到了完整的清晰图像。采用小波分解融合的方法不会产生明显的信息丢失现象,而直接进行融合所得的图像灰度值改变与原图不同。


  本案例通过小波变换将原图分解成-系列具有不同空间分辨率和频域特性的子图像,反映了原始图像的局部特征变化,在多个分解层、多个频带上进行融合从而得到较好的融合效果。通过图像融合,我们可以看到比较清晰的图像,以及互补原图的缺点。



相关文章
|
6月前
|
编解码 算法
基于小波变化图像融合
基于小波变化图像融合
51 1
|
人工智能 算法 图形学
山大SIGGRAPH 2023 最佳论文得主分享:点云法向估计及保特征重建
山大SIGGRAPH 2023 最佳论文得主分享:点云法向估计及保特征重建
278 0
|
传感器 机器学习/深度学习 人工智能
史上最全综述 | 3D目标检测算法汇总!(单目/双目/LiDAR/多模态/时序/半弱自监督)(下)
近年来,自动驾驶因其减轻驾驶员负担、提高行车安全的潜力而受到越来越多的关注。在现代自动驾驶系统中,感知系统是不可或缺的组成部分,旨在准确估计周围环境的状态,并为预测和规划提供可靠的观察结果。3D目标检测可以智能地预测自动驾驶车辆附近关键3D目标的位置、大小和类别,是感知系统的重要组成部分。本文回顾了应用于自动驾驶领域的3D目标检测的进展。
史上最全综述 | 3D目标检测算法汇总!(单目/双目/LiDAR/多模态/时序/半弱自监督)(下)
|
9月前
|
算法 数据挖掘 计算机视觉
OpenCV中应用尺度不变特征变换SIFT算法讲解及实战(附源码)
OpenCV中应用尺度不变特征变换SIFT算法讲解及实战(附源码)
112 0
|
9月前
[Halcon&笔记] 特征选择中的常用特征总结
[Halcon&笔记] 特征选择中的常用特征总结
324 0
|
机器学习/深度学习 传感器 编解码
【图像融合】基于高分辨率全色图IHS图像融合含评价指标附matlab代码
【图像融合】基于高分辨率全色图IHS图像融合含评价指标附matlab代码
|
存储 机器学习/深度学习 传感器
【图像压缩】基于小波结合spiht实现图像压缩附matlab代码
【图像压缩】基于小波结合spiht实现图像压缩附matlab代码
|
机器学习/深度学习 传感器 算法
【图像融合】基于小波变换DWT的高分辨率全色图图像融合(含评价指标)附Matlab代码
【图像融合】基于小波变换DWT的高分辨率全色图图像融合(含评价指标)附Matlab代码
|
机器学习/深度学习 传感器 算法
【图像去噪】基于改进非局部均值的红外图像去噪研究附matlab代码
【图像去噪】基于改进非局部均值的红外图像去噪研究附matlab代码
|
传感器 机器学习/深度学习 编解码
史上最全综述 | 3D目标检测算法汇总!(单目/双目/LiDAR/多模态/时序/半弱自监督)(上)
近年来,自动驾驶因其减轻驾驶员负担、提高行车安全的潜力而受到越来越多的关注。在现代自动驾驶系统中,感知系统是不可或缺的组成部分,旨在准确估计周围环境的状态,并为预测和规划提供可靠的观察结果。3D目标检测可以智能地预测自动驾驶车辆附近关键3D目标的位置、大小和类别,是感知系统的重要组成部分。本文回顾了应用于自动驾驶领域的3D目标检测的进展。
史上最全综述 | 3D目标检测算法汇总!(单目/双目/LiDAR/多模态/时序/半弱自监督)(上)