已有数据
现有大小为 137*299*348 的数字人体素数据,不同数字代表不同器官,共有141种器官/组织,0 代表空气,在文本文档中依次列出。
目的
之前的文章中我们已经实现了将三维体素数据转换为STL网格模型从而可视化数字人,但为了提高不同器官/组织之间的区分度,我们希望能用不同颜色代表不同组织,并设置一定的透明度。由于STL文件本身不包含颜色信息,我们想到了生成一个包含颜色信息的PLY文件(支持RGB颜色和透明度)。PLY格式支持顶点颜色,可以生成单个包含所有器官颜色的文件。
整体功能概述
这个 MATLAB 函数 voxelToPLY 的主要功能是将三维体素数据转换为带有颜色和透明度信息的 PLY 格式三维模型文件。它专门用于处理医学影像数据,能够将不同器官的体素数据分别提取、着色,并合并成一个完整的彩色三维模型。
实现思路
1 参数解析与初始化
arguments
inputFile string
outputFile string
options.ColorMap containers.Map = containers.Map()
options.Scale (1,3) = [1, 1, 1]
options.Resolution (1,1) = 4.84
options.SimplifyFactor (1,1) = 0.5
options.SmoothIter (1,1) = 0
options.DownsampleFactor (1,1) = 1
options.FlipZ (1,1) = false
options.Alpha (1,1) = 0.7
options.AutoColors logical = true
end
-
使用 MATLAB 的
arguments块进行参数验证和默认值设置 -
Resolution参数将体素坐标转换为物理尺寸(毫米) -
SimplifyFactor控制网格简化程度,平衡文件大小和细节 -
Alpha参数设置模型透明度,便于观察内部结构 -
AutoColors启用自动颜色分配功能
2 数据读取与器官识别
% 读取体素数据
[voxelData, ~] = readVoxelDataFast(inputFile);
% 获取所有器官编号
organIDs = unique(voxelData);
organIDs = organIDs(organIDs > 0);
-
调用
readVoxelDataFast函数高效读取文本格式的体素数据 -
使用
unique函数找出所有不同的器官编号 -
过滤掉值为 0 的体素(通常代表空气或背景)
-
为每个唯一的器官编号创建处理流程
3 自动颜色映射生成
% 自动生成颜色映射
predefinedColors = [
1, 0, 0; % 红色
0, 1, 0; % 绿色
... % 更多预定义颜色
];
% 为每个器官分配颜色
for i = 1:length(organIDs)
organID = organIDs(i);
if i <= size(predefinedColors, 1)
colorMap(organID) = predefinedColors(i, :);
else
colorMap(organID) = generateDistinctColor(colorMap, i);
end
end
-
使用预定义的颜色表确保前几个器官有美观的颜色
-
对于超出预定义颜色的器官,调用
generateDistinctColor生成有明显区别的随机颜色 -
使用
containers.Map建立器官编号到颜色的映射关系 -
确保不同器官在可视化时有良好的区分度


243

被折叠的 条评论
为什么被折叠?



