首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用matlab绘制深度图像

用matlab绘制深度图像
EN

Stack Overflow用户
提问于 2014-03-10 13:31:44
回答 3查看 7.8K关注 0票数 1

我有一个RGB图像,并试图获得一个三维可视化的matlab。目前我正在做:

代码语言:javascript
复制
    depth = imread('img_031_depth.png');
    depth = double(depth);
    img = imread('img_031.png');
    surf(depth, img, 'FaceColor', 'texturemap', 'EdgeColor', 'none' )
    view(158, 38)

这给了我一个图像,比如:

我有两个问题:

( 1)如何保存图像而不像上面那样模糊

2)由于你可以看到一些边缘线成零(例如咖啡杯的顶部),我想移除这些。

我想要制作的是一个三维的点云,因为这些只是2.5D,所以我必须从正确的角度展示它们。

任何帮助都是非常感谢的。

编辑:添加图像(注释深度图像需要标准化以进行可视化)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-10 13:42:03

如果您只对点云感兴趣,您可能需要考虑scatter3。您可以选择要绘制的点(丢弃使用depth == 0的点)。

你需要有明确的x-y坐标。

代码语言:javascript
复制
[y x] = ndgrid( 1:size(img,1), 1:size(img,2) );
sel = depth > 0 ; % which points to plot
% "flatten" the matrices for scatter plot
x = x(:);
y = y(:);
img = reshape( img, [], 3 );
depth = depth(:);
scatter3( x(sel), y(sel), depth(sel), 20, img( sel, : ), 'filled' );
view(158, 38)

编辑:抽样版本

代码语言:javascript
复制
[y x] = ndgrid( 1:2:size(img,1), 1:2:size(img,2) );
sel = depth( 1:2:end, 1:2:end ) > 0;
x = x(:);
y = y(:);
img = reshape( img( 1:2:end, 1:2:end, : ), [], 3 );
depth = depth( 1:2:end, 1:2:end );
scatter( x(sel), y(sel), depth(sel), 20, img( sel, : ), 'filled' );
view( 158, 38 );

或者,您可以直接操作sel掩码。

票数 2
EN

Stack Overflow用户

发布于 2014-03-10 14:35:29

我建议你首先恢复x=zv/f和y=zv/f,得到x,y,z,其中f是你相机的焦距;

然后应用任意旋转,在显示x‘,y’,z‘= Rx,y,z+t之前进行平移;

然后使用col = xf/z+w/2,row = h/2-yf/z将其投影回来,以获得一个简单的图像,您可以快速显示;您可以在最后一个操作中添加一个深度缓冲区,以确保在每个像素上写入深度,并检查只有在新z较小时才会发生重复写入(也就是说,新像素接近查看器)。由于点云的性质,最终的图像仍然会有洞。你可以插入这些洞,但这意味着你必须追踪光线从图像中的每一个像素到你的点云,并找到一个最近的邻居射线,这可能要花费很长时间在Matlab中。

票数 1
EN

Stack Overflow用户

发布于 2014-10-20 19:37:39

我也在做一些三维图像恢复和重建。第一个问题很简单。你的照片是用照相机拍的。所以你需要把位置转换成摄像机坐标系。换句话说,你需要知道相机的内在价值!或者你永远无法用一个图像来恢复它。谷歌'kinect内在价值‘你可以得到焦距等,也可以改变你的看法。尝尝这个!如果不起作用,再问一遍。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22301571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档