在R中绘制体素图像

4

您是否知道在R中有没有库或函数可以绘制体素对象(3D数组)? 我发现rgl包可以执行3D散点图,但我真正要找的是一个与“image”函数等效的可以处理3D数组的函数。 谢谢。


可能值得看一下医学图像任务视图。有一些包可以让您切片三维图像,我不确定在可视化方面还有什么其他有用的东西。 - mnel
你能提供一些关于你想要展示的细节吗?例如,一个简单的体素显示可能是一个三维散点图,每个点使用颜色来表示感兴趣的变量。如果你想在每个坐标位置上绘制一个立方体(框架或阴影),那么就需要创建一个立方体绘制例程,并将其映射到一个三维散点图中。 - Carl Witthoft
1
@CarlWitthoft,确实,RGL包有一个很好的绘制3D散点图的函数,但这并不符合我的需求。就像image函数绘制2维矩阵一样,我想找到一个可以绘制3D数组的函数。数组的每个小方块都将在图中表示为一个立方体,其中立方体的颜色将根据其值(无论变量是什么)进行编码。在尝试编写自己笨拙而缓慢的代码之前,我想检查是否有人已经在这样的编程上工作过。谢谢。 - Simon
1个回答

5
这是使用rgl包的基本示例。您可以很容易地将其转换为一个函数,该函数在3D数组上操作以更改颜色、透明度或其他感兴趣的特性。
library(rgl)
cubit=cube3d(color="blue", alpha=0.3)
cubit$vb[cubit$vb == -1]= 0
gridx=0:5;gridy=0:5;gridz=0:5
temp=cubit
plot3d(temp,box=FALSE,axes=FALSE,xlab="",ylab="",zlab="")
wire3d(temp,add=TRUE,color="blue",alpha=1)
for(ix in gridx){
  for(iy in gridy){
    for(iz in gridz){
      temp$vb[1,]=cubit$vb[1,]+ix
      temp$vb[2,]=cubit$vb[2,]+iy
      temp$vb[3,]=cubit$vb[3,]+iz
        shade3d(temp,add=TRUE,,alpha=runif(1))      
        wire3d(temp,add=TRUE,color="blue")
    }
  }
}

我曾经使用过类似的东西,但是我注意到内存大小增长非常快(我不能超过60000个体素,使用3-4Gb RAM)。我尝试了类似的东西,使用plot3D包中的cube3D,认为一个非交互式绘图会更节省内存,但是由于某种原因,这个包的性能更差(只有1000个体素)。如果你有一个实心的立方体,那么你可以更聪明地只绘制外部边缘,使用ploygon3D图形绘制...但这不是我的情况。我仍在寻找更好的R功能性能,但想在这里添加一下,以防其他漫游者也在这里路过。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接