这个仓库托管了北京航空航天大学弹性力学课程大作业,题为“薄膜比拟试验探究”的 MATLAB 脚本。由2021级本科生张添翼制作。同时感谢孙铁 张汉琛 李凯乐 王鸿鹏四位同组成员,指导老师毛建兴老师。
- Preprocess.m:该脚本主要用于图像的预处理,包括读取图像、转换为灰度图、调整对比度和亮度、应用滤波器以及裁剪图像。
- Contours.m:这个脚本用于边缘检测和提取图像的曲线轮廓。它使用了Canny算法来检测边缘,并选择合适的轮廓进行展示。
- Transform.m:这段脚本主要关注于从图像中提取实际的数据点,并将图像坐标转换为实际坐标。它还包括对数据的一些初步处理。
- Analyze.m:此脚本专注于对提取的数据进行数学分析,包括评估导数、寻找最大和最小斜率的点以及划分斜率区间。
- 添加图片教程
- 添加实验报告模板
你需要进行以下步骤来使用 BUAA-ElasticMechanics-MembraneAnalogyTwist
:
- 从 Github Releases 下载zip文件或者单独的文件,保存在一个目录文件中。
- 安装合适的MATLAB程序。
- 安装合适的任意PS程序(需要进行一定的绘图)。
- 运行本脚本。
-
准确度高
- 本项目对照片进行预处理,保障轮廓更加清晰。
- 采用Canny 算法进行边缘检测,可靠性较高。
-
方便快捷
- 本项目对于图片进行处理,人工计算量较小。
- 若使用坐标值,可以直接在脚本中处理成为实际数据
-
易于学习
- 本项目代码简单,结构清晰,利于使用者阅读修改以及学习相关知识。
在部分更改正式进入主要脚本之前,它们将被添加到开发模式中。同样,如果你有兴趣加入我们的开发,请从不同分支向我们提交pr。详情
-
预处理:首先对图片进行适当预处理,我们建议利用类似于
Photoshop
之类的图片编辑软件,使用钢笔工具
(因为这会使你的曲线更加光滑,误差更小)将你薄膜的轮廓进行描边,使用旋转工具将你的照片放正(这一步在最终结果中的影响较为显著)。最后将你预处理的图片命名为一个恰当的名称,放入该脚本所在文件夹。同时修改Preprocess.m
中的img = imread('image.png');
路径。 -
运行
Preprocess.m
完成脚本预处理:运行该脚本后,会提示让你裁剪图片,选好覆盖所有轮廓区域后,双击轮廓内部即完成裁剪。此时,目录下应该出现cropped_image.png
-
运行
Contours.m
提论轮廓,查找k
:运行后,观察哪一个边界最符合你的实验曲线,然后记下它的索引k
。为了便于分析,我已经添加了获取边界中心点,用于放置文本标签k
的功能。你可以通过以下小技巧来快速找到k
:-
查找边界中心点:对于任意一个边界,其标签处于其
midPoint
附近,所以你可以查找这附近是否有对应的标签 -
通过
B
数组来查找:一般来说,我们需要查找的轮廓中包含的数据是最多的,因此可以通过这个特性在数组中寻找。首先你可以去掉以下代码:midPoint = round(mean(boundary, 1)); text(midPoint(2), midPoint(1), sprintf('%d', k), 'Color', 'yellow', 'FontSize', 12)
这段代码的作用是添加文本标签,他可能会让你的电脑卡顿。 运行脚本后查看你需要轮廓的最左侧点和最右侧点的
x,y
的值,双击打开工作区的B
数组,在里面找到含有数据最多的二维数组,查看是否与之前的x,y
的值对应,若对应,则其序号则为你需要查找的k
值。
-
-
获取坐标轴距离:若你在记录数据时使用到了坐标纸,那你可以在图中标注出每一条线对应的
x
的坐标,同时你可以找到这条曲线中心点的坐标(一般是最低点)。对于每一条线的x
坐标,你可以填入Transform.m
文件中的perx
中计算放大比例关系,其方法于高中物理课已经学习到(后三减前三)。中心点的坐标填入x_delta
和y_delta
。若你在记录数据是未使用坐标纸,请你根据实际偏移原点坐标轴。 -
运行
Transform.m
提取数据点并转化为实际坐标:将3
中获得的k
值代替selected_boundary = B{5}
中的5
,然后运行。此时应获得合理的x_real
和y_real
值 -
利用
cftool
进行曲线模拟:在matlab命令行中输入cftool,即可打开曲线拟合器。选择x_real
和y_real
值作为拟合数据,建议以傅里叶函数作为拟合函数进行拟合,可以选择多项傅里叶函数提高拟合准确度。 -
导出拟合曲线到工作区:拟合完成后,导出拟合曲线到工作区,默认参数即可:
将拟合保存到具有以下名称的MATLAB对象:fittedmodel 将拟合优度保存到具有以下名称的MATLAB结构体:goodness 将你和输出保存到具有以下名称的MATLAB结构体:output
-
运行
Analyze.m
获取最终结果:若前面步骤都没问题,则可以成功获得最后结果。按照所得结果绘制k
的阶梯图像即可
请在Issue中提问问题。
Welcome everyone.