2016-07-16 29 views
0

Hier ist die erste Frage: About the output value range of LeGall 5/3 waveletMatrixmultiplikation Ergebnis Wertebereich

Heute habe ich eigentlich die gefunden als Matrixmultiplikation zu sehen verwandeln kann. Es ist einfach, die Wavelet-Koeffizienten als eine Matrix zu berechnen (um den Wert abzuschätzen, wird die gesamte Abgerundete Aktion ignoriert, die die Schätzung des Maximalwerts nicht beeinflusst).

Die erste Ebene des DWT2 hat zwei Schritte, um den LeGall 5/3 Filter in zwei Richtungen auszuführen. Wenn wir das I als die 8 * 8-Eingangsmatrix und A als die Wavelet-Koeffizientenmatrix sehen.

  1. für die horizontale Richtung: output1 IA =

  2. Dann wird die vertikale Richtung berechnet wird: In der Tat kann es als output2 = output1'.A dargestellt werden (mit der Transponierten output1 zu multipliziere A erneut), was die Transponierte des gewünschten Ergebnisses ergibt.

  3. Transponieren Sie den Ausgang2. output_lvl1 = output2 '= (output1'.A)' = ((IA) '. A)' = (A'.I'.A) '= A'.IA (Ich lege hier Details vor, um es ohne die Mathe Symbol ...)

Und der 2. Ebene der Wavelet nur an der LL-Bereich durchgeführt, die die output_lvl1 (1: 4,1: 4). Und grundsätzlich ist der Prozess der gleiche (die Koeffizientenmatrix wird als B dargestellt). Hier

sind die Koeffizienten der Matrix A und B auf meiner Berechnung basieren (hoffen, dass es richtig ist ...)

A = [0.75 -0.125 0  0  -0.5 0 0 0; 
     0.5  0.25 0  0  1 0 0 0; 
     -0.25 0.75 -0.125 0  -0.5 -0.5 0 0; 
     0  0.25 0.25 0  0 1 0 0; 
     0  -0.125 0.75 -0.125 0 -0.5 -0.5 0 
     0  0  0.25 0.25 0 0 1 0; 
     0  0  -0.125 0.625 0 0 -0.5 -1; 
     0  0  0  0.25 0 0 0 1]; 

B = [0.75 -0.125 -0.5 0; 
    0.5 0.25 1 0; 
    -0.25 0.75 -0.5 -1; 
    0  0.125 0 1]; 

Und nun die Frage wurde: 1. wenn wir wissen, A und den Bereich der Eingabe (Matrix I), die -128 bis +127 ist, was ist der Wertebereich von output_lvl1 = A'.IA?

  1. Wenn wir output_lvl1 (1: 4,1: 4) als Eingang I2 verwenden, was ist der Wertebereich von B'.I2.B?

Ich brauche wirklich etwas Mathe Hilfe hier. Vielen Dank im Voraus.

+0

versuchen http://math.stackexchange.com/ – kangshiyin

+0

versucht, aber keine Antwort entweder ... – qiuhan1989

Antwort

1

Nun endlich habe ich einen Weg gefunden, dies zu lösen. SymPy lib ist was ich wirklich brauche.

Da der Maximalwert nur in den Ergebnissen von B'.I2.B möglich ist. Also wird ein Programm dies tun.

from sympy import * 
def calcu_max(strin): 
    x=0 
    strin1 = str(strin).replace('*',' ').replace('+',' ').replace('-',' ') 
    strin1 = strin1.split(' ') 
    for ele in strin1: 
     if '[' in ele or ']' in ele or ele =='': 
      continue 
     x = x + float(ele) 
    return x 

DWT1 = Matrix(8, 8, [0.75, -0.125, 0, 0,-0.5, 0, 0, 0, 0.5, 0.25, 0, 0, 1, 0, 0, 0, -0.25, 0.75, -0.125, 0, -0.5, -0.5, 0, 0, 0, 0.25, 0.25, 0, 0, 1, 0, 0, 0,-0.125, 0.75, -0.125, 0, -0.5, -0.5, 0, 0, 0, 0.25, 0.25, 0, 0, 1, 0, 0, 0, -0.125, 0.625, 0, 0, -0.5, -1, 0, 0, 0, 0.25, 0, 0, 0, 1]) 

Input1 = MatrixSymbol('A',8,8) 
DWT1_t = Transpose(DWT1) 

output_lvl1_1d = DWT1_t*Input1 
output_lvl1_2d = output_lvl1_1d* DWT1 

#print 'output_lvl1_2d[0,0]: ' 
#print simplify(output_lvl1_2d[0,0]) 

#bulit 2nd lvl input from the lvl1 output (1:4,1:4) 

input_lvl2 = output_lvl1_2d[0:4,0:4] 

DWT2 = Matrix(4, 4, [0.75, -0.125, -0.5, 0, 0.5, 0.25, 1, 0, -0.25, 0.75, -0.5, -1, 0, 0.125, 0, 1]) 

DWT2_t = Transpose(DWT2) 

output_lvl2_1d = DWT2_t*input_lvl2 
output_lvl2_2d = output_lvl2_1d * DWT2 


#Lvl 2 calculate max 
max_lvl2 = zeros(4,4) 
for i in range(4): 
    for j in range(4): 
     max_lvl2[i,j]=128.0*calcu_max(simplify(output_lvl2_2d[i,j])) 
     print str(i)+' '+str(j)+' '+str(max_lvl2[i,j]) 
     #print max_lvl2[i,j] 
print max_lvl2 

Nun, hier ist das Ergebnis (alle möglichen Maximalwerte in einer Matrix setzen und Min-Werte sind entsprechend negativ):

[338.000000000000, 266.500000000000, 468.000000000000, 468.000000000000], 
[266.500000000000, 210.125000000000, 369.000000000000, 369.000000000000], 
[468.000000000000, 369.000000000000, 648.000000000000, 648.000000000000], 
[468.000000000000, 369.000000000000, 648.000000000000, 648.000000000000] 

Dann 648 ist das, was ich suche.