如何过度深入2D图像数据?

时间:2016-06-17 01:36:20

标签: image matlab image-processing mesh surface

所有这一切都在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);。非常感谢!

1 个答案:

答案 0 :(得分:0)

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

首先,使用meshgrid创建两个矩阵:[Xmat,Ymat] = meshgrid(1:imgCols,1:imgRows);。现在,您可以在[X,Y]找到[Xmat(i,j),Ymat(i,j)]的每一行(i,j)。在下一步中,创建ZmatZmat(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