创建NxN Haar矩阵

时间:2014-05-26 12:00:55

标签: math image-processing signal-processing haar-wavelet

我无法找到生成非标准化NxN Haar矩阵的定义。那么等式是什么?

请参阅:http://en.wikipedia.org/wiki/Haar_wavelet

谢谢,克里斯

3 个答案:

答案 0 :(得分:1)

这取决于你想要达到的目标。 Haar矩阵是2x2 DCT矩阵,所以反过来,您可以将NxN DCT(II)矩阵视为该块大小的Haar矩阵。

或者如果N是二元的,N = 2 ^ n,那么你可能要求哈尔变换的n个阶段的变换矩阵。由于每个步骤中的采样率抽取,这可能是一个问题。

答案 1 :(得分:1)

总而言之。维基百科给出了'等式':

我写了一个递归解决方案,用于在八度音阶中生成非标准化的NxN Haar矩阵。

function [h] = haar(n)
h = [1];
if n > 2
    h = haar(n/2);
endif
% calculate upper haar part
h_n = kron(h,[1,1]); 
% calculate lower haar part 
h_i = kron(eye(length(h)),[1,-1]);
% combine parts
h = [h_n; h_i];
endfunction

disp(haar(8));

答案 2 :(得分:1)

以下是基于recursive formula for the Haar matrix的规范化和非规范化Haar matrix的算法:

来自论文"离散小波和扰动理论"作者:W-H Steeb,et al。这是Python中的实现

def haarMatrix(n, normalized=False):
    # Allow only size n of power 2
    n = 2**np.ceil(np.log2(n))
    if n > 2:
        h = haarMatrix(n / 2)
    else:
        return np.array([[1, 1], [1, -1]])

    # calculate upper haar part
    h_n = np.kron(h, [1, 1])
    # calculate lower haar part 
    if normalized:
        h_i = np.sqrt(n/2)*np.kron(np.eye(len(h)), [1, -1])
    else:
        h_i = np.kron(np.eye(len(h)), [1, -1])
    # combine parts
    h = np.vstack((h_n, h_i))
    return h