2017-09-20 3 views
1

Ich benutze skimage.transform.resize. Angenommen, eine Zahl ist 180x180 -Pixel, mit 3 Kanälen.Python: wie Form der Ausgabe von Skimage ändern Größe ändern

Zum Beispiel:

from skimage.transform import resize 
x = resize(im, (16, 16)) 

Die Form des Ergebnisses, d.h. x(16x16x3) ist. Das heißt, die dritte Dimension von x zeigt den Kanal an. Ich hoffe jedoch, mit der Form (3x16x16) ein Ergebnis zu erhalten. Das heißt, ich brauche die erste Dimension des Arrays, um den Kanal anzuzeigen. Wie kann ich das erreichen?

Vielen Dank für Ihre Hilfe!

Antwort

2

Das ist ein Job für numpy rollaxis, numpy ist auch der Kern von scikit-image.

Edit: oder vielleicht intuitiver: np.moveaxis.

Code:

import numpy as np 

a = np.arange(48).reshape((4, 4, 3)) 
print(a) 
print(a.shape) 

b = np.rollaxis(a, 2) # complete roll as 3rd argument void -> start=0 
# or: b = np.moveaxis(a, 2, 0) 
print(b) 
print(b.shape) 

print(a[2,3,0]) 
print(b[0,2,3]) 

Ausgang:

[[[ 0 1 2] 
    [ 3 4 5] 
    [ 6 7 8] 
    [ 9 10 11]] 

[[12 13 14] 
    [15 16 17] 
    [18 19 20] 
    [21 22 23]] 

[[24 25 26] 
    [27 28 29] 
    [30 31 32] 
    [33 34 35]] 

[[36 37 38] 
    [39 40 41] 
    [42 43 44] 
    [45 46 47]]] 
(4, 4, 3) 
[[[ 0 3 6 9] 
    [12 15 18 21] 
    [24 27 30 33] 
    [36 39 42 45]] 

[[ 1 4 7 10] 
    [13 16 19 22] 
    [25 28 31 34] 
    [37 40 43 46]] 

[[ 2 5 8 11] 
    [14 17 20 23] 
    [26 29 32 35] 
    [38 41 44 47]]] 
(3, 4, 4) 
33 
33 
Verwandte Themen