library(rgl)
library(brainR)
template <- readNIfTI(system.file("MNI152_T1_2mm_brain.nii.gz",
                                  package = "brainR"), reorient = FALSE)
misc3d::contour3d(template, level = 4500, alpha = .7, draw = T)

使用上面的代码,人们可以生成大脑的3D模型. 自变量draw = FALSE要求轮廓3d计算并返回作为三角形网格对象的轮廓表面,而不绘制它.

a <- misc3d::contour3d(template, level = 4500, alpha = .7, draw = F)
str(a)
List of 10
 $ v1      : num [1:110433, 1:3] 45 45 46 46 47 47 43 43 44 44 ...
 $ v2      : num [1:110433, 1:3] 44.1 46 46 47 47 ...
 $ v3      : num [1:110433, 1:3] 45 45 45 46 46 ...
 $ color   : chr "white"
 $ color2  : logi NA
 $ fill    : logi TRUE
 $ material: chr "default"
 $ col.mesh: logi NA
 $ alpha   : num 0.7
 $ smooth  : num 0
 - attr(*, "class")= chr "Triangles3D"

我想用上面物体的外表面来投射热图,或者说,给表面上色……我还想知道如何确定这个模型中的某些位置,例如EEG通道位置.是否可以使用函数rgl:::surface3d仅生成a$v1, a$v2 ...的曲面?先谢谢你,

推荐答案

我能够用RGL绘制出不同 colored颜色 的三角形网格.一些考虑事项:

  • 我在这个函数中使用rgl::triangles3d,点被取在连续的三元组中,每个点v1 v2 v3是一个三角形顶点(请参见 ?triangles3d)所以我不得不提取这些点并对它们重新排序.
  • colored颜色 被映射到顶点,也是以三个为一组.我根据每个顶点的x位置创建了一个简单的 colored颜色 映射.当然,您必须创建所需的色彩映射表.

希望这能对你有所帮助.


data<-misc3d::contour3d(template, level = 4500, alpha = .7, draw = F)

points <- rbind(data$v1, data$v2, data$v3)
points <- points[order(rep(1:(nrow(points)/3),3), rep(1:3, nrow(points)/3)),] 

color_map <-  c("red","blue","green")[cut(points[,1], 3, labels=F)]
rgl::open3d()
rgl::triangles3d(points, alpha=.7, color = color_map)

Edit 坐标x、y、z在数组template的位置的标度内,即点c(5.4、10.8、30.1)与数组在[5、10、30]附近的水平相关,即,该点应该在水平=4500左右

R相关问答推荐

过滤矩阵以获得R中的唯一组合

基于现有类创建类的打印方法(即,打印tibles更长时间)

隐藏e_mark_line的工具提示

derrr mutate case_when grepl不能在R中正确返回值

我不能在docker中加载sf

使用tidy—select创建一个新的带有mutate的摘要变量

计算时间段的ECDF(R)

提取一个列表中单个列的重复观察结果R

计算满足R中条件的连续列

R Read.table函数无法对制表符分隔的数据正常工作

以相同的方式对每个表进行排序

ComplexHEAT:使用COLUMN_SPLIT时忽略COLUMN_ORDER

根据纬度和距离连接两个数据集

优化从每个面的栅格中提取值

R中治疗序列的相对时间指数

如何在R中创建条形图,使条形图在y轴上围绕0.5而不是0构建条形图?

需要一个函数来在第一行创建一个新变量,然后用新变量替换一个不同的变量(对于多行)

如何使用grepl()在数据帧列表中 Select 特定字符串?

如何获取R chromote中的当前URL?

如果y中存在x中的值,则将y行中的多个值复制到相应的x行中