资源简介

小波图像融合matlab实现源代码 ,利用小波实现了图像融合。含图片

资源截图

代码片段和文件信息

function y=imfus(I1I2);
st=cputime; % 程序开始运行时的cpu时间
I1=imread(‘untitled3.jpg‘);
I2=imread(‘untitled4.jpg‘);
I1=I1(::1);I2=I2(::1);    %读取彩色RGB图像的第一颜色分量

[r1c1]=size(I1);             % 读取图像分解后的小波分解系数矩阵的大小
[r2c2]=size(I2);
if (r1~=r2)||(c1~=c2)
    error(‘Images dimension mismatch.The image size must be the same!‘);
    return;
end

dim=3;
figure;                     % 对模糊化后的两幅图像进行小波分解
y1=mywavedec2(I1dim);
figure;
y2=mywavedec2(I2dim);

[rc]=size(y1); % 根据低频融合算法进行图像融合
for i=1:r % 首先取两幅源图像相应的小波分解系数最大值作为融合图像的分解系数
    for j=1:c
        if ( abs(y1(ij)) >= abs(y2(ij)) )
            y3(ij)=y1(ij);
        elseif ( abs(y1(ij)) < abs(y2(ij)) )
            y3(ij)=y2(ij);
        end
    end
end

LLa=y1(1:r/(2^dim)1:c/(2^dim)); % 调用lowfrefus函数对低频部分的小波分解系数进行融合
LLb=y2(1:r/(2^dim)1:c/(2^dim));
y3(1:r/(2^dim)1:c/(2^dim))=lowfrefus(LLaLLb);

yr=mywaverec2(y3dim);    % 调用mywaverec2函数重构融合图像

et=cputime-st % 计算程序运行所用的时间

averEntropy1=averEntropy(I1)
averEntropy2=averEntropy(I2)
averEntropy3=averEntropy(yr)

aveGrad1 = avegrad(I1)
aveGrad2 = avegrad(I2)
aveGrad3 = avegrad(yr)

function y=upspl(x);

N=length(x);        % 读取输入序列长度
M=2*N-1;            % 输出序列的长度是输入序列长度的2倍再减一
for i=1:M           % 输出序列的偶数位为0,奇数位按次序等于相应位置的输入序列元素
    if mod(i2)
        y(i)=x((i+1)/2);
    else
        y(i)=0;
    end
end

function [smatmpnp] = submat(xplevel);
% 函数 submat 取输入矩阵中以点P为中心、阶数为(2*level+1)的方阵作为输出的子矩阵

[rowcol]=size(x);
m=p(1); n=p(2);

if (m>row)||(n>col)
    error(‘Point p is out of matrix X !‘);
    return;
end
if ((2*level+1)>row)||((2*level+1)>col)
    error(‘Too large sample area level !‘);
    return;
end
% 设置子矩阵的边界值
up=m-level;     down=m+level;
left=n-level;   right=n+level;
% 若子矩阵的某一边界值超出输入矩阵的相应边界,就进行边界处理,
% 即超出边界后往相反方向平移,使其恰好与边界重合
if left<1
    right=right+1-left;
    left=1;
end
if right>col
    left=left+col-right;
    right=col;
end
if up<1
    down=down+1-up;
    up=1;
end
if down>row
    up=up+row-down;
    down=row;
end
% 获取作为输出的子矩阵,并计算点p在输出的子矩阵中的位置
smat = x(up:downleft:right);
mp=m-up+1;np=n-left+1;

function y=mywaverec2(xdim)
xd=uint8(x);            % 将输入矩阵的数据格式转换为适合显示图像的uint8格式
[mn]=size(x);          % 求出输入矩阵的行列数
for i=1:dim             % 对转换矩阵xd进行分界线处理
    m=m-mod(m2);
    n=n-mod(n2);
    xd(m/21:n)=255;
    xd(1:mn/2)=255;
    m=m/2;n=n/2;
end
figure;
subplot(121);imshow(xd);title([ num2str(dim) ‘ 层小波分解图像‘]);  % 画出带有分界线的分解图像

xr=double(x);           % 将输入矩阵的数据格式转换回适合数值处理的double格式
[rowcol]=size(xr);     % 求出转换矩阵xr的行列数
for i=dim:-1:1          % 重构次序是从内层往外层进行,所以先抽取矩阵 xr 的最内层分解矩阵进行重构
    tmp=xr(1:floor(row/2^(i-1))1:floor(col/2^(i-1)));       % 重构的内层矩阵的行列数均为矩阵xr的2^(i-1)
    [rt1ct1]=size(tmp);                         % 读取待重构矩阵 tmp 的行列数
    rt=rt1-mod(rt12);ct=ct1-mod(ct12);
    rLL=tmp(1:rt/21:ct/2);                    % 将待重构矩阵 tmp 分解为四个部分
    rHL=tmp(1:rt/2ct/2+1:ct);
    rLH=tmp(rt/2+1:rt1:ct

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      11700  2009-04-19 11:23  WaveletImageFusion.m

     文件        725  2011-08-03 16:01  新建 文本文档 (3).txt

----------- ---------  ---------- -----  ----

                12425                    2


评论

共有 条评论