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


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


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



相关文章
|
8天前
|
机器学习/深度学习 数据挖掘 计算机视觉
【论文速递】CVPR2021 - 基于自适应原型学习和分配的小样本分割
【论文速递】CVPR2021 - 基于自适应原型学习和分配的小样本分割
|
8天前
|
机器学习/深度学习 编解码 数据可视化
Mamba入局遥感图像分割 | Samba: 首个基于SSM的遥感高分图像语义分割框架
Mamba入局遥感图像分割 | Samba: 首个基于SSM的遥感高分图像语义分割框架
22 3
|
8天前
|
机器学习/深度学习 算法 数据可视化
MATLAB基于深度学习U-net神经网络模型的能谱CT的基物质分解技术研究
MATLAB基于深度学习U-net神经网络模型的能谱CT的基物质分解技术研究
|
8天前
|
机器学习/深度学习 计算机视觉
【论文速递】MMM2020 - 电子科技大学提出一种新颖的局部变换模块提升小样本分割泛化性能
【论文速递】MMM2020 - 电子科技大学提出一种新颖的局部变换模块提升小样本分割泛化性能
22 0
|
10月前
|
算法 计算机视觉 异构计算
m基于FPGA的图像Harris角点特征提取和图像配准verilog实现,包含testbench和MATLAB辅助验证
m基于FPGA的图像Harris角点特征提取和图像配准verilog实现,包含testbench和MATLAB辅助验证
263 0
|
编解码 计算机视觉 网络架构
CVPR2021 | 重新思考BiSeNet让语义分割模型速度起飞(文末获取论文)(一)
CVPR2021 | 重新思考BiSeNet让语义分割模型速度起飞(文末获取论文)(一)
235 0
|
数据可视化 计算机视觉
CVPR2021 | 重新思考BiSeNet让语义分割模型速度起飞(文末获取论文)(二)
CVPR2021 | 重新思考BiSeNet让语义分割模型速度起飞(文末获取论文)(二)
96 0
|
机器学习/深度学习 人工智能 算法
R2AU-Net: 基于循环残差注意力和半监督学习范式的道路裂缝分割算法
R2AU-Net: 基于循环残差注意力和半监督学习范式的道路裂缝分割算法
151 0
|
机器学习/深度学习 存储 编解码
高效神经网络架构的正确打开方式 | EMO:结合 CNN 和 Transformer 的现代倒残差移动模块设计
高效神经网络架构的正确打开方式 | EMO:结合 CNN 和 Transformer 的现代倒残差移动模块设计
229 0
|
传感器 机器学习/深度学习 存储
登顶KITTI和NuScenes | 2DPASS:2D先验辅助的激光雷达点云语义分割!ECCV2022
语义分割在大规模室外场景理解中起着至关重要的作用,在自动驾驶和机器人技术中有着广泛的应用[1-3]。在过去几年中,研究界投入了大量精力,使用相机图像[4-7]或激光雷达点云[2,8-12]作为输入来理解自然场景。
登顶KITTI和NuScenes | 2DPASS:2D先验辅助的激光雷达点云语义分割!ECCV2022

热门文章

最新文章