所有这一切都在Matlab中完成。我有一个2D RGB图像,其中一些深度数据用于关键顶点。也就是说,我有三个向量(m×1):X,Y,Z。一起,[X(i),Y(i)]指定图像中具有深度Z(i)的点。
问题的症结在于:
我想绘制图像"扭曲"有深度信息。但是,每次我一直调用像网格(X,Y,Z,RGBImage)和#39;和'冲浪',我得到奇怪的错误,如" Z需要矩阵而不是矢量"。而且,我甚至无法实现“扭曲”。功能,因为我不知道如何将我的数据转换为可用的格式。
任何帮助都会非常感激。
编辑:我终于以我想要的方式工作了。唯一需要改变的是,包括行s = surf(Xmat,Ymat,Zmat, T1, 'edgecolor', 'none', 'FaceColor', ...
'texturemap');
其中
T1 = rgb2gray(OrignialRGBImage);
。非常感谢!
答案 0 :(得分:0)
我现在无法访问MATLAB,所以我给出了解决方案的大纲。
首先,使用meshgrid创建两个矩阵:[Xmat,Ymat] = meshgrid(1:imgCols,1:imgRows);
。现在,您可以在[X,Y]
找到[Xmat(i,j),Ymat(i,j)]
的每一行(i,j)
。在下一步中,创建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
现在,您可以使用surf
执行Xmat,Ymat,Zmat
,如下所示。然后将图像叠加为纹理。
s = surf(Xmat,Ymat,Zmat);
set(s, 'faceColor', 'texture','edgecolor', 'none','cdata', subimage); %not tested,
%see if it works
覆盖部分取自here。
如果上述部分不起作用,那么您可以在热图样式中叠加Zmat
,请参阅this question。