【图像融合】高斯金字塔

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013165921/article/details/78155278

金字塔融合

原理:

  将参加融合的的每幅图像分解为多尺度的金字塔图像序列,将低分辨率的图像在上层,高分辨率的图像在下层,上层图像的大小为前一层图像大小的1/4。层数为0,1,2……N。将所有图像的金字塔在相应层上以一定的规则融合,就可得到合成金字塔,再将该合成金字塔按照金字塔生成的逆过程进行重构,得到融合金字塔。

  这个总的思路就是一下所有基于金字塔融合的算法过程,不同点就在于分解构造的金字塔不同,每层的融合规则不一样,重构的方法不同而已。金字塔方法最先实现了这种思想,之后小波方法进一步完善和发展了这种多尺度融和的思想。


高斯金字塔

  高斯金字塔是最基本的图像塔。首先将原图像作为最底层图像G0(高斯金字塔的第0层),利用高斯核(5*5)对其进行卷积,然后对卷积后的图像进行下采样(去除偶数行和列)得到上一层图像G1,将此图像作为输入,重复卷积和下采样操作得到更上一层图像,反复迭代多次,形成一个金字塔形的图像数据结构,即高斯金字塔。
高斯金字塔的构建过程为:假设高斯金字塔的第L层图像为Gl:

  式中N为高斯金字塔顶层层号,Rl和Cl分别为高斯金字塔第l层的行数和列数。W(m,n)是一个二维可分离的5*5窗口函数,表达式为:

  由G0,G1,,,GN,就构成了一个高斯金字塔,其中G0为高斯金字塔的底层(与原图像相同)GN为金字塔的顶层。由此可见高斯金字塔的当前层图像就是对其前一层图像首先进行高斯低通滤波,然后再进行隔行和隔列的降2采样而生成的。前一层图像大小依次为当前层图像大小的4倍。

  Opencv中使用pyrdown函数就可以获得高斯金字塔。

  下采样定义:
  对于一个样值序列间隔几个样值取样一次,这样得到新序列就是原序列的下采样。


代码示例

function w=gaosi(x,N)
%函数w=gaosi(f,N)的功能是建立原图像f的N层高斯金字塔
%输入参数:
%      x----输入原图像
%      N----所要建立高斯金字塔的层数
%输出参数:
%      w----高斯金字塔,w={G0,G1,G2,...,Gn},其中G0表示高斯金字塔的最底层,Gn表示高斯金字塔的最高层
%--------------------------------------%

x=double(x);
w={x};          %原图像作为高斯金字塔的最底层
for i=1:N-1
    a=reduce(x);%调用reduce函数得到上一层图像
    w=[w,a];    %每一层图像存入w中
    x=a;        %每次循环的结果作为下次循环reduce函数的输入
end
end


function y=reduce(x)
%函数y=reduce(x)的功能是实现输入图像x与w的卷积,然后进行降采样得到输出y
%输入参数:
%      x----输入的图像
%输出参数:
%      y----输出的图像,尺寸是输入的的一半,即隔行隔列降采样
%-------------------------------------------------------------%
[row,col]=size(x);

w=1/256*[1,4,6,4,1;4,16,24,16,4;6,24,36,24,6;4,16,24,16,4;1,4,6,4,1];
temp=conv2(x,w,'same');  %输入图像x与w进行卷积

M=floor(row/2);
N=floor(col/2);

for i=1:M                %隔行隔列降采样
    for j=1:N
        y(i,j)=temp(2*i,2*j);
    end
end

end

函数调用

I = imread('lena.jpg');
out = gaosi(I,4);
subplot(1,2,1);
imshow(I);
title("原图像");
subplot(1,2,2);
imshow(mat2gray(out{1}));
title("高斯金字塔");

运行结果


阅读更多

没有更多推荐了,返回首页