前言
由于本人近期正在展开数字图像相关技术用于测量材料形变方向的研究,其中需要对别人现有算法的复现和调研,尽管其中很多算法都已经非常成熟,但对于初学者而言即使明白其中的原理,无法上手实践和操作的话,依然无法能够将其完全的应用起来或者在上面进行创新,我希望能将自己作为一个初学者复现他人代码和学习该原理的过程记录下来,方便每一个涉足该领域的人能更快应用这些知识。
随机散斑图像的质量很大程度上决定了数字图像相关中匹配算法的收敛性,为方便大家做实验时候生成散斑图像,我这里分享了我自己写的绘制随机散斑图案的MATLAB源码,有关随机散斑对于数字图像相关算法的影响,建议阅读参考引用中的两篇文献12,如果你对数字图像相关算法感兴趣,欢迎阅读我的其他帖子:
- Matlab实现二维数字图像相关(2D Digital Image Correlation, 2D-DIC)【ADIC2D代码复现及原理介绍】
- 数字图像相关(Digital Image Correlation, DIC)中的非线性优化方法(FA-GN与IC-GN)
这份源码的算法部分借鉴了一部分Y Su大佬的开源软件Glare: A free and open-source software for generation and assessment of digital speckle pattern ,如果你需要在课题中使用他的软件请记得引用,以下是两个推荐使用的散斑图像生成软件(比我的源码更强大):
一.源代码
代码中我放入了一个随机种子 S S S生成,如果你需要复现之前跑出来的随机图像,可以提前将这个种子以及当时实验设置的参数保存下来,这样就可以复现当时的随机图像了。其他部分我都做了较为详细的注释,椭圆绕其中心点的旋转公式请参照Section 3里的内容。
clear
close all
clc
%% Section 1:散斑参数设置
width=1920; % 图像宽
height=1080; % 图像高
diameter=20; % 散斑直径(单位:像素)
density=0.5; % 密排度(区间:0-1,图像上的散斑密度)
variation=0.5; % 偏移度(区间:0-1,图像上的散斑随机排布程度,0时即为圆点整列)
background=1; % 图像背景颜色(0:黑色,1:白色)
% 可选设置
eccentricity=0.99; % 椭圆的偏心率(区间:[0,1),为0时即为圆点)
S=rng; % 生成一组随机数种子,使之后Section中产生的散斑伪随机
%% Section 2:生成随机散斑在图像上的位置
radius=0.5*diameter; % 散斑半径(单位:像素)
major_radius = radius / sqrt(sqrt(1 - eccentricity * eccentricity)); <