如何将这个 numpy 单行代码转换为 Tensorflow 后端代码?
How to convert this numpy one-liner into Tensorflow backend code?
我有多个深度图,从不同角度显示汽车。我需要计算它们在我的损失函数中的匹配程度,所以我必须将它们重新投影到不同的视图中。深度图位于一个与车辆长度相关的立方体中。图像的形状为 (256,256)。我已经编写了将它们转换为具有后端函数 (256*256,3) 的点云的代码。我可以像这样用 numpy 将这个点云重新投影到侧视图:
reProj = np.zeros((256, 256), np.float32)
reProj[pointCloud[:, 1], pointCloud[:, 2]] = pointCloud[:, 0]
如何将其转换为 keras 后端代码?我怀疑应该在那里的某个地方举行聚会,但我就是无法让它发挥作用。
示例:
源深度图:
重新投影:
感谢您的帮助!
编辑:使用数据的最小工作示例:https://easyupload.io/rwutwa
您可以通过使用 tf.matmul()
来做到这一点,第一个输入将是您的点云,从我假设您为每个像素存储一个 3d 向量 x、y、z 的维度。第二个输入将是与您需要的投影对应的 3d 旋转矩阵,请记住这适用于您想要的每个角度,您只需要定义 3x3 矩阵。
如果我理解正确你的数据你需要旋转 x 90 度所以矩阵将是
1 0 0
0 0 -1
0 1 0
在此处阅读有关旋转矩阵的更多信息https://en.wikipedia.org/wiki/Rotation_matrix
直接去树维度看看你需要什么
所以我终于想通了,我只是想错了。不是聚集操作,是分散操作。这现在完美了!
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)
我有多个深度图,从不同角度显示汽车。我需要计算它们在我的损失函数中的匹配程度,所以我必须将它们重新投影到不同的视图中。深度图位于一个与车辆长度相关的立方体中。图像的形状为 (256,256)。我已经编写了将它们转换为具有后端函数 (256*256,3) 的点云的代码。我可以像这样用 numpy 将这个点云重新投影到侧视图:
reProj = np.zeros((256, 256), np.float32)
reProj[pointCloud[:, 1], pointCloud[:, 2]] = pointCloud[:, 0]
如何将其转换为 keras 后端代码?我怀疑应该在那里的某个地方举行聚会,但我就是无法让它发挥作用。
示例:
源深度图:
重新投影:
感谢您的帮助!
编辑:使用数据的最小工作示例:https://easyupload.io/rwutwa
您可以通过使用 tf.matmul()
来做到这一点,第一个输入将是您的点云,从我假设您为每个像素存储一个 3d 向量 x、y、z 的维度。第二个输入将是与您需要的投影对应的 3d 旋转矩阵,请记住这适用于您想要的每个角度,您只需要定义 3x3 矩阵。
如果我理解正确你的数据你需要旋转 x 90 度所以矩阵将是
1 0 0
0 0 -1
0 1 0
在此处阅读有关旋转矩阵的更多信息https://en.wikipedia.org/wiki/Rotation_matrix 直接去树维度看看你需要什么
所以我终于想通了,我只是想错了。不是聚集操作,是分散操作。这现在完美了!
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)