Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中对三维立方体进行二维切割_Matlab_Image Processing_3d_2d - Fatal编程技术网

在MATLAB中对三维立方体进行二维切割

在MATLAB中对三维立方体进行二维切割,matlab,image-processing,3d,2d,Matlab,Image Processing,3d,2d,我有一个三维立方体,里面装满了小立方体。在填满小立方体后,我可以看到它的脸。我想在x、y或z轴上进行切割,以便在某些点上看到内部结构。这是立方体的图像 我想看看这个立方体的内部结构。搜索之后,我发现可以使用slice。我用了这个密码 figure [x,y,z] = meshgrid(1:100); v = repmat(magic(100),[1 1 100]); % % % Define the slice plane [xi, yi] = meshgrid(1:100); z

我有一个三维立方体,里面装满了小立方体。在填满小立方体后,我可以看到它的脸。我想在x、y或z轴上进行切割,以便在某些点上看到内部结构。这是立方体的图像

我想看看这个立方体的内部结构。搜索之后,我发现可以使用
slice
。我用了这个密码

figure
  [x,y,z] = meshgrid(1:100);
 v = repmat(magic(100),[1 1 100]);
% 
% % Define the slice plane
 [xi, yi] = meshgrid(1:100);
 zi = xi;
% 
% % Slice it
slice(x,y,z,v,xi,yi,zi);
 drawnow
但我得到的结果是完全不同的颜色。这是结果


你能告诉我如何修复上面的代码来产生一个穿过轴的切口吗?另外,如果您能解释一下这个过程是如何完成的,我将不胜感激,因为我不完全理解上面的代码。

Re。第一个问题——我不知道用Hoki的代码直接切分多维数据集的方法(见下文)。可能有帮助,但仍需要投影到切片平面上

Re。第二个问题——切片是切割“体积数据”,意思是在体积的每个点上都有一个值的密度。
repmat(magic(…)
行正在生成一个100x100x100(3-d)数组,该数组中的每个100*100*100=1000000网格点都有一个数字。碰巧这些点在1和100^2之间有不同的值,所以得到不同的颜色

Hoki的代码不能很好地处理
切片
,因为它使用
面片
来生成多边形,而不是使用体积数据。另一种方法是制作体积庞大的立方体。此代码应自行运行,但-注意-未测试。它独立于你提到的Hoki的代码

face=ones(10,10);        %make a small cube, 10x10x10
middle=zeros(10,10);
middle(1,1:10)=1;
middle(10,1:10)=1;
middle(1:10,1)=1;
middle(1:10,10)=1;
small_cube=cat(3,face,repmat(middle,1,1,8),face);

% Now make an array of them - ten in each direction, so 100x100x100
v=repmat(small_cube,10,10,10);

% Now define the slice plane and slice as above.
[xi, yi] = meshgrid(1:100);
zi = xi;

figure;
slice(x,y,z,v,xi,yi,zi);
drawnow
编辑:在上述情况下,
0
用于不属于多维数据集的点,
1
用于不属于多维数据集的点。这是一个立方体的表示
face
用于顶部和底部,
middle
用于顶部和底部之间的一段边。第一个
repmat
将中间的八片像汉堡馅饼一样堆叠起来。
cat
放置在该堆栈的顶部和底部,就像面包的两半一样。然后第二个
repmat
在大立方体中生成999个其他小立方体


编辑2:将上述代码中的
零替换为
NaN
,应使立方体内部透明。(也未测试!)

您使用什么代码创建原始多维数据集
magic
用所有不同的数值填充数组()。看起来您处于索引颜色模式,不同的颜色对应于幻方中的不同值。非常感谢@cxw,我在这个问题中使用了Hoki的代码。你能告诉我怎么剪吗?此外,我阅读了您提供的魔术文档,但它如何帮助我们进行切割?谢谢。谢谢@cxw,你能告诉我这是一个单独的代码还是应该添加到Hoki的代码末尾吗?另外,2D矩阵中间的作用是什么?为什么某些点设置为1?谢谢你。谢谢你的提问,事实上,当我尝试代码时,我得到了这个错误,使用repmat的错误。输入参数太多。你知道为什么会这样吗?谢谢,很抱歉!尝试
[1,1,8]
[10,10,10]
(带方括号)。你有哪个版本的Matlab或octave?非常感谢,我使用Matlab2012。我试试看。