2012-12-21 5 views
2

보셀 오브젝트 (3D 배열)를 그리기 위해 R에 라이브러리 또는 함수가 있는지 알고 있습니까? 3d scatter plot을 수행 할 수있는 rgl 패키지를 찾았지만 3D 배열과 함께 작동하는 "image"함수와 동등한 기능을 찾고 있습니다. 감사합니다.Voxel 이미지를 그림에 그려야합니다.

+0

[Medical Imaging 작업보기] (http://cran.r-project.org/web/views/MedicalImaging.html)를 살펴 보는 것이 좋습니다. 3 차원 이미지를 슬라이스 할 수있는 패키지가 있습니다. 시각화 내에서 유용한 다른 요소가 무엇인지 모르겠습니다. – mnel

+0

표시 할 항목에 대한 세부 정보를 제공 할 수 있습니까? 예를 들어, 사소한 복셀 디스플레이는 점들의 3D 분산 형 플롯 일 수 있으며, 각 점은 관심 변수를 나타 내기 위해 색상을 사용합니다. 각 좌표 위치에서 큐브 (프레임 또는 음영)를 플로팅하려는 경우, 큐브 플로팅 루틴을 작성하고 해당 제품을 3D 산점도에 매핑하는 문제입니다. –

+0

@CarlWitthoft, 사실, RGL 패키지는 3D 산점도에 대한 멋진 플롯 팅 기능을 가지고 있지만 이것이 필자의 필요와 일치하지 않습니다. 이미지 함수가 2 차원 행렬을 그려주는 것처럼 3 차원 배열을 그릴 수있는 함수를 찾고 싶습니다. 배열의 각 작은 상자는 큐브의 색이 값과 관련하여 (변수가 무엇이든간에) 코드화 될 플롯의 큐브로 표시됩니다. clunky하고 느린 코딩을 시도하기 전에 누군가가 이미 그러한 프로그래밍을하고 있는지 확인하고 싶습니다. 그래도 고마워. – Simon

답변

2

다음은 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") 
    } 
    } 
} 

것은이 같은 뭔가를 사용했다, 그러나 나는 (내가 3-4Gb RAM을 사용하여 이상 60,000 복셀을 할 수 없다) 메모리 크기가 매우 빠르게 성장 주목했다. 나는 비대화 형 플롯이 더 많은 메모리를 효율적으로 사용할 수 있다고 생각하는 plot3D 패키지에서 cube3D를 사용하여 유사한 것을 시도했지만, 어떤 이유로이 패키지는 성능이 떨어졌습니다 (단지 1000 개의 보셀). 솔리드 큐브가 있다면 ploygon3D 플롯을 사용하여 바깥 쪽 가장자리를 그릴 때 훨씬 똑똑해질 수 있습니다.하지만 그건 내 경우가 아닙니다. 나는 여전히 R 기능을 사용하여 더 나은 성능을 찾고 있지만, 경로를 여기에서 교차하는 다른 방황하는 영혼의 경우에도이 대화에 추가해야한다고 생각했습니다.