毕设时候做的题目是《基于分数傅里叶变换和小波变换的图像加密解密》,当时分数傅里叶变换只是简单的应用了下,没留下什么太大的印象。反而是在应用小波的一些处理过程中,因为先后出现了很多问题,留了一些印象。记的最清楚的是一个这样的问题:试图使用二维多尺度离散小波变换,然后对得到的小波系数进行Arnold置乱处理,如果利用matlab子带的wavedec2,可以很容易实现分解(格式为:[c,s]=wavedec2(X,N,'wname')或者[c,s]=wavedec2(X,N,Lo_D,Hi_D)),然后利用appcoef2和detcoef2可以很容易地将低频和高频提取出来,例如:提取低频系数可以有A = appcoef2(C,S,'wname',N),提取水平方向的高频系数可以有H = detcoef2('h',C,S,N),提取垂直方向高频系数可以有
V = detcoef2('v',C,S,N);,提取对角线方向的高频系数可以有D= detcoef2('d',C,S,N),其中N为分解尺度。但是对提取出来的系数进行处理后,然后如何畸形重构呢?Matlab提供waverec2函数进行重构,格式为:X=waverec2(C,S,'wname') 或者X=waverec2(C,S,Lo_R,Hi_R) 。但是,处理后的系数是如何构成C和S呢?
当然可以使用维单尺度离散小波变换,通过迭代进行对低频进行单尺度离散小波分解,也可以达到对原图像进行多尺度分解的目的。而且若使用二维单尺度离散小波变换,各个系数的提取以及单支重构都有matlab现成的函数,很容易进行操作。唯一存在的问题是当避开二维多尺度离散变换函数,试图利用二维单尺度离散小波变换函数dwt2对每次分解后得到的低频系数不断进行处理时,在某些小波基的情况下会造成重构的失败。当时,也不知道有imresize这个函数,选的图像集就全部选了256*256大小的图片。汗。
还在各种QQ群里骚扰各路大神,有个同学给出了matlab自带的help里面的截图,说了句c里面存的就是你要的东西啊。额,不给自己找借口了,反正结果就是,最终上面的问题还是被自己堂而皇之的规避了过去。现在又遇上了,就猛的想起来哪位同学的话,就想试试。也正好好好地领略一下matlab的help的强大。当然,还是借助了网上的一些解释(一并谢过了)总算是弄得明白了很多。不怕被笑话,也总结一下。
在Mtlab里面help下wavedec2函数出来的说明里面,最重要的是下面的部分:
The output wavelet 2-D decomposition structure [C,S] contains the wavelet decomposition vector C and the corresponding bookeeping matrix S. Vector C is organized as:
C = [ A(N) | H(N) | V(N) | D(N) | H(N-1) | V(N-1) | D(N-1) | ... | H(1) | V(1) | D(1) ]. where A, H, V, D, are row vectors such that: A = approximation coefficients, H = hori. detail coefficients, V = vert. detail coefficients, D = diag. detail coefficients, eac