Dan*_*nia 1 3d graphics matlab image-processing voxel
我想在MATLAB中构建一个3D立方体.我知道任何3D形状的单位都是体素而不是像素.这是我想要做的,
首先,我想构建一个具有给定尺寸x,y和z的立方体.
其次,根据我从不同的图像处理教程中理解的内容,这个立方体必须由体素(3D像素)组成.我想给每个体素一个初始颜色值,比如说灰色.
第三,我想访问每个体素并改变它的颜色,但我想区分代表立方体面的体素和代表内部区域的体素.我想通过它的位置x,y,z来轴对每个体素.最后,我们将得到一个具有不同颜色区域的立方体.
我已经搜索了很多但是找不到实现它的好方法,但是这里给出的代码在构造多维数据集的内部区域方面似乎非常接近,
http://www.mathworks.com/matlabcentral/fileexchange/3280-voxel
但我不清楚它是如何执行这个过程的.
谁能告诉我如何在MATLAB中构建这样的多维数据集?
谢谢.
你想绘制体素!好!让我们看看我们如何做到这一点.
首先:是的,3D形状的单位可能是体素,但它们不需要.您可以在3D中绘制球体而不会"块状",因此您不需要根据体素描述它,就像您不需要根据像素描述正弦波以便能够在其上绘制它一样屏幕.请看下图.(立方体也是如此)
如果您对绘制体素感兴趣,我通常会建议您使用Matlab的FEX中的vol3D v2.为什么那而不是你自己?
因为绘制体素的最佳(仅?)方式实际上是绘制扁平方形表面,每个立方体为6(请参阅此处的答案以获取执行此操作的功能).这种平坦的表面也会为计算机图形学中的z-fighting产生一些瑕疵.vol3D实际上只绘制了3个表面,看着你的表面,节省了一半的计算时间,并避免了丑陋的绘图工件.它易于使用,您可以定义每个体素的颜色以及每个体素的alpha(透明度),让您可以看到内部.
使用示例:
% numbers are arbitrary
cube=zeros(11,11,11);
cube(3:9,3:9,3:9)=5; % Create a cube inside the region
% Boring: faces of the cube are a different color.
cube(3:9,3:9,3)=2;
cube(3:9,3:9,9)=2;
cube(3:9,3,3:9)=2;
cube(3:9,9,3:9)=2;
cube(3,3:9,3:9)=2;
cube(9,3:9,3:9)=2;
vold3d('Cdata',cube,'alpha',cube/5)
Run Code Online (Sandbox Code Playgroud)
但是,那仍然看起来很糟糕.因为如果你想看到内部,体素绘图不是最好的选择.不同面孔的Alpha叠加在另一面之上,解决这个问题的唯一方法是编写高级计算机图形光线跟踪算法,相信我,这是一条漫长而艰难的道路.
通常一个人有4D数据,因此数据包含3D位置和每个位置的单个数据.人们可能会认为在这种情况下,你真的想要体素,因为每个体素都有3D +颜色,4D数据.确实!你可以用体素做到这一点,但有时候用其他方式描述它更好.举个例子,让我们看看这个想要在他/她的4D空间(链接)中突出显示区域的人.要查看更大的列表,我建议您在此处查看我的答案,了解4D可视化技术.
让我们尝试与体素不同的方法.让我们使用前一个多维数据集,并isosurfaces在4D数据值发生变化时创建.
iso1=isosurface(cube,1);
iso2=isosurface(cube,4);
p1=patch(iso1,'facecolor','r','facealpha',0.3,'linestyle','none');
p2=patch(iso2,'facecolor','g','facealpha',1,'linestyle','none');
% below here is code for it to look "fancy"
isonormals(cube,p1)
view(3);
axis tight
axis equal
axis off
camlight
lighting gouraud
Run Code Online (Sandbox Code Playgroud)
在我看来,这个看起来更好.
自由选择和良好的策划!
| 归档时间: |
|
| 查看次数: |
2886 次 |
| 最近记录: |