这个工具用于处理气泡的三维STL模型,生成多角度的二维投影图像,并计算相关的形态参数。
该工具可以:
- 读取气泡STL文件并进行预处理
- 从多角度对气泡进行二维投影渲染
- 计算气泡的3D形态参数(体积、表面积、球形度、凸度等)
- 计算每个投影图像的2D形态参数
- 将所有参数导出到CSV文件中,方便后续分析
确保您有以下文件夹结构:
bubble_rendering/
├── mesh/ # 存放STL文件的文件夹
│ └── 00002.stl # 示例STL文件
├── projection/ # 输出投影图像和参数的文件夹(会自动创建)
└── rendering.py # 主程序
python rendering.py执行后,程序将:
- 读取
mesh文件夹中的所有STL文件 - 为每个STL文件在
projection文件夹下创建对应的子文件夹 - 生成多角度的投影图像并保存到对应子文件夹
- 计算所有形态参数并保存到
projection/parameters.csv文件
您可以在代码中修改以下配置:
-
投影模型:
# projection_model = 'fibonacci' # 使用斐波那契分布的投影点 projection_model = 'sphere' # 使用球面均匀分布的投影点
-
投影点数量:
points = generate_points_on_sphere(N = 33) # 生成33个投影角度
每个STL文件都会生成多个不同角度的投影图像,图像命名格式为:
Sphere_[x坐标]_[y坐标]_[z坐标]_scale=[缩放比例].png
parameters.csv文件包含以下参数:
a,b,c: 拟合椭球的三个半轴长度Volume_3D: 气泡体积Surface_area_3D: 气泡表面积EI_3D: 扁平度指数FI_3D: 伸长度指数AR_3D: 长宽比Sphericity_3D: 球形度Convexity_3D: 凸度Angularity_3D: 棱角度
Principal_Dimension_2D: 主轴长度Secondary_Dimension_2D: 次轴长度Area_2D: 投影面积Aspect_Ratio_2D: 长宽比Circularity_2D: 圆形度Solidity_2D: 实心度Convexity_2D: 凸度radius_angularity_index_2D: 半径棱角度指数
程序使用以下步骤渲染气泡投影:
-
STL文件读取与预处理:
- 读取气泡的STL模型文件
- 对点云数据进行归一化处理
- 根据需要进行上采样,确保点云密度足够(默认约20000个点)
- 应用Taubin平滑算法减少噪声
- 填充模型中可能存在的小孔
-
投影点生成:
- 支持两种投影模型:
fibonacci:基于斐波那契螺旋分布在球面上的均匀点sphere:基于PyVista球体模型生成的均匀分布点
- 默认生成33个观察角度的投影点
- 支持两种投影模型:
-
多角度渲染:
- 对每个投影点,通过旋转模型实现不同角度的观察
- 使用向量叉乘和点乘计算旋转轴和角度
- 根据模型大小自动调整缩放比例
-
光照模型与投影:
- 考虑表面法线与视线方向的夹角计算光照强度
- 使用高次幂函数(angles^8)增强边缘对比度
- 应用基于距离的权重插值实现平滑渲染
-
图像处理:
- 应用高斯滤波(sigma=1.0)平滑图像
- 应用中值滤波(size=5)去除噪点
- 调整对比度增强图像质量
-
形态参数计算:
- 基于三维模型计算3D参数(体积、表面积、球形度等)
- 基于投影轮廓计算2D参数(面积、周长、圆形度等)
- 拟合椭球体/椭圆获取主轴和次轴信息
- 计算各种形态指标如棱角度、凸度、圆形度等
-
结果导出:
- 生成多角度的投影图像(PNG格式)
- 输出包含所有形态参数的CSV文件
在运行程序前,确保已安装所有必要的依赖库:
pip install -r requirements.txt主要依赖包括:
- numpy:用于数值计算
- pyvista:用于3D网格处理
- matplotlib:用于图像生成
- opencv-python (cv2):用于图像处理
- scipy:用于科学计算
- tqdm:用于显示进度条
如果程序运行出错,可能原因包括:
- STL文件格式不正确或数据异常
- 缺少依赖库(请安装:numpy, cv2, pyvista, matplotlib, scipy, tqdm)
- 内存不足(处理大型STL文件时)
计划在未来版本中添加:
- 渲染管线的GPU加速
- 更多的投影模型选项
- 批处理功能的优化
- 更直观的参数可视化
如有任何问题或建议,请联系开发者。
注:此工具主要用于气泡流研究,适用于分析气泡形态特征和流体动力学行为。
parameters.csv文件中的参数详细解释:
- 椭球拟合参数:
a,b,c:拟合椭球的三个半轴长度(由大到小排序)
- 体积与表面积:
Volume_3D:气泡体积Surface_area_3D:气泡表面积
- 形状指数:
EI_3D:扁平度指数 (Elongation Index) = b/aFI_3D:伸长度指数 (Flatness Index) = c/bAR_3D:纵横比 (Aspect Ratio) = (EI_3D + FI_3D)/2Sphericity_3D:球形度,完美球体为1.0Convexity_3D:凸度,表示与凸包的体积比Angularity_3D:棱角度,表示表面的不规则程度
- 尺寸参数:
Principal_Dimension_2D:投影的主轴长度Secondary_Dimension_2D:投影的次轴长度Area_2D:投影面积
- 形状参数:
Aspect_Ratio_2D:投影的长宽比Circularity_2D:圆形度,完美圆形为1.0Solidity_2D:实心度,表示投影面积与椭圆面积的接近程度Convexity_2D:凸度,表示投影面积与凸包面积的比值radius_angularity_index_2D:半径棱角度指数,表示轮廓相对于拟合椭圆的不规则程度
您可以在rendering.py文件中自定义以下参数:
# 投影方式
projection_model = 'sphere' # 或 'fibonacci'
# 投影点数量
points = generate_points_on_sphere(N = 33) # 生成33个投影角度
# 光照参数修改 (第347行附近)
M = angles ** 8 # 可以修改幂次来调整边缘锐利度
# 图像处理参数 (第395行附近)
mapped_points = gaussian_filter(mapped_points, sigma=1) # 高斯滤波参数
mapped_points_normalized = median_filter(mapped_points_normalized, size=5) # 中值滤波参数完成代码修改后,您可以使用以下命令将项目上传到Git仓库:
# 初始化Git仓库(如果尚未初始化)
git init
# 添加所有文件到暂存区
git add .
# 提交更改
git commit -m "初始版本:气泡渲染工具"
# 添加远程仓库(替换为您的仓库URL)
git remote add origin <仓库URL>
# 推送到远程仓库
git push -u origin master如需更新代码:
# 添加修改的文件
git add .
# 提交更改
git commit -m "更新:添加新功能/修复问题"
# 推送更改
git push- GPU加速渲染管线,提高大规模数据处理效率
- 增加更多投影模式和视觉效果选项
- 添加实时预览和交互式参数调整界面
- 优化批处理能力,支持更大规模的数据集处理
- 添加与机器学习模型的集成接口,用于自动化形态分析