2012-12-21 98 views
2

您是否知道R中是否存在庫或函數來繪製體素對象(3D陣列)? 我發現可以執行三維散點圖的軟件包rgl,但我真的在尋找一個與3D數組一起工作的「圖像」功能的等價物。 謝謝在R中繪製體素圖像

+0

這可能值得看[醫學影像任務視圖](http://cran.r-project.org/web/views/MedicalImaging.html)。有些軟件包允許您分割三維圖像,我不確定在可視化中還有什麼用處。 – mnel

+0

你能提供一些你想要展示的細節嗎?例如,平凡的體素顯示可能是點的三維散點圖,每個點使用顏色來指示感興趣的變量。如果您想在每個座標位置繪製一個立方體(框架或陰影),那麼創建一個立方體繪圖程序並將其產品映射到3D散點圖就很重要。 –

+0

@CarlWitthoft,的確,RGL包對3D散點圖有一個很好的繪圖功能,但這不符合我的需要。像圖像函數繪製二維矩陣,我想找到一個函數,可以繪製一個3D數組。數組中的每個小方塊都將由立方體表示,立方體的顏色將根據其值(無論變量是什麼)進行編碼。在嘗試編碼笨重且慢的編碼之前,我想檢查一下是否有人已經開始編寫這樣的程序。不過謝謝。 – Simon

回答

2

這是一個使用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個voxels)。如果你有一個堅實的立方體,那麼你可以更聰明地使用ploygon3D繪圖來繪製外邊緣......但這不是我的情況。我仍然在使用R功能來尋找更好的性能,但是我認爲我應該在這個對話中加入這個對話,以便在這裏也可以穿越任何其他遊蕩的靈魂。