如何在二维图像上叠加深度数据?

How to overly depth data on 2D image?

所有这些都是在 Matlab 中完成的。我有一个 2D RGB 图像,关键顶点有 some 深度数据。也就是说,我有三个向量 (m x 1):X、Y、Z。 [X(i), Y(i)] 一起指定图像中深度为 Z(i) 的点。

我的问题的关键是:

I would like to plot the image "warped" with the depth information. But, each time I keep calling functions like 'mesh(X,Y,Z,RGBImage)' and 'surf', I get weird errors like "Z need to be matrix not vector". Also, I haven't even been able to implement the 'warp' function, as I am not sure how to translate my data into a usable format.

任何帮助将不胜感激。

编辑:我终于让它按照我想要的方式工作了。唯一需要更改但未得到答复的是包含行

s = surf(Xmat,Ymat,Zmat, T1, 'edgecolor', 'none', 'FaceColor', ... 
'texturemap');

在哪里 T1 = rgb2gray(OrignialRGBImage);。非常感谢!

我现在无法访问 MATLAB,所以我给出了解决方案的概要。

首先,使用 meshgrid 创建两个矩阵:[Xmat,Ymat] = meshgrid(1:imgCols,1:imgRows);。现在,对于某些 (i,j),您可以在 [Xmat(i,j),Ymat(i,j)] 处找到 [X,Y] 的每一行。在下一步中,创建 Zmat,使得 Zmat(i,j)[Ymat(i,j),Xmat(i,j)] 的正确深度值。您应该能够按如下方式执行此操作:

Zmat = zeros(imgRows,imgCols);
for i=1:size(X,1)
   Zmat(Y(i),X(i))=Z(i);
end

现在您可以使用 Xmat,Ymat,Zmat 执行 surf,如下所示。然后叠加图像作为纹理。

s = surf(Xmat,Ymat,Zmat);
set(s, 'faceColor', 'texture','edgecolor', 'none','cdata', subimage); %not tested,
                                                                      %see if it works

重叠部分取自 here

如果上面的部分不起作用,那么你可以在热图样式中叠加Zmat,参见this question