2019年亚太杯APMCM数学建模大赛A题基于图像分析的二氧化硅熔化表示模型求解全过程文档及程序

2019年亚太杯APMCM数学建模大赛

A题 基于图像分析的二氧化硅熔化表示模型

原题再现

  铁尾矿的主要成分是二氧化硅,而二氧化硅是铁尾矿成分中最难熔化的部分。因此,铁尾矿的熔融行为可以用二氧化硅的熔融行为来表示。然而,高温熔池的温度超过1500,其中常规检测设备在环境下的使用寿命很短。为了解决这一问题,相关课题组在国内外首次采用了一种具有放大效果的CCD视频拍摄系统。该小组以非接触的方式获得了高温熔池中二氧化硅的动态可视化数据(时序下的序列图像),并通过视频分析观察了时序中二氧化硅的实时熔融速率,为渣棉制备过程中的尾矿添加和热补偿提供了指导,从而间接改进了高炉矿渣直接纤维成型技术。
  二氧化硅在高温熔池中熔化过程中的时序图像(见附件,共114张图像;文件名称序号为时序,每隔1s采集一张图像)。采用的实验设备情况如下图所示:
在这里插入图片描述
  为了揭示铁尾矿在高炉矿渣中的溶解行为,采用铁尾矿的主要成分SiO2进行研究,研究了SiO2颗粒在高温下的熔融过程,以表征铁尾矿的熔融。试验准备的材料分别为:用于分析的纯SiO2颗粒(见图3)和直径为8mm的刚玉坩埚(见图4):
在这里插入图片描述
  附件数字图像中显示的信息包括:

  (1) 坩埚在图像中的固定位置;

  (2) 未熔融的SiO2颗粒的位置可以随着时间序列而改变。

  需要对附件中的图像进行以下分析

  1.在熔化过程中,二氧化硅颗粒在高温熔池中的位置不断变化,分析二氧化硅熔化行为的第一步是跟踪目标。请建立一个数学模型来跟踪二氧化硅颗粒在熔化过程中的质心位置,并给出二氧化硅质心的运动轨迹。

  2.建立表征二氧化硅熔融过程中二氧化硅边缘轮廓特征的指标(如形状、周长、面积、广义半径等);参与者可以自己选择,只要他们能代表二氧化硅的熔化过程。

  3.对于附件中给出的图像是2D,而代表二氧化硅熔化速率的关键参数是质量,并且质量与3D体积成正比,根据第2题中二氧化硅的边缘轮廓特征指数来估计二氧化硅的实际熔化速率。

整体求解过程概述(摘要)

  本文旨在模拟一种二氧化硅的熔化规律,这种熔化规律不能通过直接接触手段测量,只能通过图像监测手段间接测量。本文利用图像处理技术实现了二氧化硅熔融规律的测定。

  在问题1中,我们建立了一个基于K-means算法的图像分割模型,利用这种成熟的聚类算法实现对原始图像信息的有效分割,从原始图像中提取二氧化硅的轮廓信息,同时利用Canny滤波技术去除图像轮廓周围的噪声,利用腐蚀和膨胀技术对有效轮廓区域进行细化,通过调整得到二氧化硅轮廓特征明显的二值图像。此外,建立图像所在平面的二维坐标系,并通过使用快速搜索算法确定二氧化硅区域在二值图像中的质心位置。最后,对114幅图像中二氧化硅的质心坐标进行计数,得到质心位置与离散时间点之间的关系,然后用该性质的高幂函数拟合函数曲线来满足二氧化硅中心的运动。通过残差函数的误差分析,拟合结果表明,二氧化硅质心的运动方程倾向于10次方函数。

  在问题2中,我们选择面积指数作为二氧化硅熔融过程中的特征量,并且通过图像处理技术,在图像区域中只保留坩埚的横截面图像和二氧化硅的轮廓图像。此外,利用MATLAB软件的图像处理功能对两种轮廓线包围的所有像素进行计数。考虑到两个区域中像素总数的比率是两个区域的面积比率,并且坩埚的截面积是一定的值,我们将两个区域中像素总数的比率与它们的面积比率相关联,从而确定单位时间内二氧化硅剖面的面积。最后,对114幅图中二氧化硅剖面的面积数据进行了统计,得到了二氧化硅剖面面积与离散时间点之间的关系。利用MATLAB中的函数拟合工具箱对二氧化硅的熔融过程进行拟合,并对拟合结果进行误差分析。拟合结果表明,二氧化硅的熔融随时间的变化规律趋于3次方函数。

  在问题3中,我们从一个新的想法出发,使用边缘滤波技术对原始平面二值图像进行两次滤波。这种滤波的目的是挖掘二值图像中过去没有检测到的空间区域,得到二氧化硅立体图像表面的隐藏沟壑区域,间接起到挖掘图像表面第三坐标的作用。经过去噪和目标提取,得到了一个新的具有第三坐标信息的二值二维图像。此外,通过像素数量和可测量量之间的比例来估计每个图像中二氧化硅的体积,从而获得体积和离散时间点之间的关系。此外,对二氧化硅的熔融过程进行了函数拟合。拟合结果表明,二氧化硅随时间的熔化规律更倾向于一种二次幂函数,而熔化速率与时间则倾向于线性关系,这与一些文献的结论基本一致。

模型假设:

  ① 假设成像环境的照明因子在每个时间间隔内是稳定的,并且光源的位置是固定的;

  ② 忽略一小部分二氧化硅的分离,因为在熔融过程中温度较高,只研究二氧化硅的主要部分;

  ③ 假设坩埚的横截面是一个标准圆;

  ④ 假设二氧化硅的密度是均匀分布的;

  ⑤ 由于二氧化硅的质量与其体积成正比,我们假设二氧化硅颗粒的密度为第一单元,并进一步将熔化过程中的质量与时间的关系变为体积与时间的联系。

问题分析:

  问题分析1
  对于问题1,为了建立二氧化硅熔化过程中质心的位移和运动轨迹模型,首先要根据CCD视频拍摄系统获得的114幅连续的二氧化硅熔化图像,在1秒内确定二氧化硅质心在图像平面(2D)上的坐标。由于图像整个平面的位置是固定的,因此如果每秒可以确定二氧化硅质心在整个图像平面中的位置,则意味着可以进一步确定质心在114秒内的位置分布特征。因此,我们可以得到质心位置与离散时间点之间的关系,然后通过适当的数值拟合,我们可以进一步得到满足二氧化硅质心运动特性的函数曲线。

  问题分析2
  对于问题2,我们分析了CCD相机获取的二氧化硅轮廓的第一个特征是其轮廓面积,因此我们应该选择面积因子作为描述二氧化硅熔化过程中边缘轮廓特征的指标。首先,我们应该使用图像处理技术来去除整个图像的黑色背景,此时图像区域只保留坩埚截面的图像和二氧化硅的轮廓图像。然后,我们应该使用MATLAB中的图像处理函数来计算这两种轮廓线所包围的所有像素。可以认为,两个像素的比率是两者的面积比率,因此我们可以进一步将两个像素与面积比率相关联,因此,二氧化硅轮廓的面积可以每秒确定。根据提取的面积信息,我们还应该使用MATLAB中的函数拟合工具箱来拟合二氧化硅的熔化过程。

  问题分析3
  对于问题3,根据问题3的信息,可以看出,表示二氧化硅熔融速率的基本参数是二氧化硅的质量,而不是二氧化硅的二维面积,因此有必要在二氧化硅的熔融过程中找到质量和时间之间的关系,并且由于体积是一个三维参数,因此需要重建原始的二维图像。通常,2D图像的3D重建过程是指重建2D灰度图像表面的3D形状的操作,在这个重建过程中使用的算法通常是SFS和SFX,但经过我们的分析,这些算法对前景背景灰度差、图像亮度和分辨率都有很高的要求,即,它们需要具有高分辨率和与背景颜色差异大的灰度图像。然而,数据提供的114幅图像中的大多数都不能满足这种要求。即使进行图像增强预处理操作,也不能保证大多数图像的前景和背景灰度的差异能够满足三维重建的要求。因此,我们应该重新利用图像处理技术来提取二维图像中的三维特征信息,我们应该尝试挖掘二维二值图像中未检测到的空间区域。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:

部分程序如下:
clc;
clear;
A=imread('E:\ACMC\2019 APMCM Problems\2019 APMCM Problem A
Attachment\c\0606.bmp');%读取原图像
As=imread('E:\ACMC\2019 APMCM Problems\2019 APMCM Problem A
Attachment\b\0571.bmp');%读取原图像
% [filename,pathname]=uigetfile({'*.jpg';'*bmp';'*gif'},'E:\ACMC\2019 APMCM
Problems\2019 APMCM Problem A Attachment\0497.bmp');
% I = imread([pathname,filename]);
% I = A;
% B=A;
I=rgb2gray(A);%将原图像转换为灰度图像
B=rgb2gray(A);%将原图像转换为灰度图像
t=graythresh(B);%计算阈值 tv
C=im2bw(B,t);%根据阈值二值化图像
C1=im2bw(B,0.7298);%根据阈值二值化图像 8198 77
D=imfill(C,8,'holes');%对二值化后的图像填充肺实质
E=D-C;%得到肺实质的图像 E
F=imfill(E,8,'holes');%填充肺实质空洞
B=double(B); %%%%%%%%%%%%%%%注意这个地方,必须换成 double 类
型
BW5=edge(I,'Canny',0.035);%0.037 %a 0.035
% subplot(2,3,6);
% imshow(BW5);
%title('Canny 算子边缘检测')
G=B.*D;
H=BW5+G;
%figure,imshow(A);%figure,imshow(G);
%figure,imshow(H);
%figure,imshow(~C1);
F=(C1)+(~G);
%figure,imshow(F);
K=(F)+BW5;
figure,imshow(BW5);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%
%形态学腐蚀膨胀处理
se=strel('square',10');%方型结构元素
se1=strel('square',3');%方型结构元素
se2=strel('square',3');%方型结构元素
% A2=imdilate(A1,se);%腐蚀
% B1=imerode(A2,se);%膨胀
% A3=imdilate(B1,se1);%腐蚀
% B2=imerode(A3,se1);%膨胀
% B2 = bwmorph(A1,'close'); %运算
% B3 = bwmorph(B2,'close'); %运算
% B4 = bwmorph(B3,'close'); %运算
% B5 = bwmorph(B4,'close'); %运算
% %figure,imshow(B5);
% p1=imdilate(BW5,se);%腐蚀
BW5=imdilate(BW5,se);%膨胀
figure,imshow(BW5);
% figure,imshow(p2);
%目标选择
[M,N]=size(BW5);
buffer = F;
%figure,imshow(K);
size = 80;
for i=2:M-1
for j=2:N-1
% if((i>=(256-size) && i<=(256+size))&&(j>=(1005-size) &&
j<=(1005+size)))
% if((i>=(406-size) && i<=(496+size))&&(j>=( 655-size) &&
j<=(675+size)))
if((i>=(306-size) && i<=(246+size))&&(j>=(955-size) &&
j<=(1055+size)))
buffer(i,j)=BW5(i,j);
else
buffer(i,j)=0;
end
end
end
A1 = K;
figure;
buffer=imfill(buffer,8,'holes');%填充肺实质空洞
imshow(buffer);
%计算坐标
coorx = 0;
coory = 0;
cnt = 0;
for i=2:M-1
for j=2:N-1
if(buffer(i,j) == 1)
coorx = coorx + i;
coory = coory + j;
cnt = cnt + 1;
end
end
end
coor_x = coorx/cnt;
coor_y = coory/cnt;
coor = [coor_x,coor_y];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%
%形态学腐蚀膨胀处理
se=strel('square',5');%方型结构元素
se1=strel('square',3');%方型结构元素
se2=strel('square',3');%方型结构元素
zhongxin = [1052,583];
%figure,imshow(C1);
% [zhongxin,banjin,gongzhi] = imfindcircles(C1,[1,2000]);
viscircles(zhongxin, 528,'EdgeColor','b');
S_cir = pi * 528^2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%
%面积比例计算
Scnt = 0;
for i=2:M-1
for j=2:N-1
if((i-1052)^2+(j-583)^2 <=528^2)
Scnt = Scnt + 1;
end
end
end
pic_bili = cnt/Scnt;
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/114056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter的性能测试

性能测试的概念 定义&#xff1a;软件的性能是软件的一种非功能特性&#xff0c;它关注的不是软件是否能够完成特定的功能&#xff0c;而是在完成该功能时展示出来的及时性。 由定义可知性能关注的是软件的非功能特性&#xff0c;所以一般来说性能测试介入的时机是在功能测试…

Python---练习:while循环嵌套(用两次while三步走--里外各一次)

1、循环嵌套的引入 案例&#xff1a; 有天女朋友又生气了&#xff0c;惩罚&#xff1a;说3遍“老婆大人&#xff0c; 我错了”&#xff0c;这个程序是不是循环即可&#xff1f;但如果女朋友说&#xff1a;还要刷今天晚饭的碗&#xff0c;这个程序怎么书写&#xff1f; 思考&…

MOSFET(五):DrMos

一、简介 DrMos&#xff08;Driver MOSFET&#xff09;技术是 Intel 于2004年推出的服务器主板节能技术&#xff0c;即把 2 个MOSFET和 1 个MOS驱动器 三合一&#xff0c;集成在一个封装中。集成后的 DrMos 面积是分离MOSFET的 &#xff0c;功率密度是其 倍&#xff0c;通过搭…

android 13/14高版本SurfaceFlinger出现VSYNC-app/VSYNC-appSf/VSYNC-sf剖析

问题背景&#xff1a; 了解surfaceflinger的vsync同学都可能知道vsync属于一个节拍器&#xff0c;主要用来控制有节奏的渲染&#xff0c;不至于会产生什么画面撕裂等现象。 一般vsync都有会有2部分&#xff1a; app部分vsync&#xff0c;控制各个app可以有节奏的上帧 surfacef…

UVM-什么是UVM方法学

概念简介 百度对UVM的解释如下&#xff1a; 通用验证方法学&#xff08;Universal Verification Methodology, UVM&#xff09;是一个以SystemVerilog类库为主体的验证平台开发框架&#xff0c;验证工程师可以利用其可重用组件构建具有标准化层次结构和接口的功能验证环境 UVM…

UE4 AI群集实现

逻辑就不用说了&#xff0c;就是计算对应图形位置让每个Pawn移动到该位置 因为有时候AI与AI会卡住 所以加上这个Bool为true&#xff0c;以及设置两个AI之间至少隔的距离&#xff0c;设置在一个合理的参数即可 有时候AI群集&#xff0c;AI与AI会比较紧密&#xff0c;可以将Caps…

初始 c++(1)

目录: 目录 1: 命名空间的详解 2:c的输入与输出关键字及理解 3:详细讲解第一个c程序(每段代码的意思) 4:缺省参数的理解 5:函数重载 引言&#xff1a;从今天开始我们就开始学习c了&#xff0c;让我们一起开始新的知识吧&#xff01; 1&#xff1a;命名空间 所谓的命名空间…

分类预测 | MATLAB实现SSA-CNN-LSTM-Attention数据分类预测(SE注意力机制)

分类预测 | MATLAB实现SSA-CNN-LSTM-Attention数据分类预测&#xff08;SE注意力机制&#xff09; 目录 分类预测 | MATLAB实现SSA-CNN-LSTM-Attention数据分类预测&#xff08;SE注意力机制&#xff09;分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.MATLAB实…

用 pytorch 训练端对端验证码识别神经网络并进行 C++ 移植

文章目录 前言安装安装 pytorch安装 libtorch安装 opencv&#xff08;C&#xff09; 准备数据集获取训练数据下载标定 编码预分析 数据集封装格式 神经网络搭建神经网络训练神经网络测试神经网络预测C 移植模型转换通过跟踪转换为 Torch Script通过注解转换为 Torch Script 编写…

数据结构 排序

数据结构 排序 文章目录 数据结构 排序1. 排序的概念及引用1.1 排序的概念1.2 常见的排序算法 2.常见排序算法的实现2.1 插入排序2.1.1 基本思想2.1.2 直接插入排序2.1.3 希尔排序(缩小增量排序) 2.2 选择排序2.2.1 基本思想2.2.2 直接选择排序2.2.3 堆排序 2.3 交换排序2.3.1 …

Java后端模拟面试 题集④

1.你先作个自我介绍吧 面试官您好&#xff0c;我叫张睿超&#xff0c;来自湖南长沙&#xff0c;大学毕业于湖南农业大学&#xff0c;是一名智能科学与技术专业的统招一本本科生。今天主要过来面试贵公司的Java后端开发工程师岗位。 大学里面主修的课程是Java、Python、数字图…

使用QT实现http里面的get和post

#1024程序员节&#xff5c;参与投稿&#xff0c;赢限定勋章和专属大奖# #假如你有一台服务器&#xff0c;你最想做哪些事&#xff1f;# #你被什么样的BUG困扰过一周以上&#xff1f;# 在http里面下面这些方法和服务器的响应代码一起用于HTTP协议中的请求和响应交互。请注意&…

Spring Boot + EasyUI 创建第一个项目(一)

创建一个Spring Boot和EasyUI相结合的项目。 一、构建一个Spring Boot项目 Spring Boot之创建一个Spring Boot项目&#xff08;一&#xff09;-CSDN博客 二、配置Thymeleaf Spring Boot Thymeleaf&#xff08;十一&#xff09;_thymeleaf 设置字体_人……杰的博客-CSDN博客…

mybatisplus开启sql打印的三种方式

1、在application.yml文件中添加mybatisplus的配置文件 使用mybatisplus自带的log-impl配置&#xff0c;可以在控制台打印出sql语句、执行结果的数据集、数据结果条数等详细信息&#xff0c;这种方法适合再调试的时候使用&#xff0c;因为这个展示的信息详细&#xff0c;更便于…

【算法练习Day25】 重新安排行程N 皇后 解数独

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 重新安排行程N 皇后解数独总…

C# Socket通信从入门到精通(2)——多个同步TCP客户端C#代码实现

前言: 我们在开发Tcp客户端程序的时候,有时候在同一个软件上我们要连接多个服务器,这时候我们开发的一个客户端就不够使用了,这时候就需要我们开发出来的软件要支持连接多个服务器,最好是数量没有限制,这样我们就能应对任意数量的服务器连接,由于我们开发的Tcp客户端程…

使用 Visual Studio Code (VS Code) 作为 Visual C++ 6.0 (VC6) 的编辑器

使用 Visual Studio Code (VS Code) 作为 Visual C 6.0 (VC6) 的编辑器 由于一些众所周知的原因&#xff0c;我们不得不使用经典&#xff08;过时&#xff09;的比我们年龄还大的已有 25 年历史的 VC 6.0 来学习 C 语言。而对于现在来说&#xff0c;这个经典的 IDE 过于简陋&a…

Leetcode1833. 雪糕的最大数量

Every day a Leetcode 题目来源&#xff1a;1833. 雪糕的最大数量 解法1&#xff1a;贪心 排序 本题唯一的难点在于计数排序。 计数排序详解&#xff1a;C算法之计数排序 为了尽可能多的买到雪糕&#xff0c;我们选择从价格低的雪糕开始买&#xff0c;统计能够买到的雪糕…

Java学习_day03_变量数据类型运算符

文章目录 变量定义声明赋值使用简化 数据类型基本数据类型整型浮点型布尔型字符型空型 引用数据类型数据类型转换自动类型转换强制类型转换 运算符算术运算符赋值运算符比较运算符逻辑运算符位运算符条件运算符一元运算符二元运算符三元运算符运算符优先级 变量 变量类似于数学…

计算机算法分析与设计(12)---贪心算法(最优装载问题和哈夫曼编码问题)

文章目录 一、最优装载问题1.1 问题表述1.2 代码编写 二、哈夫曼编码2.1 哈夫曼编码概述2.2 前缀码2.3 问题描述2.4 代码思路2.5 代码编写 一、最优装载问题 1.1 问题表述 1. 有一批集装箱要装上一艘载重量为 c c c 的轮船&#xff0c;已知集装箱 i ( 1 ≤ i ≤ n ) i(1≤i≤…