Matlab实现二维数字图像相关(2D Digital Image Correlation, 2D-DIC)【ADIC2D代码复现及原理介绍】


前言

由于本人近期正在展开数字图像相关技术用于测量材料形变方向的研究,其中需要对别人现有算法的复现和调研,尽管其中很多算法都已经非常成熟,但对于初学者而言即使明白其中的原理,无法上手实践和操作的话,依然无法能够将其完全的应用起来或者在上面进行创新,我希望能将自己作为一个初学者复现他人代码和学习该原理的过程记录下来,方便每一个涉足该领域的人能更快应用这些知识。

本文所复现的论文——Atkinson D, Becker T. A 117 Line 2D Digital Image Correlation Code Written in MATLAB[J]. Remote Sensing, 2020, 12(18): 2906.1
GitHub源码地址:https://github.com/SUMatEng/ADIC2D.git

由于官方数据集可能存在变动或者被墙,这里提供一下我已经上传好的版本
数据集地址:

数字图像相关专栏目录:

  1. Matlab实现二维数字图像相关(2D Digital Image Correlation, 2D-DIC)【ADIC2D代码复现及原理介绍】
  2. 数字图像相关(Digital Image Correlation, DIC)中的非线性优化方法(FA-GN与IC-GN)
  3. 数字图像相关(Digital Image Correlation, DIC)中的非线性优化方法IC-GN的数值解计算
  4. 用MATLAB绘制随机散斑图案【源码+正确的椭圆旋转公式】

这篇论文是让我真正想要将自己正在做的这些事进行记录的源动力,因为这篇文章的作者也是考虑到尽管数字图像相关技术很成熟,但是网络上缺乏可以实操的源码便于理解,从而将简化的代码以及对于原理的解释共享在网络上便于他人学习。非常感谢Devan Atkinson,Thorsten Becker两位作者对于他们知识成果的共享。我将在这里将我学到的东西以中文的形式以方便国内的学者进行进一步的研究。

This paper aims to bridge the gap between the theory and implementation of DIC. It does this by firstly presenting the theory for a 2D, subset based DiC framework that is predominantly consistent with current state-of-the-art practices. 1

一.数字图像相关(Digital Image Correlation)

数字图像相关技术(Digital Image Correlation, DIC) 是广泛应用于刚体结构形变检测的视觉测量技术。它通过在被测物表面投影或绘制随机散斑图案,定义图像的相似度函数,对物体形变前后的两幅图像进行分析即可得到采样点的位移场,从而得到形变2。数字图像相关技术按照其测量的维数,可以被分为二维数字图像相关(Two-Dimensional Digital Image Correlation, 2D-DIC)三维数字图像相关(Three-Dimensional Digital Image Correlation, 3D-DIC)3。如图所示4就是2D-DIC获取形变后子区位移场的过程。
a)参考图像及其子区 b)形变图像及其子区 c)相关运算后得到的位移场

对于数字图像相关而言,其流程可以分为标定、相关运算、位移变换以及最后根据实际需要计算应变或者其他信息四个步骤,标定就是通过一系列拍摄的特定图案的图片,利用标定算法求解出相机图像坐标系与真实世界坐标系下的映射关系,之后我单独写一篇来分享好了,这里主要分享一下相关运算的流程与推导。

二.相关运算

数字图像相关的本质就是在参考图像上设置好子区后,找到形变后图片上对应的已经产生过位移的子区,从而计算出形变子区相对于参考子区在图像坐标系上的位移,最终利用标定好的映射关系求解出该区域在实际物理空间中的位移,最后利用得到的位移计算得到所拍摄表面所发生的形变。在这个过程中参考子区是已知的,但形变后的图片上原本的子区必然发生了变化,其具体位置是未知的,因此如何才能找到和原先参考子区对应的那块区域(求解这一未知量)正是关键所在,这正是相关运算所做的事情。

1.数学模型

我强烈建议大家能一起推导一次这一部分,对于理解相关运算有很大的作用!!

首先设参考图像 F F F,它很多时候代表了 t = 0 t=0 t=0时刻所拍摄到的散斑图案,其上的参考子区设为 f f f

子区的排布有很多种,可以加步进那样整列排布,也可以随机的点选;子区的形状也可以各种各样,矩形、圆型,只要保证相关运算所处理的所有子区为同一种形状、大小的即可。

接下来设形变图像 G G G,其上的形变子区 g g g,如下为一个在相机图像坐标系下的示意图1
在这里插入图片描述
图中左上角的矩形框即为参考子区,右下角的平行四边形即为形变子区,其中参考子区 f f f中心点为 x 0 = [ x 0 y 0 ] T \boldsymbol{x}^{0}=\left[\begin{array}{ll}x_{0} & y_{0}\end{array}\right]^{T} x0=[x0y0]T(后面的公式表达请注意上下标),参考子区上的其他像素点为 x i = [ x i y i ] T \boldsymbol{x}^{i}=\left[\begin{array}{ll}x_{i} & y_{i}\end{array}\right]^{T} xi=[xiyi]T。以中心点 x 0 \boldsymbol{x}^{0} x0作为参考,我们可以得到
x i = Δ x i x 0 + x o = [ x i y i ] = [ Δ x i Δ y i ] + [ x 0 y 0 ] \boldsymbol{x}^{i}=\Delta \boldsymbol{x}^{i} \boldsymbol{x}^{0}+\boldsymbol{x}^{o}=\left[\begin{array}{l} x_{i} \\ y_{i} \end{array}\right]=\left[\begin{array}{l} \Delta x_{i} \\ \Delta y_{i} \end{array}\right]+\left[\begin{array}{l} x^{0} \\ y^{0} \end{array}\right] xi=Δxix0+xo=[xiyi]=[ΔxiΔyi]+[x0y0]其中 Δ x i x 0 \Delta \boldsymbol{x}^{i} \boldsymbol{x}^{0} Δxix0表示 x 0 \boldsymbol{x}^{0} x0 x i \boldsymbol{x}^{i} xi的坐标偏移。现在我们设置形变子区中与之前 x i \boldsymbol{x}^{i} xi相对应的当前坐标点为 x i ′ = [ x i ′ y i ′ ] T \boldsymbol{x}^{i'} =\left[\begin{array}{ll}x_{i}' & y_{i}'\end{array}\right]^{T} xi=[xiyi]T,与之前中心点 x 0 \boldsymbol{x}^{0} x0相对应的形变子区中心点为 x d \boldsymbol{x}^{d} xd。与上式同理,我们同样可以得到 x i ′ \boldsymbol{x}^{i'} xi的表达式为
x i ′ = Δ x i ′ x 0 + x o = [ x i ′ y i ′ ] = [ Δ x i ′ Δ y i ′ ] + [ x 0 y 0 ] \boldsymbol{x}^{i'}=\Delta \boldsymbol{x}^{i'

  • 71
    点赞
  • 217
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 180
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 180
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ViolentElder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值