我有一个2D numpy的阵列的图像。我想通过X向移动图像和Y偏移量和所需的帧的其余部分用零填充。我已经看到了关于“滚动”功能讨论,但仅在1轴工作。 (除非有人能指出我到2D版本填充)。我曾尝试切片,但我遇到麻烦时移补偿对所有可能的方向。我不希望通过所有X Y导航偏移+/-排列。有一个简单通用的解决方案?我有下面的代码这对于工作良好的X偏移= + 100。但它崩溃的X轴偏移量= -100。
谢谢,格特
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()
有没有其他办法,以相应的处理消极和积极的变化:
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)]
可以使用辊函数来循环移位x和y,然后ZEROFILL偏移
def shift_image(X, dx, dy):
X = np.roll(X, dy, axis=0)
X = np.roll(X, dx, axis=1)
if dy>0:
X[:dy, :] = 0
elif dy<0:
X[dy:, :] = 0
if dx>0:
X[:, :dx] = 0
elif dx<0:
X[:, dx:] = 0
return X