Exemple #1
0
def _GetHH(m, X):
    """
        Принимает X - градиент по геометрии Фрайда.
        Возращает HH - квадрант составляющую на m-ом уровне. m>=2
    """
    coef = np.sqrt(2**(m - 1))
    buf = ut.convolve_2d(X, ut.GetH_l(2**0), 'horizontal')
    buf = ut.convolve_2d(buf, ut.GetH_l(2**0), 'horizontal')
    buf = ut.convolve_2d(buf, ut.GetH_h(2**(m - 1)), 'vertical')
    if (m == 2):
        return ut.down_sample(buf, 4).T * coef
    for k in range(1, m - 1):
        buf = ut.convolve_2d(buf, ut.GetH_l(2**k), 'horizontal')
        buf = ut.convolve_2d(buf, ut.GetH_l(2**k), 'horizontal')
        buf = ut.convolve_2d(buf, ut.GetH_l(2**k), 'vertical')
    return ut.down_sample(buf, 2**m).T * coef
Exemple #2
0
def _get_HH_right(X_H, Y_H):
    """
        Принимает X_H, Y_H - градиенты по геометрии Хаджина.
        Возращает HH - квадрант на 1-ом уровне.
    """
    coef = np.sqrt(2) * 0.25
    tmp1 = ut.convolve_2d(X_H, ut.GetH_h(1), 'vertical')
    tmp2 = ut.convolve_2d(Y_H, ut.GetH_h(1), 'horizontal')
    return ut.down_sample(tmp1 + tmp2, 2) * coef
Exemple #3
0
def _GetHL(m, X):
    """
        Принимает X - градиент по геометрии Фрайда.
        Возращает LH - квадрант составляющую на m-ом уровне. m >=1
    """
    coef = np.power(np.sqrt(2), (m - 1))
    tmp = X
    for i in range(m - 1):
        tmp = ut.convolve_2d(tmp, ut.GetH_l(2**i), 'horizontal')
        tmp = ut.convolve_2d(tmp, ut.GetH_l(2**i), 'horizontal')
    for i in range(1, m):
        tmp = ut.convolve_2d(tmp, ut.GetH_l(2**i), 'vertical')
    return coef * ut.down_sample(tmp, 2**m)
Exemple #4
0
def analyze(gradX, gradY, X_H, Y_H):
    """
        Принимает градиенты по геометриям
        Хаджина и Фрайда. Возращает словари LH, HL, HH с разложением
        по уровням.

        Минусы и транспонирования добавлены для совместимости с
        модулем Pywawelets.
        analyze вернет при точных параметрах такое же значение как и
        dwt2(array,'haar') из модуля pywt(Pywawelets).
    """
    M = int(np.log2(len(gradX)))
    LH = dict()
    HL = dict()
    HH = dict()
    HH[M - 1] = _get_HH_right(X_H, Y_H).T
    HL[M - 1] = -ut.down_sample(gradX, 2).T
    LH[M - 1] = -ut.down_sample(gradY, 2).T
    for k in range(M - 1):
        LH[k] = -_GetLH(M - k, gradY).T
        HL[k] = -_GetHL(M - k, gradX).T
        if (k != M - 1):
            HH[k] = _GetHH(M - k, gradX)
    return LH, HL, HH