如何在二维图像上叠加深度数据?
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。
所有这些都是在 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。