最近我发布了一个关于这个的问题,但最后我以一种不优雅的方式解决了它。
我有 2 个图像是 numpy 数组,我想创建一个新数组迭代 2 个图像。我有3个案例,我做了以下事情:
delta= np.empty((h, w, 3),int)
for z in range (0,3):
for i in range(0, (h-1)):
for j in range(0, (w-1)):
delta[i][j][z]=np.sqrt(((imgLlab[i][j][0]-imgRlab[i][j-disp[i][j]][0])**2) + ((imgLlab[i][j][1]-imgRlab[i][j-disp[i][j]][1])**2) + ((imgLlab[i][j][2]-imgRlab[i][j-disp[i][j]][2])**2) )
delta= np.empty((h, w, 3),int)
for z in range (0,3):
for i in range(0, (h-1)):
for j in range(0, (w-1)):
delta[i][j][z]=np.sqrt(((imgLlab[i][j][0]-imgRlab[i][j-disp[i][j]][0])**2) )
for z in range (0,3):
for i in range(0, (h-1)):
for j in range(0, (w-1)):
delta[i][j][z]=np.sqrt(((imgLlab[i][j][1]-imgRlab[i][j-disp[i][j]][1])**2) + ((imgLlab[i][j][2]-imgRlab[i][j-disp[i][j]][2])**2) )
我不想每次都重复迭代并尽快完成。
有没有另一种方法可以用 numpy 做到这一点?
在 Jaime 帮助之后进行编辑,我已经像这样更改了我的代码:
disp= np.hstack([disp, disp, disp]).reshape(h,w,3).astype(np.int)
rows = np.arange(h).reshape(h, 1, 1)
cols = np.arange(w).reshape(1, w, 1)
planes = np.arange(3).reshape(1, 1, 3)
print rows.shape, cols.shape, planes.shape, disp.shape, h
data = imgLlab[rows, cols, planes] - imgRlab[rows ,cols - disp[rows, cols, planes], planes]
data = data**2
data = np.sum(data, axis=-1)
data = np.sqrt(data)
我不得不重塑 dist 因为它没有 imglLab 和 imgRLab 的相同形状,我的意思是 imglLab 是 (288, 384,3) 而 disp 是 (288,384)。此外,如果我打印 disp(288,384,1) 我得到同样的错误,它就像那里没有价值,但尺寸与其他尺寸相同。但是现在这 3 个数组具有相同的维度,我得到一个 indexError: index (384) out of range (0<=index(383) in dimension 1。