方法#1
这是一种方法,A 是图像的输入列表 -
M,N = np.max([i.shape[:2] for i in A],0)
M_ext = [M-i.shape[0] for i in A]
N_ext = [N-i.shape[1] for i in A]
out = [img3D_pad(a,M_ext[i],N_ext[i]) for i,a in enumerate(A)]
辅助函数-
def img3D_pad(a,m,n):
return np.pad(a,((0,m),(0,n),(0,0)),'constant')
验证
1) 形状验证:
In [108]: A = [np.random.randint(11,99,(4,5,3)), np.random.randint(11,99,(2,6,3))]
In [109]: [i.shape for i in out]
Out[109]: [(4, 6, 3), (4, 6, 3)]
2) 价值验证:
In [110]: A[0][...,0]
Out[110]:
array([[53, 64, 41, 13, 85],
[74, 53, 88, 47, 54],
[35, 26, 93, 68, 80],
[38, 68, 50, 83, 77]])
In [111]: out[0][...,0]
Out[111]:
array([[79, 33, 41, 16, 76, 0],
[11, 49, 54, 56, 40, 0],
[38, 43, 98, 95, 23, 0],
[26, 26, 20, 59, 53, 0]])
In [112]: A[1][...,0]
Out[112]:
array([[76, 44, 29, 20, 91, 71],
[71, 90, 11, 51, 81, 22]])
In [113]: out[1][...,0]
Out[113]:
array([[57, 11, 42, 95, 87, 75],
[15, 70, 88, 88, 41, 95],
[ 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0]])
方法 #2
基于zeros-initialization的简化版-
M,N = np.max([i.shape[:2] for i in A],0)
out = [img3D_create(a,M,N) for i,a in enumerate(A)]
辅助函数-
def img3D_create(a,M,N):
p,q,r = a.shape
out = np.zeros((M,N,r),dtype=a.dtype)
out[:p,:q] = a
return out