2017-09-20 2 views
1

나는 skimage.transform.resize을 사용하고 있습니다. 그림이 180x180 - 픽셀이고 3 개의 채널이 있다고 가정합니다. 예를 들어python : skimage 출력의 모양을 변경하는 방법

: 결과

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

형상, 즉 x(16x16x3)이다. 즉, x의 세 번째 차원은 채널을 나타냅니다. 그러나 모양이 (3x16x16) 인 결과를 얻으려고합니다. 즉, 채널을 나타 내기 위해 배열의 첫 번째 차원이 필요합니다. 이것을 어떻게 할 수 있습니까?

나를 도와 주셔서 감사합니다.

답변

2

numpy의 rollaxis에 대한 작업입니다. numpy는 scikit-image의 핵심이기도합니다.

편집 : 또는 더 직관적 인 : np.moveaxis.

코드 :

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]) 

출력 :

[[[ 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