2012-10-26 3 views
2

가능한 중복 :
how to repeat along two axis정확하게 원래 크기의 배수에 파이썬 (NumPy와)에 작은 이미지 크기 조정

의 우리는 다음의 행렬/이미지를 가지고 가정하자 :

x = array([[1, 0, 1], 
      [0, 1, 0], 
      [1, 0, 1]]) 

내가 얻고 자하는 것은 위의 3 배 확대 버전 인 9x9 매트릭스이며, 3x3 왼쪽 상단 모서리에있는 사람, 중간 상단에 3 × 3 0 등

이미 시도한 일들은 다음과 같습니다

scipy.ndimage.interpolation.zoom (X, 3, 순서 = (예를 들어, 주문 아무것도)) = 0 반환이 :

array([[1, 1, 0, 0, 0, 0, 1, 1, 1], 
     [1, 1, 0, 0, 0, 0, 1, 1, 1], 
     [0, 0, 1, 1, 1, 1, 0, 0, 0], 
     [0, 0, 1, 1, 1, 1, 0, 0, 0], 
     [0, 0, 1, 1, 1, 1, 0, 0, 0], 
     [0, 0, 1, 1, 1, 1, 0, 0, 0], 
     [1, 1, 0, 0, 0, 0, 1, 1, 1], 
     [1, 1, 0, 0, 0, 0, 1, 1, 1], 
     [1, 1, 0, 0, 0, 0, 1, 1, 1]]) 

scipy.misc.imresize (X, (9,9), 보정시 =는 (효과적으로 PIL에서)) "가장 가까운", 즉 온다 다른 창조적 인 (그러나 틀린) 해결책으로.

한편, MATLAB의 imresize 문제는 ... 완벽

어떤 아이디어를 해결?

답변

5

크로네 제품 : (주 이러한 솔루션 모든 작품 제출하기 전에, 그래서 :) 그것을 밖으로 시도해야한다) :

numpy.kron(x,numpy.ones((3,3))) 

결과 :

array([[ 1., 1., 1., 0., 0., 0., 1., 1., 1.], 
     [ 1., 1., 1., 0., 0., 0., 1., 1., 1.], 
     [ 1., 1., 1., 0., 0., 0., 1., 1., 1.], 
     [ 0., 0., 0., 1., 1., 1., 0., 0., 0.], 
     [ 0., 0., 0., 1., 1., 1., 0., 0., 0.], 
     [ 0., 0., 0., 1., 1., 1., 0., 0., 0.], 
     [ 1., 1., 1., 0., 0., 0., 1., 1., 1.], 
     [ 1., 1., 1., 0., 0., 0., 1., 1., 1.], 
     [ 1., 1., 1., 0., 0., 0., 1., 1., 1.]]) 
+1

영리하고 아름다운! –

+0

끝내 주셔서 고마워요! – Latanius

+0

@RobertSmith, 개인적으로 나는 같은 것을 할 수있는 특별히 맞춤화 된 기능이 있더라도 이러한 수학적 트릭을 사용하는 것이 더 재미 있다는 것을 알았습니다. 코드는 이해하기 어려울 수 있습니다. 그러나 ... – Bitwise