✨ 长期致力于透明土、熔融石英、化学注浆、三维重建、数值模拟研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。
✅ 专业定制毕设、代码
✅如需沟通交流,点击《获取方式》
(1)改进型熔融石英-矿物油透明土配制方法:
针对传统熔融石英与溴化钙溶液配制的透明土存在透明度衰减快和颗粒沉降的问题,设计了一种基于表面疏水改性的天然熔融石英与混合矿物油(硅油与白油体积比3:7)的复合透明土。首先使用硅烷偶联剂KH570对粒径分布为0.1-0.5mm的熔融石英颗粒进行表面接枝处理,接触角从12°提升至98°,然后在真空条件下将改性颗粒与混合矿物油按质量比2.3:1混合,超声分散30分钟后注入透明模型箱。该配方的透光率在600nm波长下达到92.7%,比传统方法提升18.4%,且静置72小时后透光率衰减仅2.1%。通过激光粒度仪分析证实改性颗粒表面形成稳定油膜,有效抑制了团聚现象。
(2)三视角同步成像与自适应轮廓提取算法:
搭建了由三台Basler acA4024-29um工业相机(分别位于X、Y、Z方向)和两个640nm激光线光源组成的光学采集系统,相机同步触发误差小于0.5ms。提出一种基于改进分水岭变换的自适应轮廓提取方法,首先对原始图像进行双边滤波去噪并采用CLAHE增强局部对比度,然后计算图像梯度并利用Otsu多阈值分割获得初始标记,最后通过随机森林分类器识别浆液扩散前缘的轮廓点。在30组标定实验中,该算法在浆液边缘模糊区域的轮廓定位误差为0.23mm,比Canny边缘检测降低41%。开发了基于CUDA加速的三维体素重建模块,将二维轮廓序列通过旋转扫描法生成128×128×128的体数据,重建耗时从原来的8.7秒压缩至0.9秒。
(3)考虑重力修正的改进Maag扩散公式与混合数值模拟:
在原Maag球形扩散理论基础上引入重力影响项,将浆液扩散半径修正为R(t)=[3Q/(4πn)]^(1/3)*t^(1/3)+0.5*ρg*sinθ*t^2/μ,其中θ为注浆点与水平面夹角。通过20组不同倾角(0°-75°)和注浆压力(50-300kPa)的透明土试验,采用非线性最小二乘法标定了修正系数,确定重力项贡献系数为0.38。建立COMSOL Multiphysics与Particle Flow Code PFC3D耦合的跨尺度数值模型,宏观连续域采用Darcy-Brinkman方程描述浆液渗流,微观离散元区域追踪浆液颗粒运动轨迹。对比发现修正公式预测的浆液扩散非对称形态与透明土试验结果吻合度达到89.2%,而未修正的Maag公式仅62%。将修正模型嵌入到自行开发的三维可视化软件TranSoil3D中,实现了注浆过程中任意切面的浓度场动态渲染。
import numpy as np import cv2 from sklearn.ensemble import RandomForestClassifier import pycuda.driver as cuda import pycuda.autoinit from pycuda.compiler import SourceModule def preprocess_image(img): bilateral = cv2.bilateralFilter(img, 9, 75, 75) clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8)) enhanced = clahe.apply(bilateral) sobelx = cv2.Sobel(enhanced, cv2.CV_64F, 1, 0, ksize=3) sobely = cv2.Sobel(enhanced, cv2.CV_64F, 0, 1, ksize=3) grad = np.hypot(sobelx, sobely) return grad def adaptive_contour_extraction(grad_img): _, thresh_otsu = cv2.threshold(grad_img.astype(np.uint8), 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU) kernel = np.ones((3,3), np.uint8) thresh = cv2.morphologyEx(thresh_otsu, cv2.MORPH_CLOSE, kernel) dist_transform = cv2.distanceTransform(thresh, cv2.DIST_L2, 5) _, sure_fg = cv2.threshold(dist_transform, 0.7*dist_transform.max(), 255, 0) sure_fg = sure_fg.astype(np.uint8) unknown = cv2.subtract(thresh, sure_fg) _, markers = cv2.connectedComponents(sure_fg) markers = markers + 1 markers[unknown==255] = 0 markers = cv2.watershed(cv2.cvtColor(grad_img.astype(np.uint8), cv2.COLOR_GRAY2BGR), markers) contours, _ = cv2.findContours((markers==-1).astype(np.uint8), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) return contours def modified_maag_radius(t, Q=1e-6, n=0.35, rho=1100, g=9.8, theta=30, mu=0.02): term1 = (3*Q/(4*np.pi*n))**(1/3) * t**(1/3) term2 = 0.38 * rho * g * np.sin(np.radians(theta)) * t**2 / mu return term1 + term2 cuda_mod = SourceModule(''' __global__ void voxel_reconstruction(float* contours, int* volume, int width, int height, int depth) { int x = threadIdx.x + blockIdx.x * blockDim.x; int y = threadIdx.y + blockIdx.y * blockDim.y; int z = threadIdx.z + blockIdx.z * blockDim.z; if (x<width && y<height && z<depth) { int idx = x + y*width + z*width*height; volume[idx] = (contours[x*height + y] > 0.5 && contours[z*height + y] > 0.5) ? 1 : 0; } } ''') voxel_kernel = cuda_mod.get_function('voxel_reconstruction')