拉普拉斯金字塔是一种无损可逆的分解方法,它不具备方向性、稀疏性、平移不变性等你能想到的几乎任何特性,但它仍然是一种非常重要的思想和方法,此前给出过它的定义以及分解还原过程,但该过程是用代码描述,不够直观,较难理解,因此本文结合举例分析将这个知识点再次描述一遍,为接下来的非下采样拉普拉斯金字塔做铺垫知识。
为了减小规模,本文的举例全部基于4*4矩阵,比较直观。
一、高斯金字塔
高斯金字塔的构成只有两个步骤:
①、高斯滤波
②、下采样
高斯滤波是用高斯滤波核对像素点进行滤波的一种操作,复杂的计算不利于看清原理,在这里我们就认为高斯滤波是一种操作,而且是一种减法操作:
OK,可以发现矩阵的每个元素都-1了,我们就当做这叫高斯模糊,左边是原图像素值,右边是1层高斯,那么步骤1,完成,我们再来做步骤2,下采样,而且一定是抽值下采样每4个元素抽左上角,那么步骤2的操作过程如下:
于是我们的高斯金字塔底层以及第二层就构建好了,重复上面的操作,我们就得到了3层高斯金字塔:
二、拉普拉斯金字塔的构建
我们在上面的高斯金字塔构建中,假设高斯操作是像素值-1,那么拉普拉斯金字塔就是一种残差金字塔,它是一种带通滤波,其两个重要目的在最后分析。
拉普拉斯金字塔的构建过程可以是从上到下的(当然也可反过来),最上层的金字塔我们知道,就是[3]这个矩阵。
生成拉普拉斯金字塔的方法:
①、假设现在在第K层,现在需要求第K层的拉普拉斯金字塔。
②、对高斯金字塔的第K+1层进行上采样,之后再进行高斯滤波,得到(K+1)’。
③、使用高斯金字塔的第K层,减去刚刚得到的(K+1)’,就得到了拉普拉斯金字塔的第K层。
④、当处于顶层时,由于没有K+1层了,所以拉普拉斯金字塔的顶层就是高斯金字塔的顶层。
第三层拉普拉斯金字塔是【3】,图求的是第二层拉普拉斯金字塔。首先对顶层(本例对应第3层)金字塔执行高斯滤波,再进行上采样操作,步骤1结束;步骤2是使用下一层(第2层)金字塔减去上采样后的第3层,便得到第二层的差值了,同样我们可以得到第一层的差值:
利用第二层以及第一层高斯金字塔求得第一层拉普拉斯金字塔。于是得到拉普拉斯金字塔:
三、拉普拉斯金字塔的还原
这里的拉普拉斯金字塔的每一层就是细节信息了,拉普拉斯金字塔来自于高斯金字塔,但是一旦生成后,便成为独立的部分,仅通过拉普拉斯金字塔自身就可以实现原矩阵的还原:
①、拉普拉斯金字塔的还原是自上而下的,若顶层为K。
②、第K-1层的还原是拉普拉斯的K-1层+K‘。K‘即是第K层上采样后高斯滤波得到的。
③、逐层还原,直到得出原矩阵。
为了还原这一过程并验证,可以这样测试:
clc;clear;
A=[4,5,6,7;5,6,7,8;6,7,8,9;7,8,9,4];
A0=A;
L=1/16*[1;2;1]*[1,2,1];
A1=conv2(A,L,'same');A1=imresize(A1,0.5);
A2=conv2(A1,L,'same');A2=imresize(A2,0.5);
A0;A1;A2%高斯金字塔
A1_=imresize(A1,2);A1_=conv2(A1_,L,'same');
T0=A0-A1_;
A2_=imresize(A2,2);A2_=conv2(A2_,L,'same');
T1=A1-A2_;
T2=A2;
T0;T1;T2;%拉普拉斯金字塔
T2_=imresize(T2,2);T2_=conv2(T2_,L,'same');
T1=T1+T2_;
T1_=imresize(T1,2);T1_=conv2(T1_,L,'same');
T0_=T0+T1_;
B=T0_;%拉普拉斯金字塔重构
disp(A~=B)%验证重构矩阵是否与原矩阵相等。
四、拉普拉斯金字塔的意义
我们可以想到如下问题:
1、为什么高斯-拉普拉斯金字塔中要使用高斯滤波。
2、为什么要对图像反复上、下采样。
3、为什么笔算的上采样计算和其他人不一样。
4、拉普拉斯金字塔既然是带通滤波,通过的究竟是什么信息。
探讨:
问题1:高斯-拉普拉斯金字塔中为什么要使用高斯滤波——不然呢?名字都写了高斯-了,不用高斯滤波让这名字情何以堪-,-
手算过程中,使用-1这个操作代替了高斯操作,发现同样生成了高斯金字塔,对最终的结果也没有任何影响。这说明使用什么操作生成金字塔都是可行的,不同的操作会导致信息提取不同。我们使用高斯滤波器是因为它是性能良好的低通滤波器,我们的目的是要在生成高斯金字塔的每一层时,都把高频信息去除掉,留下低频的信息,于是我们使用低通滤波器;同样我们还可以使用均值滤波,像算例中那样全体-1而生成的金字塔基本上是没任何意义的;如果使用高通滤波生成金字塔,那么每次被舍弃的信息就是低频信息了-我们不常这样做,因为高频滤波器衰减比较快,直接用高通滤波器难以抓取多层次的高频信息–所以才有了曲线救国的方针:先用低通滤波把高频信息扔掉,再用拉普拉斯金字塔把这些高频信息取回。
问题2:为什么要对图像反复上、下采样。首先说下采样:直观上,下采样缩小了图像的尺寸,在用拉普拉斯金字塔的时候,相应地会获得更小尺寸的高频信息,答案出来了,为了获得更小的尺寸,拉普拉斯金字塔是最早的尺度分解器(塔式分解),每一层的尺寸不一样,就代表了不同的尺度,图像在不同尺度会反映出不同的特性,因此要对图像下采样;再说上采样:上采样是为了让高层的图像变换到大尺度中,从而可以做加减乘除。
问题3:为什么笔算的上采样计算和其他人不一样。
是的,通常情况,在传统LPT中,上采样是使用补0法实现的,而我在笔算中使用的是复制法,在MATLAB中使用的是二次插值法。使用补0法是最安全的,它可以最小程度影响上采样后进行的高斯滤波的准确性,如果上采样后不再进行高斯滤波,使用插值法性能会比较好。建议还是使用补0法,不同的上采样方法对LPT的性能其实也是有影响的,我们在之后分析。
问题4:拉普拉斯金字塔既然是带通滤波,通过的究竟是什么信息。通过计算我们发现,通过的信息是高频信息,具体组成是由两部分合并而来:第一部分,2倍的高斯滤波掉的高频信息,为什么是2倍请思考。第二部分,下采样时损失掉的信息。普拉普斯除了最上层之外,每层的包含的信息都是由上述两部分组成的。
补充:高斯滤波器的参数设置不同,可以影响拉普拉斯金字塔的信息含量,但影响总体较小,对LPT分解质量影响不大;而影响LPT质量的一个因素是上/下采样方法,通常上采样补0法,而下采样则是抽取的方法,都不采用插值法。插值会产生虚假的信息,这些信息混入高频信息就会影响质量。