Matlab 删除切片中的小值

Matlab 删除切片中的小值,matlab,3d,plot,Matlab,3d,Plot,如何删除切片图中的小值? 在我的图中,基本上有太多的蓝色,我看不到里面的红色点 或者,换一种说法: *是否可以使用matlab删除切片图中的一些点 切片(X、Y、Z、V、sx、sy、sz)表示sx、sy和sz定义的整个平面上体积V的值。但是我可以选择只保留这些计划的一些要点吗 我们是否必须在整个计划中表示V的值 我可以使“小值”透明吗 编辑 新代码: h =slice(x,y,z,V,sx,sy,sz); for n=1:length(h) set(h(n), 'alphadata'

如何删除切片图中的小值? 在我的图中,基本上有太多的蓝色,我看不到里面的红色点

或者,换一种说法:

*是否可以使用matlab删除切片图中的一些点

切片(X、Y、Z、V、sx、sy、sz)表示sx、sy和sz定义的整个平面上体积V的值。但是我可以选择只保留这些计划的一些要点吗

  • 我们是否必须在整个计划中表示V的值

  • 我可以使“小值”透明吗

编辑 新代码:

h =slice(x,y,z,V,sx,sy,sz);
for n=1:length(h)
    set(h(n), 'alphadata',get(h(n),'cdata'), 'facealpha','flat');   
end
a = alphamap('rampup',256);
a(a<(threshold)) = 0;
a(a>(threshold)) = 0.07;
alphamap(a);
h=切片(x,y,z,V,sx,sy,sz);
对于n=1:长度(h)
set(h(n),'alphadata',get(h(n),'cdata'),'facealpha','flat');
结束
a=字母地图(‘上升’,256);
a(a(阈值))=0.07;
字母地图(a);
我试过上面的代码。然而,这是我得到的情节: 我认为cdata(颜色)有问题,但我不知道这是什么


您可以调整透明度,使较低的值更透明。首先,您需要切片的句柄:

h=切片(X,Y,Z,V,sx,sy,sz)

h
不是单个句柄,而是指向不同片的一系列句柄。对于任何一个控制柄,您可以更改透明度(或对所有n进行循环以全部更改):

set(h(n),'alphadata',get(h(n),'cdata'),'facealpha','flat')

alphadata
是透明度的数据-默认情况下为“1”(不透明),因此可以将每个句柄设置为
cdata
的内容<默认情况下,code>AlphaDataMapping
应已设置为
scaled
,因此
alphadata
中的值映射到alphamap,就像
cdata
值映射到您的颜色映射一样(稍后将详细介绍)

facealpha
是一种设置,用于将alphadata应用于对象的面-需要更改,以便实际使用alphadata中的值

如果要调整透明值的方式或透明值,可以更改alphamap。默认贴图只是线性的,可以通过
绘图(get(gcf,'Alphamap'))
看到,其中0=不可见,1=不透明。地图的长度可以变化,因此您可以自由调整它-例如,如果您对这些值不感兴趣,您可以完全将下部归零:

a = alphamap('rampup',256);
a(1:80)=0;
alphamap(a); % only changes alphamap of current figure

阅读更多关于Matlab透明度的信息。

你能不能少画点,类似于下面的回答:@David我尝试过这样的方法,增加切片平面之间的间距,但我需要看到我的红点的“细节”,因为它变化很快。这是一个很好的答案,谢谢!我只有几个问题:你为什么要绕n圈?是否为每个切片定义不同的透明度?如果我理解正确,通过将alphamap设置为0(在您的示例中,80个最小值将为0),可以使某些点透明。因此,如果我想将其映射到我的函数V,我可以为这个函数定义一个阈值t(丢弃VYes,每个切片都有自己的句柄-h(1)…h(n),其中n是切片的数量,每个切片都必须单独设置-因此切片中的每个点都有一个cdata值(设置颜色)和一个alphadata值(设置透明度)。在阈值设置上也是如此-或者,您可以使用类似于
clim
alim([amin amax])
-因此,如果将
amin
设置为阈值,则低于该阈值的所有值都将为0(使用默认字母映射)上面的所有值都将设置为1。但是编辑alphamap更灵活。我编辑了我的代码,但我认为颜色有问题?1.至少你的一些alpha值需要接近1,否则整个东西将是透明的。0.07很小。2.你想根据al中的位置将a设置为零吗phamap,不是a中包含的值。类似于
thresh=floor(t/256);a(1:thresh)=0;
的东西应该可以工作,您不需要更改更高的值。我现在明白了。谢谢!