Verwenden der SciPy DCT-Funktion zum Erstellen eines 2D-DCT-II

8

Ich erstelle ein 2D DCT-II in labview, möchte aber meine Ausgaben überprüfen können. SciPy hat eine nette DCT-Funktion, die standardmäßig auf DCT-II aber 1D ist.

Ich möchte, dass es für ein 2D-Array funktioniert. Dazu muss die DCT auf die Spalten angewendet werden und dann muss die DCT erneut auf die Zeilen dieses Ergebnisses angewendet werden.

Ich bin nicht sicher, welche Funktion ich verwenden möchte, um dies zu tun. Ich habe np.rot90 versucht, das das numpy-Array um 90 Grad gegen den Uhrzeigersinn wie folgt dreht:

%Vor%

Dies gibt jedoch Folgendes aus:

%Vor%

Ich denke, dass rot90 nicht die richtige Funktion ist, um das zu tun, was ich tun möchte, vielleicht gibt es ein besseres?

    
mark mcmurray 12.04.2013, 18:33
quelle

2 Antworten

14

Ich glaube nicht, dass eine Rotation das ist, was Sie wollen, da sie Zeilen in Spalten konvertiert, aber auch die Reihenfolge der Daten beeinträchtigt. Verwenden Sie stattdessen np.transpose .

Wenn Sie dct zuerst nach Spalten und dann nach Zeilen anwenden möchten, tun Sie Folgendes:

%Vor%

Das nachgestellte .T entspricht np.transpose . Beachten Sie, wie Sie die Transposition rückgängig machen müssen, nachdem Sie die Spalten bearbeitet haben, um die Rückgabe wieder nach Zeilen auszurichten.

Ich glaube nicht, dass die Reihenfolge, in der Sie den dct anwenden, d. h. Spalten, dann Zeilen und Zeilen, dann Spalten, einen Unterschied macht, aber Sie könnten Zeilen und Spalten wie folgt erhalten:

%Vor%     
Jaime 12.04.2013, 22:11
quelle
21

@ Jaimes Antwort ist in Ordnung. Ich füge hinzu, dass dct ein axis Argument für genau diesen Zweck hat. Wenden Sie es zuerst entlang der Achse 0 und dann entlang der Achse 1 des Ergebnisses an:

%Vor%     
Warren Weckesser 13.04.2013 03:42
quelle

Tags und Links