Appearance
DIC 数字图像相关
基本原理
DIC(Digital Image Correlation)通过比较变形前后图像中局部子区的灰度纹理变化,估计材料表面的位移场,再由位移场计算应变场。通常需要在试样表面制作随机散斑,让算法能稳定匹配局部图像块。
DIC 的关键是相关窗口、搜索范围、亚像素插值、相机标定和误差控制。它不是简单的目标检测,而是全场定量测量技术。
解决的问题
传统应变片只能测一个或少数几个点,无法看到全场变形。DIC 解决的是材料和结构实验中的全场位移/应变测量问题,尤其适合局部化变形、裂纹扩展、复合材料失效和复杂形变。
应用场景
- 拉伸、压缩、弯曲和剪切实验中的应变云图。
- 裂纹尖端位移、裂纹扩展路径和断裂过程分析。
- 复合材料、金属、橡胶、混凝土、岩土材料变形测量。
- 结构健康监测和振动形变分析。
- 显微尺度材料实验和高速冲击实验。
Python 库
| 工具 | 用途 |
|---|---|
DICe | 开源数字图像相关工具,适合工程 DIC 分析 |
py2DIC | Python 2D DIC 项目,可做学习和二次开发参考 |
opencv-python | 图像读取、ROI、特征、可视化 |
numpy / scipy | 数值计算、插值、平滑、误差分析 |
matplotlib / plotly | 位移场和应变场可视化 |
最小示例
python
import cv2
import numpy as np
before = cv2.imread("before.png", cv2.IMREAD_GRAYSCALE)
after = cv2.imread("after.png", cv2.IMREAD_GRAYSCALE)
# 使用稀疏光流示意位移估计。正式 DIC 会使用相关子区和亚像素优化。
points = cv2.goodFeaturesToTrack(before, maxCorners=200, qualityLevel=0.01, minDistance=8)
next_points, status, _ = cv2.calcOpticalFlowPyrLK(before, after, points, None)
valid_before = points[status.ravel() == 1]
valid_after = next_points[status.ravel() == 1]
displacement = valid_after - valid_before
print("mean displacement:", np.mean(displacement.reshape(-1, 2), axis=0))这不是完整 DIC 算法,只用于说明“通过图像匹配估计位移”的思想。正式实验应使用 DICe、py2DIC 等工具并进行标定和误差评估。
工程流程概览
散斑制备 -> 图像采集 -> ROI 选择 -> 相关计算 -> 位移场 -> 应变场 -> 误差检查 -> 实验结论。
