如何将这个numpy one liner转换为Tensorflow后端代码?

如何将这个numpy one liner转换为Tensorflow后端代码?,numpy,tensorflow,keras,backend,loss,Numpy,Tensorflow,Keras,Backend,Loss,我有多个从不同角度显示汽车的深度图。我需要计算它们在损失函数中的匹配程度,所以我必须将它们重新投影到不同的视图中。深度贴图位于相对于车辆长度的立方体中。图像的形状为(256256)。我已经编写了将它们转换为带有后端函数(256*256,3)的点云的代码。我可以用numpy将此点云重新投影到侧视图,如下所示: reProj = np.zeros((256, 256), np.float32) reProj[pointCloud[:, 1], pointCloud[:, 2]] = pointClo

我有多个从不同角度显示汽车的深度图。我需要计算它们在损失函数中的匹配程度,所以我必须将它们重新投影到不同的视图中。深度贴图位于相对于车辆长度的立方体中。图像的形状为(256256)。我已经编写了将它们转换为带有后端函数(256*256,3)的点云的代码。我可以用numpy将此点云重新投影到侧视图,如下所示:

reProj = np.zeros((256, 256), np.float32)
reProj[pointCloud[:, 1], pointCloud[:, 2]] = pointCloud[:, 0]
如何将其转换为keras后端代码?我想应该有一个聚会在那里的某个地方,但我就是不能让它工作

示例:

源深度图像:

被谴责:

谢谢你的帮助


编辑:关于数据的最小工作示例:

您可以通过使用
tf.matmul()
来完成此操作。第一个输入将是您的点云,我假设您为每个像素存储一个3d向量x、y、z。第二个输入将是与所需投影相关的3d旋转矩阵,请记住,这适用于所需的每个角度,只需定义3x3矩阵即可

如果我正确理解了你的数据,你需要旋转90度,这样矩阵就会

1 0 0
0 0 -1
0 1 0
阅读更多关于旋转矩阵的信息
只需转到树维度,看看您需要什么

所以我最终找到了答案,我只是想错了。这不是聚集操作,而是分散操作。现在这个很好用

indices = K.stack([p[:, 1], p[:, 2]], -1)
indices = K.reshape(indices, (256, 256, 2))
indices = K.clip(indices, 0, 256 - 1)
updates = K.reshape(p[:,0], (256,256))
reProj = tf.tensor_scatter_nd_max(tf.zeros((256, 256), tf.int32), indices, updates)

您对tensorflow函数满意吗,还是只想使用
tf.keras.backend
?另外,您是否保证
pointCloud[:,0]
pointCloud[:,1]
覆盖数组的所有索引?我可以在loss函数中使用tensorflow函数吗?我在这方面没有太多经验,但从我所读到的,你只能使用后端功能?是的,[:,0]和[:,1]覆盖了数组的所有索引。您完全可以在损失函数中使用TensorFlow函数。但是,您只能使用tensorflow后端运行keras。感谢您的澄清。我刚刚意识到我在标记上撒了谎,[:,1]包含深度数据,所以它只覆盖了数组的一部分。