我想知道如何将2D深度图像/热图转换为3D高度场。 Z值是2D图像的值。
我有一个RGB图像:
我也有相应的深度图/热图:
我想将它们组合成一个高度字段,其中Z值是深度图像/热图的值:
除了将RGB图像中的RGB值保留在3D高度字段中。
答案 0 :(得分:0)
您所描述的实际上是向数据集添加另一个维度。有几种方法可以实现这一目标,但请注意,有些方法可能会使其他人感到困惑。您要导出到的其他程序也可能对数据的形状等有很高的期望,因此请检查一下。接下来就是对您要执行的操作的一些想法...
基本上,您要描述的是具有2个数据“属性”:彩色图像(3通道属性)和高度字段(单个“通道”)。一些选项:
h5py
将它们都放入HDF5文件中。这种格式本质上类似于带有嵌套“文件夹”的小文件系统,并且允许任意数量的文档和元数据。它还提供了压缩,任意数组访问和其他有用的功能。因此,这对于组织很多(或两个)ndarray非常有用,尤其是当它们很大时。xarray
。这基本上是n维pandas
,可让您将两个数组存储在单个数据结构中。对于这种用例来说,它不是理想的选择,但它至少可以让您标记轴,因此您可以清楚地知道4个“通道”是什么。class
。这样,您可以准确记录两个数组的含义,并编写一些方法来将它们绘制在一起。可以对类实例进行腌制并将其保存到磁盘,或者您可以编写方法以任意方式保存它们(例如HDF5)。如果我要做很多事情,并且需要一个健壮的,可持续的解决方案,那我将要做。这是课程的外观:
class BumpImage():
"""
An image with a 3d height field attached.
"""
def __init__(self, photo, height):
if photo.ndim == 2:
# Make greyscale image into RGB.
photo = np.repeat(photo[:, :, None], 3, axis=-1)
self.photo = photo
if height.shape == photo.shape[:2]:
self.height = height
else:
raise TypeError("Height must be 2d array")
def size(self):
return self.height.shape
def plot(self, ax=None):
# Make a 3d plot with matplotlib or whatever.
return ax
def save(self, fname):
# Make HDF5 file called fname.
return
我不会做的事情: