【问题标题】:plotting voxel image in R在R中绘制体素图像
【发布时间】:2012-12-08 14:07:33
【问题描述】:

您知道 R 中是否存在用于绘制体素对象(3D 数组)的库或函数? 我找到了可以执行 3d 散点图的包 rgl,但我真的在寻找与 3D 数组一起使用的函数“image”的等价物。 谢谢

【问题讨论】:

  • Medical Imaging task view 可能值得一看。有一些包可以让你对三维图像进行切片,我不确定在可视化中还有什么有用的。
  • 你能提供一些关于你想展示的细节吗?例如,简单的体素显示可能是点的 3-D 散点图,每个点使用颜色来指示感兴趣的变量。如果你想在每个坐标位置绘制一个立方体(框架或阴影),那么只需创建一个立方体绘制例程并将其产品映射到 3D 散点图。
  • @CarlWitthoft,确实,RGL 包有一个很好的 3D 散点图绘图功能,但这不符合我的需要。就像图像函数正在绘制二维矩阵一样,我想找到一个可以绘制 3d 数组的函数。数组的每个小盒子都将由图中的一个立方体表示,其中立方体的颜色将根据其值(无论变量是什么)进行编码。在尝试编写笨重且速度慢的代码之前,我想检查一下是否有人已经在从事此类编程工作。不过还是谢谢。

标签: r 3d voxel rgl


【解决方案1】:

这是使用 rgl 包的基本示例。您可以轻松地将其转换为对 3D 数组进行操作的函数,以更改颜色、alpha 或其他感兴趣的特征。

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 功能寻找更好的性能,但我认为我应该添加到这个对话中,以防任何其他流浪灵魂也在这里相遇。

【讨论】:

    猜你喜欢
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 2015-10-20
    • 1970-01-01
    • 2010-11-26
    • 2010-10-20
    • 2019-07-25
    相关资源
    最近更新 更多