2014-11-23 105 views
3

我在2d numpy數組中有圖像。我想通過X和Y偏移來移動圖像,並希望框架的其餘部分填充零。我已經看到關於「滾動」功能的討論,但只能在1軸上運行。 (除非有人可以用padding指向我的2D版本)。我嘗試過切片,但當偏移有所有可能的方向時,我遇到了麻煩。我不想瀏覽所有X Y偏移量+/-排列。有一個簡單的通用解決方案嗎?我有下面的代碼,它適用於X-offset = + 100。但是它的X-offset = -100會崩潰。在numpy中移動圖像

感謝, 格特

import matplotlib.pyplot as plt 
import scipy.misc  as msc 
import numpy    as np 

lena = msc.lena() 
lena.dtype 
(imx,imy)= lena.shape 
ox= 100 
oy= 20 
shift_lena = np.zeros((imx,imy)) 
shift_lena[0:imy-oy,0:imx-ox] = lena[oy:,ox:] 
shift_lena_m = shift_lena.astype(np.int64) 
shift_lena_m.dtype 
plt.figure(figsize=(10, 3.6)) 
plt.subplot(131) 
plt.imshow(lena, cmap=plt.cm.gray) 
plt.subplot(132) 
plt.imshow(shift_lena_m, cmap=plt.cm.gray) 
plt.subplots_adjust(wspace=0, hspace=0., top=0.99, bottom=0.01, left=0.05, right=0.99) 
plt.show() 

回答

4

沒有其他的辦法,以相應的處理消極和積極的變化:

non = lambda s: s if s<0 else None 
mom = lambda s: max(0,s) 

ox, oy = 100, 20 

shift_lena = numpy.zeros_like(lena) 
shift_lena[mom(oy):non(oy), mom(ox):non(ox)] = lena[mom(-oy):non(-oy), mom(-ox):non(-ox)]