当SEM图像遇上有限元:一场颗粒流动的数字化探险
颗粒流动本案例首先基于图像处理方法将SEM二维扫描图像的孔隙模型进行了提取如图1所示。 将提取的孔隙网络模型导入有限元软件中进行渗流模拟模拟结果如图2所示。 2.5x.显微镜下的SEM二维扫描图像就像一幅抽象画密密麻麻的颗粒堆叠中藏着无数蜿蜒的孔隙通道。要把这些微观结构变成可计算的渗流模型首先得玩转图像处理的黑科技。咱们先用Python的OpenCV库对SEM图像做预处理。下面这段代码展示了如何把灰度图转化成二值化的孔隙网络import cv2 import numpy as np img cv2.imread(sem_image.tif, 0) # 灰度模式读取 blurred cv2.GaussianBlur(img, (5,5), 0) # 高斯去噪 _, thresh cv2.threshold(blurred, 127, 255, cv2.THRESH_BINARYcv2.THRESH_OTSU) # 大津算法二值化 # 形态学开运算去除噪点 kernel np.ones((3,3), np.uint8) opening cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations2) cv2.imwrite(pore_network.png, opening)这段代码先用高斯模糊消除图像噪点想象给照片磨皮然后通过大津算法自动找到最佳阈值进行二值化——黑色区域是固体颗粒白色区域就是我们要的孔隙空间。最后的形态学操作就像用橡皮擦除掉图像里的杂散噪点确保孔隙边界干净利落。颗粒流动本案例首先基于图像处理方法将SEM二维扫描图像的孔隙模型进行了提取如图1所示。 将提取的孔隙网络模型导入有限元软件中进行渗流模拟模拟结果如图2所示。 2.5x.得到孔隙网络后用skimage库的骨架提取算法把连通的孔隙空间转化为脉络清晰的拓扑结构。这里有个坑过细的孔隙通道在骨架化时容易断裂需要反复调整腐蚀参数就像在钢丝上保持平衡。from skimage.morphology import skeletonize skeleton skeletonize(opening // 255) # 二值图像转为布尔矩阵 cv2.imwrite(skeleton.png, skeleton.astype(np.uint8)*255)当这个孔隙骨架导入COMSOL时事情开始变得有趣。设置两相流模型时边界条件要特别注意——真实的颗粒表面往往带有电荷效应这时候需要在Navier-Stokes方程里加入电场力项// COMSOL弱形式方程示例 electric_force epsilon*r*V^2/d^2; // 电场力计算 velocity test(u)*(u·grad(u)) mu*grad(u)·grad(test(u)) - electric_force*test(u);模拟结果显示在2.5倍放大视角下某些狭窄区域的流速会出现突变图2。这其实暴露了网格划分的秘密当孔隙直径突然收缩时四面体网格需要局部加密否则就像用粗渔网捞小鱼关键数据全漏了。聪明的做法是设置自适应网格让软件自动在流速梯度大的区域生成更细密的网格。整个流程走下来最大的感悟是从像素到物理场的转化就像在微观世界修公路。图像处理是测绘地形有限元分析则是规划交通路线。某个环节的误差会被层层放大可能最终在模拟结果里呈现为完全违背物理常识的幽灵流线。所以每次看到漂亮的流速云图时别忘了背后那些与噪点斗智斗勇的深夜还有被网格划分逼疯的瞬间。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2414017.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!