2013数学建模B题国家一等奖Matlab程序

合集下载

数学建模B题国家一等奖Matlab程序

数学建模B题国家一等奖Matlab程序

附录3:程序源文件1.duqu_image.m文件%数据读取预处理文件%将附件中的图片读取到matlab矩阵中,并保存为image_1,image_2,image_3,image_4,image_5a,image_5b%所有附件均放在文件夹 D:\B 中%%%%%%%%%%%%%%%%%%%%%%%%图片名序列%图像名称序号b = [ones(1,10);0 1 2 3 4 5 6 7 8 9]';image_num= [strcat( num2str(0*b(:,1)),num2str(0*b(:,1)),num2str(b(:,2)) ),strcat( num2str(0*b(:,1)),num2str(b(:,1)),num2str(b(:,2)) ),strcat( num2str(0*b(:,1)),num2str(2*b(:,1)),num2str(b(:,2)) ),strcat( num2str(0*b(:,1)),num2str(3*b(:,1)),num2str(b(:,2)) ),strcat( num2str(0*b(:,1)),num2str(4*b(:,1)),num2str(b(:,2)) ),strcat( num2str(0*b(:,1)),num2str(5*b(:,1)),num2str(b(:,2)) ),strcat( num2str(0*b(:,1)),num2str(6*b(:,1)),num2str(b(:,2)) ),strcat( num2str(0*b(:,1)),num2str(7*b(:,1)),num2str(b(:,2)) ),strcat( num2str(0*b(:,1)),num2str(8*b(:,1)),num2str(b(:,2)) ),strcat( num2str(0*b(:,1)),num2str(9*b(:,1)),num2str(b(:,2)) ),strcat( num2str(b(:,1)),num2str(0*b(:,1)),num2str(b(:,2)) ),strcat( num2str(b(:,1)),num2str(b(:,1)),num2str(b(:,2)) ),strcat( num2str(b(:,1)),num2str(2*b(:,1)),num2str(b(:,2)) ),strcat( num2str(b(:,1)),num2str(3*b(:,1)),num2str(b(:,2)) ),strcat( num2str(b(:,1)),num2str(4*b(:,1)),num2str(b(:,2)) ),strcat( num2str(b(:,1)),num2str(5*b(:,1)),num2str(b(:,2)) ),strcat( num2str(b(:,1)),num2str(6*b(:,1)),num2str(b(:,2)) ),strcat( num2str(b(:,1)),num2str(7*b(:,1)),num2str(b(:,2)) ),strcat( num2str(b(:,1)),num2str(8*b(:,1)),num2str(b(:,2)) ),strcat( num2str(b(:,1)),num2str(9*b(:,1)),num2str(b(:,2)) ),strcat( num2str(2*b(:,1)),num2str(0*b(:,1)),num2str(b(:,2)) ),]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 读取所有附件中的图片%读取附件1中的图像n = 19;image_name = strcat('D:/B/附件1','/',image_num,'.bmp');%拼接图像地址和名字for j = 1:nimage_1(:,:,j) = imread(image_name(j,:));%将图像读入矩阵endsave image_1 image_1;%附件1图像%读取附件2中的图像n = 19;image_name = strcat('D:/B/附件2','/',image_num,'.bmp');%拼接图像地址和名字for j = 1:nimage_2(:,:,j) = imread(image_name(j,:));%将图像读入矩阵endsave image_2 image_2;%附件2图像%读取附件3中的图像n = 209;image_name = strcat('D:/B/附件3','/',image_num,'.bmp');%拼接图像地址和名字for j = 1:nimage_3(:,:,j) = imread(image_name(j,:));%将图像读入矩阵endsave image_3 image_3;%附件3图像%读取附件4中的图像n = 209;image_name = strcat('D:/B/附件4','/',image_num,'.bmp');%拼接图像地址和名字for j = 1:nimage_4(:,:,j) = imread(image_name(j,:));%将图像读入矩阵endsave image_4 image_4;%附件4图像%读取附件5 a 中的图像n = 209;image_name = strcat('D:/B/附件5','/',image_num,'a','.bmp');%拼接图像地址和名字for j = 1:nimage_5a(:,:,j) = imread(image_name(j,:));%将图像读入矩阵endsave image_5a image_5a;%附件5a图像%读取附件5 b 中的图像n = 209;image_name = strcat('D:/B/附件5','/',image_num,'b','.bmp');%拼接图像地址和名字for j = 1:nimage_5b(:,:,j) = imread(image_name(j,:));%将图像读入矩阵endsave image_5b image_5b;%附件5a图像2.f_hang_left_right.m文件function [left_zi_chang right_zi_chang] = f_hang_left_right(image_hang)% 此函数计算一行字左右两端汉字的长度%image_hang表示附件图片中第几行字%image_hang = image_1(106:146,:,1);%取行[row col] = size(image_hang);image_01 = image_hang>=200; %01化图形,0表示汉字,1表示背景image_hang_he = sum(image_01,1);%对列求和%%%%%%%%%%%%%%%%%%%找汉字hanzi_fa_zhi = row;%表示空格kong_ge_chang = 3;% 空格的长度hang_he_01 = image_hang_he == hanzi_fa_zhi;if( hang_he_01(1) == 0 )%本行左边开头为汉字,统计汉字的长度for i =1:col-kong_ge_changif( sum(hang_he_01(i:i+kong_ge_chang-1)) == kong_ge_chang )break;endendleft_zi_chang = i - 1;elseleft_zi_chang = 0;endif(left_zi_chang > 41)left_zi_chang = 0;endif( hang_he_01(col) == 0 )%本行结束为汉字,统计汉字的长度for i =col:-1:kong_ge_changif( sum(hang_he_01(i-kong_ge_chang +1:i)) == kong_ge_chang ) break;endendright_zi_chang = col - i;elseright_zi_chang = 0;endif(right_zi_chang > 41)right_zi_chang = 0;end3.f_pi_pei_du.m文件function [left_zi_chang right_zi_chang] = f_hang_left_right(image_hang) % 此函数计算一行字左右两端汉字的长度%image_hang表示附件图片中第几行字%image_hang = image_1(106:146,:,1);%取行[row col] = size(image_hang);image_01 = image_hang>=200; %01化图形,0表示汉字,1表示背景image_hang_he = sum(image_01,1);%对列求和%%%%%%%%%%%%%%%%%%%找汉字hanzi_fa_zhi = row;%表示空格kong_ge_chang = 3;% 空格的长度hang_he_01 = image_hang_he == hanzi_fa_zhi;if( hang_he_01(1) == 0 )%本行左边开头为汉字,统计汉字的长度for i =1:col-kong_ge_changif( sum(hang_he_01(i:i+kong_ge_chang-1)) == kong_ge_chang ) break;endendleft_zi_chang = i - 1;elseleft_zi_chang = 0;endif(left_zi_chang > 41)left_zi_chang = 0;endif( hang_he_01(col) == 0 )%本行结束为汉字,统计汉字的长度for i =col:-1:kong_ge_changif( sum(hang_he_01(i-kong_ge_chang +1:i)) == kong_ge_chang ) break;endendright_zi_chang = col - i;elseright_zi_chang = 0;endif(right_zi_chang > 41)right_zi_chang = 0;end4.fujian_1_chengxu.m文件%%%%%%%%% 此文件,将附件1中的图片进行拼接% 1.先统计出附件1 所有行字的左右汉字长度% 2.计算匹配度% 3.根据匹配度进行拼接load image_1;%读取附件1数据文件% 人工干预计算下列值ding_kong = 37;% ding_kong 表示顶端空行zi_gao = 41;% zi_gao 表示字的高度zi_kuan = 41;% zi_kuan 表示字的宽度konghang_gao = 26;% konghang_gao 表示空行的高度hang_shu = 27;%附件1 所给文件的汉字总行数% 1.先统计出附件1 所有行字的左右汉字长度fujian_zitu = zeros(hang_shu,2);%附件1中的每一个子图的左右汉字长度fujian_1 = zeros(27,2,19);%附件1中所有图的左右汉字长度for j = 1:19zi_ding = ding_kong;for i = 1:hang_shu[fujian_zitu(i,1) fujian_zitu(i,2)]= f_hang_left_right( image_1( zi_ding+1 : zi_ding +zi_gao ,:,j) );zi_ding = zi_ding + zi_gao + konghang_gao;endfujian_1(:,:,j) = fujian_zitu;endsave fujian_1_zuoyou_zichang fujian_1;%保存字长结果fujian1_pinjie_jieguo = zeros(1,19);%保存拼接结果的矩阵pipeidu = zeros(1,19);%用来保存中间匹配度的向量fujian1_pinjie_jieguo(1) = 9;%人工干预找到的第一个(最左边)的纸条(即,图008.bmp)fa_zhi = 0.8;% 匹配度计算时的阀值,大于此阀值的任务匹配正确,小于此值的认为匹配不正确% 2.计算匹配度%匹配度fujian_1_pipei_du = zeros(19,19);for i= 1:19for j=1:19fujian_1_pipei_du(i,j) = f_pi_pei_du(fujian_1(:,2,i),fujian_1(:,1,j),fa_zhi);endendsave fujian_1_pipei_du fujian_1_pipei_du;;%保存匹配度结果fujian_1_pipei_du_bian = fujian_1_pipei_du;%用于去除已选的纸条% 3.根据匹配度进行拼接fj1_pinjie_jieguo = zeros(1,19);fj1_yong = zeros(1,19);fj1_pinjie_jieguo(1) = 9;fj1_yong(fj1_pinjie_jieguo(1)) = 1;for i = 1:18for j = 1:19;if( fj1_yong(j)==1 )fujian_1_pipei_du_bian(fj1_pinjie_jieguo(i),j) = 0;endend[max_pipei_du fj1_pinjie_jieguo(i+1)] = max(fujian_1_pipei_du_bian(fj1_pinjie_jieguo(i),:));fj1_yong(fj1_pinjie_jieguo(i+1)) = 1;endsave fj1_pinjie_jieguo fj1_pinjie_jieguo;;%保存拼接结果fj1_pinjie_jieguo%%%拼接结果输出到屏幕上%%%%%%%%%%%%fujian_1_jieguo_tu = zeros(1980,19*72);for i = 1:19fujian_1_jieguo_tu(:,(i-1)*72+1:i*72) = image_1(:,:,fj1_pinjie_jieguo(i));endsave fujian_1_jieguo_tu fujian_1_jieguo_tu;imview(fujian_1_jieguo_tu)5.fujian2_pinjie_jieguo.m文件%%%%%%%%% 此文件,将附件2中的图片进行拼接% 1.先统计出附件2 所有纸条的左右边界像素qian,hou% 2.计算匹配度% 3.根据匹配度进行拼接% 1.先统计出附件2 所有纸条的左右边界像素qian,houload image_2;for m=1:19qian(:,m)=image_2(:,1,m);hou(:,m)=image_2(:,72,m);end% 2.计算匹配度%图像0-1化qian_01 = qian>=255;hou_01 = hou>=255;%匹配度fujian2_pipei_du = zeros(19,19);for j= 1:19for i=1:19fujian2_pipei_du(i,j) = sum( qian_01(:,i) == hou_01(:,j) ) / 1980;endendsave fujian_2_pipei_du fujian2_pipei_du;% 3.根据匹配度进行拼接fj2_pinjie_jieguo = zeros(1,19);fj2_pinjie_jieguo(1) = 4;for i = 1:18[max_pipei_du fj2_pinjie_jieguo(i+1)] = max(fujian2_pipei_du(:,fj2_pinjie_jieguo(i))); endsave fj2_pinjie_jieguo fj2_pinjie_jieguo;fj2_pinjie_jieguofujian_2_jieguo_tu = zeros(1980,19*72);for i = 1:19fujian_2_jieguo_tu(:,(i-1)*72+1:i*72) = image_2(:,:,fj2_pinjie_jieguo(i));endsave fujian_2_jieguo_tu fujian_2_jieguo_tu;imview(fujian_2_jieguo_tu)6.fujian_3_fenzu.m 文件文件%% 1.将11*19的纸条,分成11组,即先把属于同一组的图片归组,依据就是“每个纸条的上边界空行数”或者“汉字数”load image_3;for i = 1:209image_hang_he(:,i) = sum(image_3(:,:,i)',1);end%若为空格则标记为1,并统计空格的个数。

2013年全国大学生数学建模竞赛B题全国一等奖论文

2013年全国大学生数学建模竞赛B题全国一等奖论文

碎纸片的拼接复原【摘要】破碎文件的拼接在司法物证复原、历史文献修复以及军事情报获取等领域都有着重要的应用。

本文主要解决碎纸机切割后的碎纸片拼接复原问题。

针对第一问,附件1、2分别为沿纵向切割后的19张中英文碎纸片,本文在考虑破碎纸片携带信息量较大的基础上,利用MATLAB对附件1、2的碎纸片图像分别读入,以数字矩阵的方式进行存储。

利用数字矩阵中包含图像边缘灰度这一特征,本文采用贪心算法的思想,在首先确定原文件左右边界的基础上,以Manhattan距离来度量两两碎纸片边界差异度,利用计算机搜索依次从左往右搜寻最匹配的碎纸片进行横向配对并达成排序目的。

最终,本文在没有进行人工干预,成功地将附件1、2碎纸片分别拼接复原,得到复原图片见附录2.1、2.2,纵切中文及英文结果表分别如下:为先对本文3、第4行及第9Spearman拼接复原1. 对于给定的来自同一页印刷文字文件的碎纸机破碎纸片(仅纵切),建立碎纸片拼接复原模型和算法,并针对附件1、附件2给出的中、英文各一页文件的碎片数据进行拼接复原。

如果复原过程需要人工干预,请写出干预方式及干预的时间节点。

复原结果以图片形式及表格形式表达。

2. 对于碎纸机既纵切又横切的情形,请设计碎纸片拼接复原模型和算法,并针对附件3、附件4给出的中、英文各一页文件的碎片数据进行拼接复原。

如果复原过程需要人工干预,请写出干预方式及干预的时间节点。

复原结果表达要求同上。

3. 上述所给碎片数据均为单面打印文件,从现实情形出发,还可能有双面打印文件的碎纸片拼接复原问题需要解决。

附件5给出的是一页英文印刷文字双面打印文件的碎片数据。

请尝试设计相应的碎纸片拼接复原模型与算法,并就附件5的碎片数据给出拼接复原结果,结果表达要求同上。

二、模型假设1. 假设原题附件给出的破碎纸片图像是完好无损的。

2. 假设原题附件给出的破碎纸片仅包含纯文字内容(中英文),不含表格线等。

3. 假设原题附件给出的破碎纸片在切割时无油墨损失。

2013数学建模B题国家一等奖

2013数学建模B题国家一等奖
4,统计矩阵两端汉字域的长度,方法如下见图 3: ①若 ai1 = 41 ,则记第一幅图第 i 行左端长度为 Z = 0 。 ②若 ai1 ≠ 41 ,从左到右连续三个元素相加,直到其累加 aiz + aiz + 2 + aiz + 3 = 3 为止,
记下此时的 i 值为 z ,记作第 i 行左端长度为 Z = z 。 ③若 ai72 = 1,则记第 i 行右端长度为Y = 0 。
阵,1 ≤ k ≤ 19 。 ③人工干预:根据右对齐的特点找到第一列,第一列为 003,即第 4 幅图。
④用 Qk 矩阵与 H 4 矩阵分别相加,对应两个元素相等的情况和为 2 或 0,统计 2 与 0
的个数之和,命此值为匹配值。选出匹配值最大的与 003 匹配(类似比武招亲)。 再将此图片定为待匹配矩阵,用剩余 17 个矩阵与新的待匹配矩阵相匹配。依次类似
我们授权全国大学生数学建模竞赛组委会,可将我们的论文以任何形式进行公开展示(包 括进行网上公示,在书籍、期刊和其他媒体进行正式或非正式发表等)。
我们参赛选择的题号是(从A/B/C/D中选择一项填写):
B
我们的参赛报名号为(如果赛区设置报名号的话):
所属学校(请填写完整的全名):
ycu
参赛队员 (打印并签名) :1.
6,建立 19 幅图的三维矩 阵 U( Zni , Yni , n ), zni 代表第 n 幅图片的第 i 行的左端长度,
yni 代表第 n 幅图片的第 i 行的
右端长度,将处理后得出来的 所有数据导入此矩阵之中。
7,人工干预:由于汉字 的左对齐特点,很容易找到整篇文章的最左列,即第一列为附件 1 中编号 008 的图片。
3.1.1、附件 1 汉字拼接的模型建立:

研究生数模竞赛B题(2013年)

研究生数模竞赛B题(2013年)
[3]
(1) Saleh 模型 Saleh 模型是根据对行波管功率放大器(traveling wave tube amplifier, TWTA)的输 入输出数据进行统计分析后得到的,TWTA 的 AM-AM 和 AM-PM 失真特性相对来说 都比较明显,并且模型参数较少,参数的提取也比较方便,是目前一种常用的无记忆 功放模型[6]。 假设功放的输入信号为:
-3-
二、 问题假设
1. 2. 3. 4. 5. 6. 不考虑时间、温度、环境等外界因素的影响; 不考虑功放因温度漂移、老化等引起功放特性的变化; 不考虑外部信号或电路自身对该功率放大器的干扰; 不考虑当输入信号、负载和元件自身发生变化时,造成系统的不稳定性的影响; 不考虑功放的特性随时间变化,假设在一定时间内功放的特性都是恒定的; 假设功率放大器的非线性特性是可逆的;
[7] 简单起见,令 A r t 用 r 表示输入信号幅度,则模型的特性函数为 :
Ar
r
Ar 1 Ar 2
r 2 1 r 2
(3)
(4)
式(3)和(4)中, r 为输入信号的包络幅度, A , A , , 为待定参数,本文 通过 Yang[8][9]最新提出的智能优化算法——布谷鸟搜索算法对参数进行寻优,得到待 定参数 1 , 1 , Q , Q 分别为 1 =3.1344, 1 =0.5920, Q =0.0100, Q =10.0000。 (2) 复系数幂级数模型 由于功放的输入输出都为射频实信号,而功放建模与预失真都在基带进行,基带 信号为复信号,需要完成射频实信号到基带复信号的转换。实系数幂级数不能表征功 放的 AM-PM 特性,因此需要复系数幂级数对功放进行建模[10]。射频中,功放的输入 输出特性用 K 阶幂级数可以表示为:

13年数模B题代码

13年数模B题代码

附件1代码:I1=cell(1);I2=cell(1);for i=1:10I1{1,i}=imread(['C:\Users\Administrator\Desktop\all2013\cumcm2013problems\B\附件1\00',num2str(i-1),'.bmp']);endfor i=11:19I1{1,i}=imread(['C:\Users\Administrator\Desktop\all2013\cumcm2013problems\B\附件1\0',num2str(i-1),'.bmp']);endfor temp=1:size(I1,2)for i=1:size(I1{temp},1)for j=1:size(I1{temp},2)if(I1{temp}(i,j)~=255)I2{temp}(i,j)=0;elseI2{temp}(i,j)=1;endendendendstart=0;for i=1:size(I2,2)n=0;for j=1:size(I2{i},1)if(I2{i}(j,1)==1)n = n + 1;endendif(n==size(I2{i},1))start=i;break;endendstart1=start;f=zeros(size(I2,2),1);f(start)=1;ornum=1;order(ornum)=start1;for t=1:size(I2,2)-1for i=1:size(I2,2)if(f(i)~=1)temp(i)=0;for j=1:size(I2{start},1)temp(i)=temp(i)+abs(I2{start}(j, size(I2{start},2)) - I2{i}(j,1));endelsetemp(i)=1000000;endend[tt order(ornum)]=min(temp);f(order(ornum))=1;start=order(ornum);ornum=ornum+1;endorderI1=cell(1);for i=0:18I1{1,i+1}=imread(sprintf('C:\\Documents and Settings\\Administrator\\桌面\\all2013\\cumcm2013problems\\B\\附件1\\%03d.bmp',i));endA=[]for i=1:19A=[A,I1{seq(i)}];endimshow(A)附件2:I1=cell(1);I2=cell(1);for i=1:10I1{1,i}=imread([' C:\Users\Administrator\Desktop\all2013\cumcm2013problems\B\附件2\00',num2str(i-1),'.bmp']);endfor i=11:19I1{1,i}=imread([' C:\Users\Administrator\Desktop\all2013\cumcm2013problems\B\附件2\0',num2str(i-1),'.bmp']);endfor temp=1:size(I1,2)for i=1:size(I1{temp},1)for j=1:size(I1{temp},2)if(I1{temp}(i,j)~=255)I2{temp}(i,j)=0;elseI2{temp}(i,j)=1;endendendendstart=0;for i=1:size(I2,2)n=0;for j=1:size(I2{i},1)if(I2{i}(j,1)==1)n = n + 1;endendif(n==size(I2{i},1))start=i;break;endendstart1=startf=zeros(size(I2,2),1);f(start)=1;ornum=1;order(ornum)=start1;for t=1:size(I2,2)-1for i=1:size(I2,2)if(f(i)~=1)temp(i)=0;for j=1:size(I2{start},1)temp(i)=temp(i)+abs(I2{start}(j, size(I2{start},2)) - I2{i}(j,1));endelsetemp(i)=1000000;endend[t order(ornum)]=min(temp);f(order(ornum))=1;start=order(ornum);ornum=ornum+1;endorderI1=cell(1);for i=0:18I1{1,i+1}=imread(sprintf('C:\\Documents and Settings\\Administrator\\桌面\\all2013\\cumcm2013problems\\B\\附件2\\%03d.bmp',i));endA=[]for i=1:19A=[A,I1{seq(i)}];endimshow(A)附件3:I1=cell(1);I2=cell(1);for i=1:10I1{1,i}=imread([' C:\Users\Administrator\Desktop\all2013\cumcm2013problems\B\附件3\00',num2str(i-1),'.bmp']);endfor i=11:100I1{1,i}=imread([' C:\Users\Administrator\Desktop\all2013\cumcm2013problems\B\附件3\0',num2str(i-1),'.bmp']);endfor i=101:209I1{1,i}=imread([' C:\Users\Administrator\Desktop\all2013\cumcm2013problems\B\附件3\',num2str(i-1),'.bmp']);endfor temp=1:size(I1,2)for i=1:size(I1{temp},1)for j=1:size(I1{temp},2)if(I1{temp}(i,j)<225)I2{temp}(i,j)=0;elseI2{temp}(i,j)=1;endendendendstart=0;for i=1:size(I2,2)temp=zeros(size(I2{i},1),1);for k=1:size(I2{i},1)for j=1:size(I2{i},2)if(I2{i}(k,j)==0)temp(k)=temp(k)+1;endendendwh(i)=0;for k=1:size(I2{i},1)if(temp(k) >= 1)break;elsewh(i)=wh(i)+1;endendendttemp=[];for i=1:size(wh,2)if(wh(i)>35&&wh(i)<50)ttemp=[ttemp,i];endendttempI3=cell(1);for i=1:19for k=1:size(I2{i},1)for j=1:size(I2{i},2)I3{i}(k,j)=I2{ttemp(i)}(k,j);endendendstart=0;for i=1:size(I3,2)n=0;for j=1:size(I3{i},1)if(I3{i}(j,1)==1)n = n + 1;endendif(n==size(I3{i},1))start=i;break;endendtemp=zeros(size(I3,2),1);flag=zeros(size(I3,2),1);flag(start)=1;ornum=1;order(ornum)=start;for t=1:size(I3,2)-1for i=1:size(I3,2)if(flag(i)~=1)temp(i)=0;for j=1:size(I3{start},1)temp(i)=temp(i)+abs(I3{start}(j, size(I3{start},2)) - I3{i}(j,1));endelsetemp(i)=1000000;endendornum=ornum+1;[tt order(ornum)]=min(temp);flag(order(ornum))=1;start=order(ornum);endfor i=1:19ab(i)=ttemp(order(i));endabI1=cell(1);I2=cell(1);for i=1:10I1{1,i}=imread([' C:\Users\Administrator\Desktop\all2013\cumcm2013problems\B\附件3\00',num2str(i-1),'.bmp']);endfor i=11:100I1{1,i}=imread([' C:\Users\Administrator\Desktop\all2013\cumcm2013problems\B\附件3\0',num2str(i-1),'.bmp']);endfor i=101:209I1{1,i}=imread([' C:\Users\Administrator\Desktop\all2013\cumcm2013problems\B\附件3\',num2str(i-1),'.bmp']);endfor temp=1:size(I1,2)for i=1:size(I1{temp},1)for j=1:size(I1{temp},2)if(I1{temp}(i,j)<225)I2{temp}(i,j)=0;elseI2{temp}(i,j)=1;endendendendstart=0;for i=1:size(I2,2)temp=zeros(size(I2{i},2),1);for k=1:size(I2{i},1)for j=1:size(I2{i},2)if(I2{i}(k,j)==0)temp(j)=temp(j)+1;endendendwh(i)=0;for k=1:size(I2{i},2)if(temp(k) >= 1)break;elsewh(i)=wh(i)+1;endendendttemp=[];for i=1:size(wh,2)if(wh(i)>10)ttemp=[ttemp,i];endendttempimgs=cell(1);imgst=cell(1);for i=1:19imgst{i}=I1{ab(i)};endA=[7 20 21 37 46 53 64 68 69 70 73 79 80 84 86 97 100 117 127 132 163 164 171 178 203];for i=1:length(A)imgs{i}=I1{A(i)};endleftimg=I1{62};temp=zeros(length(A),1);f=zeros(length(A),1);order=[];order(1)=62; num=1;for num=1:18for i=1:length(A)if(f(i)~=1)temp(i)=sum(abs(double(leftimg(:,size(leftimg,2))) - double(I1{A(i)}(:,1))));temp(i)=temp(i)+sum(abs(double(imgst{num+1}(size(imgst{num+1},1),:)) - double(I1{A(i)}(1,:))));elsetemp(i)=99999;endend[tt order(length(order)+1)]=min(temp);f(order(length(order)))=1;leftimg=I1{A(order(length(order)))};endC1=[I1{62}];USE(62)=1;for i=2:19C1=[C1,I1{A(order(i))}];A(order(i))USE(A(order(i)))=1;endC=[C;C1];imshow(C)imgst=cell(1);imgst{1}=I1{62};for i=2:19imgst{i}=I1{A(order(i))};endA=[2 13 19 24 27 31 32 40 42 51 52 63 74 77 83 87 88 101 108 116 121 129 143 148 160 161 170 177 180 192 196 204];for i=1:length(A)imgs{i}=I1{A(i)};endleftimg=I1{169};temp=zeros(length(A),1);f=zeros(length(A),1);order=[];order(1)=169; num=1;for num=1:18for i=1:length(A)if(f(i)~=1)temp(i)=sum(abs(double(leftimg(:,size(leftimg,2))) - double(I1{A(i)}(:,1))));temp(i)=temp(i)+sum(abs(double(imgst{num+1}(size(imgst{num+1},1),:)) - double(I1{A(i)}(1,:))));elsetemp(i)=99999;endend[tt1 j1]=min(temp);%temp(j1)=99999;order(length(order)+1)=j1;f(order(length(order)))=1;leftimg=I1{A(order(length(order)))};endorderorder(19)=3;order(18)=17;C2=[I1{169}];USE(169)=1;for i=2:19C2=[C2,I1{A(order(i))}];A(order(i))USE(A(order(i)))=1;endC=[C;C2];imshow(C)leftimg=I1{39};A=[]start=39;pra=2;for i=1:209if USE(i)==0if (fs(i,1)==fs(start,1) & abs(fs(i,2)-fs(start,2))<=pra || fs2(i,1)==fs2(start,1) & abs(fs2(i,2)-fs2(start,2))<=pra)A=[A i];endendendtemp=zeros(length(A),1);f=zeros(length(A),1);order=[];order(1)=39; num=1;for num=1:18for i=1:length(A)if(f(i)~=1)temp(i)=sum(abs(double(leftimg(:,size(leftimg,2))) - double(I1{A(i)}(:,1))));temp(i)=temp(i)+sum(abs(double(imgst{num+1}(size(imgst{num+1},1),:)) - double(I1{A(i)}(1,:))));elsetemp(i)=99999;endend[tt1 j1]=min(temp);%temp(j1)=99999;order(length(order)+1)=j1;f(order(length(order)))=1;leftimg=I1{A(order(length(order)))};endorderC3=[I1{39}];USE(39)=1;for i=2:19C3=[C3,I1{A(order(i))}];A(order(i))USE(A(order(i)))=1;endC=[C;C3];imshow(C)leftimg=I1{15};A=[]start=15;pra=2;for i=1:209if USE(i)==0if (fs(i,1)==fs(start,1) & abs(fs(i,2)-fs(start,2))<=pra || fs2(i,1)==fs2(start,1) & abs(fs2(i,2)-fs2(start,2))<=pra) & i~=177A=[A i];endendendtemp=zeros(length(A),1);f=zeros(length(A),1);order=[];order(1)=15; num=1;start=15;for num=1:18for i=1:length(A)if(f(i)~=1)if 0==fs(start,1) & 0==fs(A(i),1) & fs(A(i),2)>fs(start,2)+2temp(i)=99999;elsetemp(i)=sum(abs(double(leftimg(:,size(leftimg,2))) - double(I1{A(i)}(:,1))));temp(i)=temp(i)+sum(abs(double(imgst{num+1}(size(imgst{num+1},1),:)) - double(I1{A(i)}(1,:))));endelsetemp(i)=99999;endend[tt1 j1]=min(temp);%temp(j1)=99999;order(length(order)+1)=j1;start=A(j1);f(order(length(order)))=1;leftimg=I1{A(order(length(order)))};endorderC4=[I1{15}];USE(15)=1;for i=2:19C4=[C4,I1{A(order(i))}];A(order(i))USE(A(order(i)))=1;endC=[C;C4];imshow(C)imgst=cell(1);%imgst{1}=I1{169};for i=1:19imgst{i}=I1{order(i)+1};endleftimg=I1{95};A=[];%USE(95)=1;start=95;pra=2;for i=1:209if USE(i)==0if (fs(i,1)==fs(start,1) & abs(fs(i,2)-fs(start,2))<=pra || fs2(i,1)==fs2(start,1) & abs(fs2(i,2)-fs2(start,2))<=pra)A=[A i];endendendtemp=zeros(length(A),1);f=zeros(length(A),1);order=[];order(1)=95; num=1;for num=1:18for i=1:length(A)if(f(i)~=1)temp(i)=sum(abs(double(leftimg(:,size(leftimg,2))) - double(I1{A(i)}(:,1))));temp(i)=temp(i)+sum(abs(double(imgst{num+1}(size(imgst{num+1},1),:)) - double(I1{A(i)}(1,:))));elsetemp(i)=99999;endend[tt1 j1]=min(temp);%temp(j1)=99999;order(length(order)+1)=j1;f(order(length(order)))=1;leftimg=I1{A(order(length(order)))};endorderC5=[I1{95}];USE(95)=1;for i=2:19if(i~=6)C5=[C5,I1{A(order(i))}];A(order(i))USE(A(order(i)))=1;elseC5=[C5,I1{48}];USE(48)=1;48endendC=[C;C5];imshow(C)imgst=cell(1);imgst{1}=I1{95};for i=2:19%order(i)%A(order(i))imgst{i}=I1{A(order(i))};endimgst{6}=I1{48};leftimg=I1{126};A=[];start=126;pra=2;for i=1:209if USE(i)==0if (fs(i,1)==fs(start,1) & abs(fs(i,2)-fs(start,2))<=pra || fs2(i,1)==fs2(start,1) & abs(fs2(i,2)-fs2(start,2))<=pra)A=[A i];endendendtemp=zeros(length(A),1);f=zeros(length(A),1);order=[];order(1)=126; num=1;for num=1:18for i=1:length(A)if(f(i)~=1)temp(i)=sum(abs(double(leftimg(:,size(leftimg,2))) - double(I1{A(i)}(:,1))));temp(i)=temp(i)+sum(abs(double(imgst{num+1}(size(imgst{num+1},1),:)) - double(I1{A(i)}(1,:))));elsetemp(i)=99999;endend[tt1 j1]=min(temp);%temp(j1)=99999;order(length(order)+1)=j1;start=A(j1);f(order(length(order)))=1;leftimg=I1{A(order(length(order)))};endorderC6=[I1{126}];USE(126)=1;for i=2:19C6=[C6,I1{A(order(i))}];A(order(i))USE(A(order(i)))=1;endC=[C;C6];imshow(C)imgst=cell(1);%imgst{1}=I1{169};for i=1:19imgst{i}=I1{order(i)+1};endleftimg=I1{30};A=[];%USE(95)=1;start=30;pra=5;for i=1:209if USE(i)==0if (fs(i,1)==fs(start,1) & abs(fs(i,2)-fs(start,2))<=pra || fs2(i,1)==fs2(start,1) & abs(fs2(i,2)-fs2(start,2))<=pra)A=[A i];endendendtemp=zeros(length(A),1);f=zeros(length(A),1);order=[];order(1)=30; num=1;for num=1:18for i=1:length(A)if(f(i)~=1)temp(i)=sum(abs(double(leftimg(:,size(leftimg,2))) - double(I1{A(i)}(:,1))));temp(i)=temp(i)+sum(abs(double(imgst{num+1}(size(imgst{num+1},1),:)) - double(I1{A(i)}(1,:))));elsetemp(i)=99999;endend[tt1 j1]=min(temp);%temp(j1)=99999;order(length(order)+1)=j1;f(order(length(order)))=1;leftimg=I1{A(order(length(order)))};endorderC7=[I1{30}];USE(30)=1;for i=2:19C7=[C7,I1{A(order(i))}];A(order(i))USE(A(order(i)))=1;endC=[C;C7];imshow(C)imgst=cell(1);imgst{1}=I1{30};for i=2:19imgst{i}=I1{order(i)};endleftimg=I1{209};A=[];USE(8)=1;USE(209)=1;start=8;pra=3;for i=1:209if USE(i)==0if (fs(i,1)==fs(start,1) & abs(fs(i,2)-fs(start,2))<=pra || fs2(i,1)==fs2(start,1) & abs(fs2(i,2)-fs2(start,2))<=pra)A=[A i];endendendtemp=zeros(length(A),1);f=zeros(length(A),1);order=[];order(1)=8; order(2)=209; num=1;for num=1:17for i=1:length(A)if(f(i)~=1)temp(i)=sum(abs(double(leftimg(:,size(leftimg,2))) - double(I1{A(i)}(:,1))));temp(i)=temp(i)+sum(abs(double(imgst{num+1}(size(imgst{num+1},1),:)) - double(I1{A(i)}(1,:))));elsetemp(i)=99999;endend[tt1 j1]=min(temp);%temp(j1)=99999;order(length(order)+1)=j1;f(order(length(order)))=1;leftimg=I1{A(order(length(order)))};endorderC8=[I1{8},I1{209}];USE(8)=1;for i=3:19C8=[C8,I1{A(order(i))}];A(order(i))USE(A(order(i)))=1;endC=[C;C8];imshow(C)f=zeros(209,1);for i=1:19f(ab(i))=1;endfor i=1:209if(f(i)==0)cat=[cat,i];endendI4;leftI=I1{62};start=7;temp=zeros(size(cat,2),1);f=zeros(size(cat,2),1);f(start)=1;ornum=1;order(ornum)=start; ttt=2;for t=1:size(cat,2)-1for i=1:size(cat,2)if(f(i)~=1)temp(i)=0;for j=1:size(leftI,1)temp(i)=temp(i)+abs(leftI(j, size(leftI,2)) - double(I1{cat(i)}(j,1)));endelsetemp(i)=99999;endendornum=ornum+1;[tt order(ornum)]=min(temp);f(order(ornum))=1;leftI=I1{order(ornum)}; ttt=ttt+1;if ttt>19 break; endendfor i=1:19cat2(i)=cat(order(i));endC=[];for i=1:19C=[C,I1{cat2(i)}];endimshow(C)附件4:function [re,high] = bottom(img) t=[];high=0;for i=1:size(img,1)t=[t,sum(img(i,:))];endi=1;while t(i)~=0 & i < length(t) i=i+1;endwhile t(i)==0 & i < length(t) i=i+1;endi1=i;while t(i)~=0 & i < length(t) i=i+1;endi2=i;while i2-i1 <= 20 & i < length(t)while t(i)==0 & i < length(t) i=i+1;endi1=i;while t(i)~=0 & i < length(t) i=i+1;endi2=i;endif i >= length(t)re=0; return;end %出错if abs(i2-i1-25)<=2re=i2; high=i2-i1; return;end %标准字母if abs(i2-i1-36)<=1re=i2; high=i2-i1; return;end %大写字母step=25;for k=1:size(img,2)-stepa=[];for i=i1:i2a=[a,sum(img(i,k:k+step))];endi=1; while a(i)==0 & i < length(a) i=i+1;endii1=i;i=length(a); while a(i)==0 & i > 0 i=i-1;endii2=i;if abs(ii2-ii1-25)<=2re=i1+ii2-1; high=ii2-ii1; return;endendre=0;endp=[cats{4},cats{1},cats{7},cats{10},cats{11}];left=133;p1=[172 43 67 206 11 158 75 146 84 135 56 19 57 36 17 10 184 153 45 20 195 94 142 89 122 127 106 156 115 177 183 152 23 58 203 72 166 83];p1=[p1,[82 78 129 201 132 53 126 141 194 88 90 49 73 13 178 125 1 103 116 160 140 2 130 64 139 154 54 39 124 121 176 86 51 161 188 98 204 32]];Us=zeros(209,1);Us(left)=1;for i=1:length(p1)Us(p1(i))=1;endimgs=cell(1);imgst=cell(1);for i=1:length(p)imgs{i}=img{p(i)};endp=[cats{8},cats{1},cats{7},cats{10},cats{11}];left=20;imgs=cell(1);imgst=cell(1);Us=zeros(209,1);for i=1:length(p)imgs{i}=img{p(i)};endleftimg=img{left};temp=zeros(length(p),1);flag=zeros(length(p),1);order=[];order(1)=left; num=1;for num=1:18for i=1:length(p)if(flag(i)~=1&Us(p(i))==0)temp(i)=sum(abs(double(leftimg(:,size(leftimg,2))) - double(img{p(i)}(:,1))));%temp(i)=temp(i)+sum(abs(double(imgst{num+1}(size(imgst{num+1},1),:)) - double(I1{A(i)}(1,:))));elsetemp(i)=99999;endendwhile 1[tt ttt]=min(temp);C1=[img{left}];C=[];for i=2:length(order)C1=[C1,img{p(order(i))}];endC1=[C1,img{p(ttt)}];C=[C;C1];imshow(C)reply = input('Ready? Y/N [Y]: ', 's');if isempty(reply) break;else temp(ttt)=99999;endendUs(ttt)=1;order(length(order)+1)=ttt;flag(order(length(order)))=1;leftimg=img{p(order(length(order)))};endC1=[img{left}];C=[];re=[left];for i=2:19C1=[C1,img{p(order(i))}]; re=[re,p(order(i))];endreC=[C;C1];imshow(C)leftimg=img{left};temp=zeros(length(p),1);flag=zeros(length(p),1);order=[];order(1)=left; num=1;for num=1:18for i=1:length(p)if(flag(i)~=1 && Us(p(i))==0)temp(i)=sum(abs(double(leftimg(:,size(leftimg,2))) - double(img{p(i)}(:,1))));%temp(i)=temp(i)+sum(abs(double(imgst{num+1}(size(imgst{num+1},1),:)) - double(I1{A(i)}(1,:))));elsetemp(i)=99999;endendwhile 1[tt ttt]=min(temp);C1=[img{left}];C=[];for i=2:length(order)C1=[C1,img{p(order(i))}];endC1=[C1,img{p(ttt)}];C=[C;C1];imshow(C)reply = input('Ready? Y/N [Y]: ', 's');if isempty(reply) break;else temp(ttt)=99999;endendUs(ttt)=1;order(length(order)+1)=ttt;flag(order(length(order)))=1;leftimg=img{p(order(length(order)))};endC1=[img{left}];C=[];re=[left];for i=2:19C1=[C1,img{p(order(i))}]; re=[re,p(order(i))];Us(p(order(i)))=1;endreC=[C;C1];imshow(C)p=[1:209];left=1;p1=[20 195 94 142 89 122 127 106 156 115 177 183 152 23 58 203 72 166 83];%1p1=[p1,[172 43 67 206 11 158 75 146 84 135 56 19 57 36 17 10 184 153 45]];%2p1=[p1,[82 78 129 201 132 53 126 141 194 88 90 49 73 13 178 125 1 103 116]];%3p1=[p1,[160 140 2 130 64 139 154 54 39 124 121 176 86 51 161 188 98 204 32]];%4p1=[p1,[133 182 96 70 168 164 167 189 112 145 207 4 131 35 14 111 26 28 179]];%5p1=[p1,[87 52 108 30 41 159 187 99 25 118 151 660 59 93 31 38 47 128]];%6p1=[p1,[209 22 8 50 62 120 34 143 169 63 170 55 193 134 119 190 163 198 113]];%7p1=[p1,[202 149 171 197 199 95 114 165 79 104 92 81 102 27 101 7 18 29 147]];%8p1=[p1,[192 76 12 155 191 185 3 105 181 65 107 5 150 33 205 66 40 68 148]];%9p1=[p1,[71 85 61 15 69 175 138 196 9 48 173 157 97 24 100 123 91 186 110]];%10Us=zeros(209,1);Us(left)=1;for i=1:length(p1)Us(p1(i))=1;endimgs=cell(1);imgst=cell(1);for i=1:length(p)imgs{i}=img{p(i)};endleftimg=img{left};temp=zeros(length(p),1);flag=zeros(length(p),1);order=[];order(1)=left; num=1;for num=1:18for i=1:length(p)if(flag(i)~=1 && Us(p(i))==0)temp(i)=sum(abs(double(leftimg(:,size(leftimg,2))) - double(img{p(i)}(:,1))));%temp(i)=temp(i)+sum(abs(double(imgst{num+1}(size(imgst{num+1},1),:)) - double(I1{A(i)}(1,:))));elsetemp(i)=99999;endendwhile 1[tt ttt]=min(temp);C1=[img{left}];C=[];for i=2:length(order)C1=[C1,img{p(order(i))}];endC1=[C1,img{p(ttt)}];C=[C;C1];imshow(C)reply = input('Ready? Y/N [Y]: ', 's');if isempty(reply) break;else temp(ttt)=99999;endendUs(ttt)=1;order(length(order)+1)=ttt;flag(order(length(order)))=1;leftimg=img{p(order(length(order)))};endC1=[img{left}];C=[];re=[left];for i=2:19C1=[C1,img{p(order(i))}]; re=[re,p(order(i))];Us(p(order(i)))=1;endreC=[C;C1];imshow(C)img=cell(1);img2=cell(1);for i=0:208img{1,i+1}=imread(sprintf('C:\\Documents and Settings\\Administrator\\桌面\\all2013\\cumcm2013problems\\B\\附件4\\%03d.bmp',i));endfor i=1:209img2{1,i}=double(img{1,i});endd=[];for j=1:11C=[]for i=1:19C=[C,img{aaa(j,i)+1}];endd=[d;C];endimshow(d)附件5:bs=zeros(209,1);f=zeros(209,1);for i=1:209bs(i)=bottom(img2{i});endcats=cell(1);cats{1}=[28 64 118 136 16 97 101 102 108 121 141 148 191 203];n=1;for i=1:length(cats{1})f(cats{1}(i))=1;endi=1;while i<=209while i<=209 & f(i)==1 i=i+1;endif i>209 break;endn=n+1;cats{n}=[i]; in=bs(i); f(i)=1;for j=1:209if f(j)==0if abs(bs(j)-in)<=3 cats{n}=[cats{n},j];f(j)=1;elseif abs(abs(bs(j)-in)-63)<=3 cats{n}=[cats{n},j];f(j)=1;elseif abs(abs(bs(j)-in)-126)<=3 cats{n}=[cats{n},j];f(j)=1;endendendi=i+1;endfor i=1:nfor j=1:length(cats{i})r=sprintf('d:\\a\\%da.bmp',cats{i}(j));w=sprintf('d:\\a\\新建文件夹(%d)\\%da.bmp',i,cats{i}(j));imwrite(imread(r),w);endendcatsstart=0;for i=1:size(img2,2)temp=zeros(size(img2{i},2),1);for k=1:size(img2{i},1)for j=1:size(img2{i},2)if(img2{i}(k,j)==1)temp(j)=temp(j)+1;endendendwh(i)=0;for k=1:size(img2{i},2)if(temp(k) >= 1)break;elsewh(i)=wh(i)+1;endendendttemp=[];for i=1:size(wh,2)if(wh(i)>=2)ttemp=[ttemp,i];endendttemp。

2013全国数学建模竞赛B题优秀论文.

2013全国数学建模竞赛B题优秀论文.

基于最小二乘法的碎纸片拼接复原数学模型摘要首先对图片进行灰度化处理,然后转化为0-1二值矩阵,利用矩阵行(列)偏差函数,建立了基于最小二乘法的碎纸片拼接数学模型,并利用模型对图片进行拼接复原。

针对问题一,当两个数字矩阵列向量的偏差函数最小时,对应两张图片可以左右拼接。

经计算,得到附件1的拼接结果为:08,14,12,15,03,10,02,16,01,04,05,09,13,18,11,07,17,00,06。

附件2的拼接结果为:03,06,02,07,15,18,11,00,05,01,09,13,10,08,12,14,17,16,04。

针对问题二,首先根据每张纸片内容的不同特性,对图片进行聚类分析,将209张图片分为11类;对于每一类图片,按照问题一的模型与算法,即列偏差函数最小则进行左右拼接,对于没有拼接到组合里的碎纸片进行人工干预,我们得到了11组碎纸片拼接而成的图片;对于拼接好的11张图片,按照问题一的模型与算法,即行偏差函数最小则进行上下拼接,对于没有拼接到组合里的碎纸片进行人工干预。

我们最终经计算,附件3的拼接结果见表9,附件4的拼接结果见表10。

针对问题三,由于图片区分正反两面,在问题二的基础上,增加图片从下到上的裁截距信息,然后进行两次聚类,从而将所有图片进行分类,利用计算机自动拼接与人工干预相结合,对所有图片进行拼接复原。

经计算,附件5的拼接结果见表14和表15该模型的优点是将图片分为具体的几类,大大的减少了工作量,缺点是针对英文文章的误差比较大。

关键字:灰度处理,图像二值化,最小二乘法,聚类分析,碎纸片拼接一、问题重述碎纸片的拼接复原技术在司法鉴定、历史文献修复与研究、军事情报获取以及故障分析等领域都有着广泛的应用。

近年来,随着德国“斯塔西”文件的恢复工程的公布,碎纸文件复原技术的研究引起了人们的广泛关注。

传统上,拼接复原工作需由人工完成,准确率较高,但效率很低。

特别是当碎片数量巨大,人工拼接很难在短时间内完成任务。

数学建模国赛2013年b题

数学建模国赛2013年b题

数学建模国赛2013年b题(最新版)目录一、数学建模国赛 2013 年 b 题概述二、题目背景及要求三、解题思路与方法四、具体解题过程五、总结与展望正文【一、数学建模国赛 2013 年 b 题概述】数学建模国赛是一项面向全国大学生的竞技活动,旨在通过对现实问题进行抽象、建模和求解,培养学生的创新意识、团队协作精神和实际问题解决能力。

2013 年 b 题为该年度竞赛中的一道题目,具有一定的代表性和难度,本文将对此题进行分析和解答。

【二、题目背景及要求】2013 年 b 题的题目背景是关于某城市公交车站的乘客候车问题。

题目要求参赛选手建立一个数学模型,描述乘客的候车时间、乘客数量以及公交车的发车间隔等要素之间的关系,并通过模型求解在满足乘客舒适度的前提下,如何调整公交车的发车间隔,使得乘客的候车时间最短。

【三、解题思路与方法】针对这道题目,我们可以采用以下思路和方法:1.根据题目描述,建立乘客候车时间的数学模型。

我们可以将乘客的候车时间看作一个随机变量,其期望值表示乘客平均候车时间。

2.建立乘客数量与公交车发车间隔的关系。

根据题目描述,当公交车站内乘客数量超过一定阈值时,公交车会提前发车。

因此,我们可以将乘客数量作为一个影响发车间隔的因素。

3.利用数学方法求解最优的发车间隔。

根据乘客候车时间的数学模型和乘客数量与公交车发车间隔的关系,我们可以建立一个优化问题,求解在最小化乘客平均候车时间的前提下,公交车的最佳发车间隔。

【四、具体解题过程】具体解题过程如下:1.根据题目描述,建立乘客候车时间的数学模型。

假设乘客到达公交车站的间隔时间为{λ_i},每个乘客的候车时间为{t_i},则乘客平均候车时间为 E(t) = ∑(t_i * λ_i)。

2.建立乘客数量与公交车发车间隔的关系。

假设公交车发车间隔为Δt,当乘客数量超过阈值 K 时,公交车提前发车。

因此,我们可以得到以下关系式:E(t) = ∫(λ_i * min(t_i, Δt)) dλ_i + K * ∫(min(t_i, Δt - τ)) dλ_i,其中τ表示公交车提前发车的时间。

2013数模国赛B题(1)matlab源代码汇总

2013数模国赛B题(1)matlab源代码汇总

function p=start(p=cell(19,1; %%生成一个元胞数组。

cell 是matlab 中的一种数据类型,用大括号定义,括号里可以是任意类型的数据或矩阵。

fori=1:19ifi<=10imageName=strcat('00',num2str(i-1,'.bmp'; %strcat是连接字符串的函数连接字符串的函数 % num2str 是将数值转换成字符串的函数, 由于strcat 只能连接字符串,故此处需将(i-1)转换为字符串elseimageName=strcat('0',num2str(i-1,'.bmp';end %%将图片的文件名用同一变量imageName 表示,以便下一步的读取图片数据。

p{i,1}=imread(imageName; %%读取读取图片文件中的数据。

此题为图片的灰度值。

endsump=[];answer=[];fori=1:19answer(i=i;endfori=1:19sump(i=(sum(p{i}(:,1; %%将每一张图片所得数据的第一列的所有数加起来endA=find(sump==max(sump; %最大者即为左边第一张图片C=answer(A;answer(A=1;answer(1=C; %将answer(A的值与answer(1的值互换 B=p{A};p{A}=p{1};p{1}=B; %将p{A}的值与p{1}互换fori=2:19sump=[];for j=i:19a=p{i-1}(:,72;b=p{j}(:,1;s=abs(a-b;sump(j=sum(s; %求每张图片与前一张的吻合系数for k=1:(i-1sump(k=9999999; %因为find 函数是对每一个元素进行比较,因而此处必须对其他位置的元素赋值。

又因为其他元素与所求结果无关,为不影响结果,其值应大于1980*255*2endendA=find(sump==min(sump; %找出吻合系数最小的一个,即为下一张图片C=answer(A;answer(A=answer(i;answer(i=C; % %将answer(A的值与answer(i的值互换B=p{A};p{A}=p{i};p{i}=B; %% %将p{A}的值与p{i}互换endanswer-1%%输出answer-1的值,即为所求的图片编号的顺序 q=[p{1}];fori=2:19q=[q,p{i}];%%获得由最后所得按顺序排列的图片所组成的数组endimshow(q %%将所得的图像显示出来。

2013全国大学生数学建模竞赛B题

2013全国大学生数学建模竞赛B题

将008代表的矩阵C8的第二列元素与其它矩 阵的第一列元素进行两两匹配。记录元素相 同的个数,个数除以1980为C8矩阵第二列对 其它矩阵第一列的边缘匹配度,记为:
比较这18个数据,最大的即为与008匹配的 碎纸片。然后以所找到的碎纸片的第二列开 始,求出它与其它矩阵第一列的边缘匹配度, 找出最大的,以此类推把19张碎纸片拼接完 成。
三.问题2的分析
英文碎纸片的分析 通过观察可以发现英文字母的主要的 部分拥有同一上界和同一下界,例如:
将图片中每一行中黑色像素数少于13的及 字母的次要部分转变为二值化矩阵中的0, 将每一行中黑色像素大于等于13的及字母 的主要部分转化为二值化矩阵中的1,这样 得到的新的二值化矩阵 。例如图像转变为 如下图的方式:
二.问题1的分析
步骤一:使用matlab中的imread函数 可以做出图片的灰度矩阵 ,读取每 张图片文件的数据,其目的是将附件 中给的 bmp 格式的碎纸片图以灰度 值矩阵的形式存储。再将灰度值矩阵 转化为 0-1 矩阵,来得到模型的数 据基础;
由于该像素图片转换后为
的矩阵,ቤተ መጻሕፍቲ ባይዱ
论文中无法放置,所以仅简单举例说明:
以纸片000与001为例,匹配方式可能为:
将①②的边缘匹配度相加得到边缘匹配度 之和,将③④的边缘匹配度相加得边缘匹 配度之和,两者的和做出比较。若仅有一 个大于等于1.9,则计算机输出该匹配度, 人工判断是否碎纸片是否匹配;若两者均 大于等于1.9,计算机把两个匹配度之和输 出,人工选择判断碎纸片应是否匹配与如 何匹配;若两者均小于1.9,则计算输出最 大者,人工判断碎纸片是否匹配。这样可 以得到一些在同一横行的碎纸片的拼接。
总体思路
三步走:分行,行内排序,行间排序

2013年全国数学建模B题省一等奖

2013年全国数学建模B题省一等奖

承诺书我们仔细阅读了《全国大学生数学建模竞赛章程》和《全国大学生数学建模竞赛参赛规则》(以下简称为“竞赛章程和参赛规则”,可从全国大学生数学建模竞赛网站下载)。

我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。

我们知道,抄袭别人的成果是违反竞赛章程和参赛规则的,如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。

我们郑重承诺,严格遵守竞赛章程和参赛规则,以保证竞赛的公正、公平性。

如有违反竞赛章程和参赛规则的行为,我们将受到严肃处理。

我们授权全国大学生数学建模竞赛组委会,可将我们的论文以任何形式进行公开展示(包括进行网上公示,在书籍、期刊和其他媒体进行正式或非正式发表等)。

我们参赛选择的题号是(从A/B/C/D中选择一项填写) B我们的参赛报名号为(如果赛区设置报名号的话):024B03所属学校(请填写完整的全名):山东科技大学参赛队员(打印并签名) :1. 张鑫2. 吕彦全3. 孙红华指导教师或指导教师组负责人(打印并签名):赵文才(论文纸质版与电子版中的以上信息必须一致,只是电子版中无需签名。

以上内容请仔细核对,提交后将不再允许做任何修改。

如填写错误,论文可能被取消评奖资格。

)日期: 2013 年 9 月 16 日赛区评阅编号(由赛区组委会评阅前进行编号):编号专用页赛区评阅编号(由赛区组委会评阅前进行编号):全国统一编号(由赛区组委会送交全国前编号):全国评阅编号(由全国组委会评阅前进行编号):基于最小二乘法的碎纸片拼接复原数学模型摘要首先对图片进行灰度化处理,然后转化为0-1二值矩阵,利用矩阵行(列)偏差函数,建立了基于最小二乘法的碎纸片拼接数学模型,并利用模型对图片进行拼接复原。

针对问题一,当两个数字矩阵列向量的偏差函数最小时,对应两张图片可以左右拼接。

基于MATLAB的古塔变形情况数学模型(2013年全国大学生数学建模大赛)

基于MATLAB的古塔变形情况数学模型(2013年全国大学生数学建模大赛)

承诺书我们仔细阅读了《全国大学生数学建模竞赛章程》和《全国大学生数学建模竞赛参赛规则》(以下简称为“竞赛章程和参赛规则”,可从全国大学生数学建模竞赛网站下载)。

我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。

我们知道,抄袭别人的成果是违反竞赛章程和参赛规则的,如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。

我们郑重承诺,严格遵守竞赛章程和参赛规则,以保证竞赛的公正、公平性。

如有违反竞赛章程和参赛规则的行为,我们将受到严肃处理。

我们授权全国大学生数学建模竞赛组委会,可将我们的论文以任何形式进行公开展示(包括进行网上公示,在书籍、期刊和其他媒体进行正式或非正式发表等)。

我们参赛选择的题号是(从A/B/C/D中选择一项填写): C我们的参赛报名号为(如果赛区设置报名号的话):5448所属学校(请填写完整的全名):广东科学技术职业学院参赛队员(打印并签名) :1. 周盛友2. 佘振武3. 王杰峰指导教师或指导教师组负责人(打印并签名):康海刚(论文纸质版与电子版中的以上信息必须一致,只是电子版中无需签名。

以上内容请仔细核对,提交后将不再允许做任何修改。

如填写错误,论文可能被取消评奖资格。

)日期: 2013 年 9 月 13 日赛区评阅编号(由赛区组委会评阅前进行编号):编号专用页赛区评阅编号(由赛区组委会评阅前进行编号):全国统一编号(由赛区组委会送交全国前编号):全国评阅编号(由全国组委会评阅前进行编号):基于MATLAB的古塔变形情况数学模型摘要本文以MATLAB软件为核心工具,几何知识为基础,分别建立古塔的几何中心模型、变形情况模型以及变形预测模型。

在模型建立之前,首先对观察数据进行分析观察,以此确定建模目标与建模基础,通过观察发现,古塔塔身为近似正八棱台结构,从而为后续几何中心模型的建立提供了几何基础。

2013 国赛 B题 第一、二问MATLAB 程序

2013 国赛 B题  第一、二问MATLAB 程序

对于第一问分析如下对于给定的来自同一页印刷文字文件的碎纸机破碎纸片(仅纵切),建立碎纸片拼接复原模型和算法,并针对附件1、附件2给出的中、英文各一页文件的碎片数据进行拼接复原。

如果复原过程需要人工干预,请写出干预方式及干预的时间节点。

求matlab图像拼接程序clear;I=imread('xingshi32.bmp');if(isgray(I)==0)disp('请输入灰度图像,本程序用来处理128 *128的灰度图像!');elseif (size(I)~=[128,128])disp('图像的大小不合程序要求!');elseH.color=[1 1 1]; %设置白的画布figure(H);imshow(I);title('原图像');zeroImage=repmat(uint8(0),[128 128]);figure(H); %为分裂合并后显示的图设置画布meansImageHandle=imshow(zeroImage);title('块均值图像');%%%%%设置分裂后图像的大小由于本图采用了128像素的图blockSize=[128 64 32 16 8 4 2];%%设置一个S稀疏矩阵用于四叉树分解后存诸数据S=uint8(128);S(128,128)=0;threshold=input('请输入分裂的阈值(0--1):');%阈值threshold=round(255*threshold);M=128;dim=128;%%%%%%%%%%%%%%%%% 分裂主程序%%%%%%%%%%%while (dim>1)[M,N] = size(I);Sind = find(S == dim);numBlocks = length(Sind);if (numBlocks == 0)%已完成break;endrows = (0:dim-1)';cols = 0:M:(dim-1)*M;rows = rows(:,ones(1,dim));cols = cols(ones(dim,1),:);ind = rows + cols;ind = ind(:);tmp = repmat(Sind', length(ind), 1);ind = ind(:, ones(1,numBlocks));ind = ind + tmp;blockValues= I(ind);blockValues = reshape(blockValues, [dim dim numBlocks]);if(isempty(Sind))%已完成break;end[i,j]=find(S);set(meansImageHandle,'CData',ComputeMeans(I,S));maxValues=max(max(blockValues,[],1),[],2);minValues=min(min(blockValues,[],1),[],2);doSplit=(double(maxValues)-double(minValues))>threshold;dim=dim/2;Sind=Sind(doSplit);Sind=[Sind;Sind+dim;(Sind+M*dim);(Sind+(M+1)*dim)];S(Sind)=dim;end对于第二问于碎纸机既纵切又横切的情形,请设计碎纸片拼接复原模型和算法,并针对附件3、附件4给出的中、英文各一页文件的碎片数据进行拼接复原。

2013电工杯B题matlab程序

2013电工杯B题matlab程序

附录一:function f=myfun(a)% a=1:0.01:2;tk=20;tpy=(137.76+134.08+126.21+123.15)/4;q2=(0.5+3.5*a)*(tpy-tk)/100;%排烟空气温度tpy℃,冷空气温度tk℃;% figure(1)% plot(a,q2,'r')% xlabel('a')% ylabel('q2')baita=2.35*(3.62-0.126*7.21+0.038*0.68)/(62.61+0.375*1.08);RO2=13.05;O2=(5.21+5.08+5.88+6.48)/100;CO=(21-(1+baita)*RO2-O2)/(0.605+baita);% baita-燃料特性系数,与燃料种类有关,RO2-烟气中SO2和O2的含量;q3=3.2*a*CO/100;% figure(2)% plot(a,q3,'r')% xlabel('a')% ylabel('q3')Aar=14.7;Cfh=2;Qgr.d=25020;Mar=10.1;Hd=3.62;Qnet.ar=(Qgr.d-206*Hd ).^((100-Mar)/100)-23*Mar;Cfh=16.714*a.^2-46.227*a+36.323;q4=337.27*Aar*Cfh/(Qnet.ar);% figure(3)% plot(a,q4,'r')% xlabel('a')% ylabel('q4')% 式中Qnet.ar —收到基低位发热量, J/g; Qgr.d—应用基高位发热量% Hd—干燥基煤中氢含量,%;% Mar—收到基煤中全水分,%( 即供方发运时采的样品和需方收到时采的样品的煤中全水分)f=q2+q3+q4;end[x,feval]=fminbnd(@myfun,1,2)计算结果:x =1.2674feval =7.0269附录二:clc q4=3.864*a.^2-10.688*a+8.398;q2=-1.427*a.^2+3.945*a+11.93;cleara=0.5:0.01:2;tk=20;tpy=(137.76+134.08+126.21+123.15)/4;q2=(0.5+3.5*a)*(tpy-tk)/100;%排烟空气温度tpy℃,冷空气温度tk℃baita=2.35*(3.62-0.126*7.21+0.038*0.68)/(62.61+0.375*1.08);RO2=13.05;O2=(5.21+5.08+5.88+6.48)/100;CO=(21-(1+baita)*RO2-O2)/(0.605+baita);% baita-燃料特性系数,与燃料种类有关,RO2-烟气中SO2和O2的含量;q3=3.2*a*CO/100;De=30D=(298+245.3+215.8+192.3)/4q5=5.28*De*0.62/D %De—锅炉的额定负荷,D—锅炉的实际负荷Aar=14.7;Cfh=16.714*a.^2-46.227*a+36.323;Qgr.d=25020;Mar=10.1;Hd=3.62;Qnet.ar=(Qgr.d-206*Hd ).^((100-Mar)/100)-23*Mar;alz=10;afh=90;clz=0.96;Clz=2;tlz=800;cfh=0.28;q4=337.27*Aar*Cfh/(Qnet.ar)q6=Aar./ Qnet.ar.*(alz.*(tlz-tk).* clz/(100-Clz)+ afh.*(tpy-tk).* cfh ./(10 0-Cfh))% Aar——入炉煤收到基灰分含量百分,%% Cfh——飞灰可燃物含量,%% Qnet.ar——入炉煤收到基低位发热量,kJ/kg% Qgr.d—应用基高位发热量% Hd—干燥基煤中氢含量,%;% Mar—收到基煤中全水分,%( 即供方发运时采的样品和需方收到时采的样品的煤中全水分)% alz——炉渣占燃煤总灰量的质量含量百分比,%;% afh——飞灰灰量点燃煤总灰量的质量含量百分比,%;% Clz——炉渣中碳的质量百分比,%;% Cfh——飞灰中碳的质量百分比,%;%tlz——炉膛排出的炉渣温度,℃;n=(100-(q2+q3+q4+q5+q6))/100plot(a,n,'r')xlabel('a')ylabel('n')。

2013全国大学生数学建模竞赛B题参考答案

2013全国大学生数学建模竞赛B题参考答案

2013高教社杯全国大学生数学建模竞赛B题评阅要点[说明]本要点仅供参考,各赛区评阅组应根据对题目的理解及学生的解答,自主地进行评阅。

本题要求对数据提取合适的特征、建立合理有效的碎纸片拼接复原模型。

可以考虑的特征有邻边灰度向量的匹配、按行或按列对灰度求和、行距等。

关于算法模型,必须有具体的算法过程(如流程图、算法描述、伪代码等)及设计原理。

虽然正确的复原结果是唯一的,但不能仅从学生提供的复原效果来评定学生解答的好坏,而应根据所建的数学模型、求解方法和计算结果(如复原率)三方面的内容做出评判。

另一方面,评判中还需要考虑人工干预的多少和干预时间节点的合理性。

问题1. 仅有纵切文本的复原问题由于“仅有纵切”,碎纸片较大,所以信息特征较明显。

一种比较直观的建模方法是:按照某种特征定义两条碎片间的(非对称)距离,采用最优Hamilton路或最优Hamilton圈(即TSP)的思想建立优化模型。

关于TSP的求解方法有很多,学生在求解过程中需要注意到非对称距离矩阵或者是有向图等特点。

还可能有种种优化模型与算法,只要模型合理,复原效果好,都应当认可。

本问题相对简单,复原过程可以不需要人工干预,复原率可以接近或达到100%。

问题2. 有横、纵切文本的复原问题一种较直观的建模方法是:首先利用文本文件的行信息特征,建立同一行碎片的聚类模型。

在得到行聚类结果后,再利用类似于问题1中的方法完成每行碎片的排序工作。

最后对排序后的行,再作纵向排序。

本问题的解法也是多种多样的,应视模型和方法的合理性、创新性及有效性进行评分。

例如,考虑四邻近距离图,碎片逐步增长,也是一种较为自然的想法。

问题3. 正反两面文本的复原问题这个问题是问题2的继续,基本解决方法与问题2方法相同。

但不同的是:这里需要充分利用双面文本的特征信息。

该特征信息利用得好,可以提升复原率。

在阅卷过程中,可以考虑学生对问题的扩展。

例如,在模型的检验中,如果学生能够自行构造碎片,用以检验与评价本队提出的拼接复原模型的复原效果,可考虑适当加分。

2013全国大学生数学建模比赛B题_答案

2013全国大学生数学建模比赛B题_答案

2013全国大学生数学建模比赛B题_答案在2013年全国大学生数学建模比赛中,B题的答案涉及了复杂的数学问题和模型建立。

本文将对B题的答案进行详细解析,包括问题的分析、数学模型的建立和结果的分析。

一、问题分析B题要求解答电气设备故障诊断问题。

在现代电气系统中,电气设备的故障可能导致整个系统的崩溃,因此及时准确地诊断故障是非常重要的。

本题给出了一组电气设备的故障数据,要求通过建立数学模型,诊断出可能的故障原因。

二、数学模型的建立1. 数据预处理首先,我们需要对给出的故障数据进行预处理,以便更好地分析和建立模型。

预处理包括数据清洗、异常值检测和数据归一化等步骤。

2. 特征选择在建立数学模型之前,我们需要选择合适的特征来描述电气设备的故障情况。

特征选择的原则是能够最大程度地包含有用的信息,同时减少冗余和噪声。

常用的特征选择方法包括相关系数分析、主成分分析和信息增益等。

3. 模型建立根据问题的要求,可以采用多种数学模型进行建立,如贝叶斯网络、支持向量机和神经网络等。

不同的模型有着不同的优劣势,在实际应用中需要根据具体情况选择合适的模型。

4. 模型训练和优化在建立好数学模型之后,需要使用给出的故障数据进行模型的训练和优化。

训练的目标是根据已知的故障数据,提高模型的准确性和泛化能力。

优化的过程包括参数调整和模型选择等。

三、结果分析经过模型的训练和优化,我们得到了电气设备故障的诊断结果。

在结果的分析中,我们需要评估模型的精度和可靠性,同时根据实际情况提出相应的改进策略。

四、小结通过对2013全国大学生数学建模比赛B题的答案进行详细解析,我们了解了电气设备故障诊断的数学建模过程。

建立数学模型涉及到数据预处理、特征选择、模型建立和结果分析等步骤。

这些步骤的正确和合理运用,对于解决实际问题具有重要意义。

注:本文仅为示例,实际的答案可能涉及更多细节和公式推导。

请根据具体题目要求进行解答。

2013全国大学生数学建模比赛B题-答案

2013全国大学生数学建模比赛B题-答案

2013高教社杯全国大学生数学建模竞赛承诺书我们仔细阅读了中国大学生数学建模竞赛的竞赛规则.我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。

我们知道,抄袭别人的成果是违反竞赛规则的, 如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。

我们郑重承诺,严格遵守竞赛规则,以保证竞赛的公正、公平性。

如有违反竞赛规则的行为,我们将受到严肃处理。

我们参赛选择的题号是(从A/B/C/D中选择一项填写): B我们的参赛报名号为(如果赛区设置报名号的话):所属学校(请填写完整的全名):重庆邮电大学参赛队员(打印并签名) :1.2.3.指导教师或指导教师组负责人(打印并签名):日期: 2013 年 9 月 13 日赛区评阅编号(由赛区组委会评阅前进行编号):2013高教社杯全国大学生数学建模竞赛编号专用页赛区评阅编号(由赛区组委会评阅前进行编号):全国统一编号(由赛区组委会送交全国前编号):全国评阅编号(由全国组委会评阅前进行编号):碎纸片的拼接复原摘要本文研究的是碎纸片的拼接复原问题。

由于人工做残片复原虽然准确度高,但有着效率低的缺点,仅由计算机处理复原,会由于各类条件的限制造成误差与错误,所以为了解决题目中给定的碎纸片复原问题,我们采用人机结合的方法建立碎纸片的计算机复原模型解决残片复原问题,并把计算机通过算法复原的结果优劣情况作为评价复原模型好坏的标准,通过人工后期的处理得到最佳结果。

面对题目中给出的BMP格式的黑白文字图片,我们使用matlab软件的图像处理功能把图像转化为矩阵形式,矩阵中的元素表示图中该位置像素的灰度值,再对元素进行二值化处理得到新的矩阵。

题目每一个附件中的碎纸片均为来自同一页的文件,所以不需考虑残片中含有未知纸张的残片以及残片中不会含有公共部分。

2013年数学建模b题

2013年数学建模b题

精心整理碎纸片的拼接复原【摘要】:碎纸片拼接技术是数字图像处理领域的一个重要研究方向,把计算机视觉和程序识别应用于碎纸片的复原,在考古、司法、古生物学等方面具有广泛的应用,具有重要的现实意义。

本文主要结合各种实际应用背景,针对碎纸机绞碎的碎纸片,基于计算机辅助对碎纸片进行自动拼接复原研究。

针对问题1,依据图像预处理理论,通过matlab程序处理图像,将图像转化成适合于计算机处理的数字图像,进行灰度分析,提取灰度矩阵。

对于仅纵切的碎纸片,根据矩阵的行提取理论,将每个灰度矩阵的第一列提取,作为新矩阵,提取每个灰度矩阵的最后一列,生成新矩阵。

建立碎纸片匹配模型:将矩阵中的任一列与矩阵中的每一列带入模型,所得p值对应的值,即为所拼接的碎片序列号。

将程序进行循环操作,得到最终的碎片自动拼接结果。

针对问题2,首先将图像信息进行灰度分析,提取灰度矩阵。

基于既纵切又横切的碎纸片,根据矩阵的行列提取理论,分别提取每个灰度矩阵的第一列和最后一列,分别生成新矩阵、;提取所有灰度矩阵的第一行和最后一行,分别作为新生成的矩阵、。

由于纸质文件边缘空白处的灰度值为常量,通过对灰度矩阵的检验提取,确定最左列的碎纸片排序。

在此基础上,采用从局部到整体,从左到右的方法,建立匹配筛选模型:,将矩阵中的任一列分别与矩阵中每一列代入模型,所得p值对应的值即为横排序;将矩阵中的任一行分别于矩阵中的任一行代入模型,所得q值对应的值即为列排序。

循环进行此程序,得计算机的最终运行结果。

所得结果有少许误差,需人工调制,更正排列顺序,得最终拼接结果。

针对问题3,基于碎纸片的文字行列特征,采用遗传算法,将所有的可能性拼接进行比较,进行择优性选择。

反面的排序结果用于对正面排序的检验,发现结果有误差,此时,进行人工干预,调换碎纸片的排序。

【关键词】:灰度矩阵欧式距离图像匹配自动拼接人工干预一、问题重述破碎文件的拼接在司法物证复原、历史文献修复以及军事情报获取等领域都有着重要的应用。

2013年全国数学建模B题

2013年全国数学建模B题

2013年全国数学建模B题1、首先运用MATLAB的imread语句将图片转化为参数,每一张图片都得到一个1980*72的矩阵,抽取每个矩阵的第1列和第72列,共得到38列数据,并对其进行编号排序,运用MATLAB进行分布聚类分析,分为18类,得到各自的搭配图形,最后进行人工编排和绘图。

程序如下:(1)clc;clear allclose allI=imread('D:\B\附件1\010.bmp');I_gray=double(I);[m,n] = size(I);a=0.3;A=0;T1=0;S=0;for i=1:mfor j=1:nA=A+I_gray(i,j)endendA=A*0.9;while(S<A)T1=T1+1;for i=1:mfor j=1:nif(I_gray(i,j)==T1)S=S+I_gray(i,j);endendendendT2=zeros(m,n);T3=zeros(m,n);M=3;N=3;for i=M+1:m-Mfor j=N+1:n-Nmax=1;min=255;for k=i-M:i+Mfor l=j-N:j+Nif I_gray(k,l)>maxmax=I_gray(k,l);endif I_gray(k,l)<minmin=I_gray(k,l);endendendT2(i,j)=(max+min)/2;T3(i,j)=max-min;endendT4=medfilt2(T2,[M,N]);T5=(T1+T4)/2;I_bw=zeros(m,n);for i=1:mfor j=1:nif I_gray(i,j)>(1+a)*T1I_bw(i,j)=255;endif I_gray(i,j)<(1-a)*T1I_bw(i,j)=0;endif (1-a)*T1<=I_gray(i,j)<=(1-a)*T1 if T3(i,j)>a*T1if I_gray(i,j)>=T4(i,j)I_bw(i,j)=255;elseI_bw(i,j)=0;endelse if I_gray(i,j)>=T5(i,j)I_bw(i,j)=255;elseI_bw(i,j)=0;endendendendendsubplot(1,2,1),imshow(I)subplot(1,2,2),imshow(I_bw)(2)julei=data';julei2=zscore(julei);y=pdist(julei2);z=linkage(y);dendrogram(z,'average')[x,cmap]=imread('000.bmp '); %读取图像的数据阵和色图阵image(x);colormap(cmap);axis image off %保持宽高比并取消坐标轴2、。

数学建模Matlab实验程序

数学建模Matlab实验程序

Matlab实验作业及答案作业1:建立函数M文件2.建立下面函数的M文件,并求f(x)值.(1)f(x)=log(x1+x22),x=(1,2)(2)f(x)=sin(x2)+exp(2x3),x=2(1)function f = fun1(x1,x2)f = log(x1 +x2^2);end(2)function f = fun2( x)f = sin(x^2) + exp(2*x^3);end3.试编写同时求sin(x),cos(x),exp(x),abs(x)的M函数文件.function f = fun3(x)f = [sin(x) cos(x) exp(x) abs(x)];end4.建立符号函数的M文件:当输入的变量为负数时,返回值-1;当输入的变量为正数时,返回值1;而输入0时,返回值0.function f = fun4(x)if x>0f = 1;else if x == 0f = 0;elsef = -1;endendend5.建立函数 的M 文件。

function f = fun5(x)if x>0f = exp(x-1);elsef = x^2;endend6.通过帮助系统查询roots,poly,polyval,poly2str 的用法,用这些命令解下面的问题:已知一多项式的零点为{-1,1,2,3},写出该多项式,并且计算多项式在点x=2.5处的值。

root = [-1 1 2 3];p = poly(root);x = 2.5;a = polyval(p,x);eig(a)计算多项式y=x 3-3x+2的零点P = [1 0 -3 2];a = company(p); eig(a)7.查询sum,length 的用法,建立一个求向量的平均值的M 文件a = [1 2 3 4];b = sum(a);⎪⎩⎪⎨⎧≤>=-0,0,21x x x e f xc = length(a);d = b/c;eig(d)8.查询input,disp 的用法,建立M 文件:输入x,y 的值将其互换后输出x = input('x=');y = input('y=');disp ([x,y]);t=x;x=y;y=t;disp ([x,y]);作业题2:MATLAB 矩阵的处理1. 创建矩阵A = [1 2 -1 3 5;1 -2 9 0 -6;-3 3 -4 7 1;9 8 0 7 6];disp(A);2.取A 的1,2行与2,3列的交叉元素作子矩阵A1.A([1,2],[2,3])3.取A 的1,3行,然后按行形成矩阵A2A2 = A([1,3],:);4.逆序提取A 的1,2,3行,形成列矩阵A3.A3 = [A(3,:) A(2,:) A(1,:)]’;(“’”为转置符号)5.取A2的绝对值大于3的元素构成向量A4.A4 = find(A>3);6.求出A 的最大值a 及其所处的位置. 12135129063347198076A -⎛⎫ ⎪-- ⎪= ⎪-- ⎪⎝⎭a = max(max(A));[row col v] = find(a);disp([row col v]);7、设用三种方法(克拉姆法则、矩阵的除法、逆矩阵)解方程组AX=bA = [10 7 8 7;7 5 6 5;8 6 10 9;7 5 9 10];b = [32;23;33;31];逆矩阵法:x = inv(A)*b;disp(x);矩阵的除法x =A\b;克拉姆法则for n=1:4B = A;B(:,n) = b;x(n) = det(B)/det(A);enddisp(x);作业题3:Matlab 语法控制结构的使用(1) 用起泡法对10个数由小到大排序.即将相邻两个数比较,将小的调到前头.a = [0 9 7 8 6 5 4 3 2 1];1078775658610975910A ⎛⎫ ⎪ ⎪= ⎪ ⎪⎝⎭32233331b ⎛⎫ ⎪ ⎪= ⎪ ⎪⎝⎭n = length(a);for i = 1:nfor j = 1:n-iif a(j)>a(j+1)t = a(j);a(j) = a(j+1);a(j+1) = t;endendenddisp(a)(2) 取任意数组,如[8 9 11 -9 0 2 -82 42 3 5]等的绝对值大于数3的元素构成向量(编程实现).a = [8 9 11 -9 0 2 -82 42 3 5];a = abs(a);b = find(a>3);a1 = a(b);disp(a1);(3)一球从h (比如100米)高度自由落下,每次落地后反跳回原高度的一半,再落下. 求它在第10次落地时,共经过多少米?第10次反弹有多高?h = 100;for i = 1:10h = h/2;enddisp(h) (4)有一函数 写一程序,输入自变量的值,输出函数值.function fun34 = f(x,y)x = input('x=');y = input('y=');if x < 2f = x+1;elseif x >= 2 &&x <= 8f = 3*x;elseif x>8 && x<=20f = 4*x -5;elseif x>201,23,28(,)45,820cos()sin(),20x x x x f x y x x x x x +<⎧⎪≤≤⎪=⎨-<≤⎪⎪+>⎩f = cos(x)+sin(x);enddisp(f);end(5)从1到多少的自然数的和小于或等于1000,此时的和是多少?sum = 0;n = 1;while sum <= 1000sum = sum+n;n = n+1;enddisp(n - 1);disp(sum -n );(6) 已知 当m=100时,求y 的值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

附录3:程序源文件1.duqu_image.m文件%数据读取预处理文件%将附件中的图片读取到matlab矩阵中,并保存为image_1,image_2,image_3,image_4,image_5a,image_5b%所有附件均放在文件夹 D:\B 中%%%%%%%%%%%%%%%%%%%%%%%%图片名序列%图像名称序号b = [ones(1,10);0 1 2 3 4 5 6 7 8 9]';image_num= [strcat( num2str(0*b(:,1)),num2str(0*b(:,1)),num2str(b(:,2)) ),strcat( num2str(0*b(:,1)),num2str(b(:,1)),num2str(b(:,2)) ),strcat( num2str(0*b(:,1)),num2str(2*b(:,1)),num2str(b(:,2)) ),strcat( num2str(0*b(:,1)),num2str(3*b(:,1)),num2str(b(:,2)) ),strcat( num2str(0*b(:,1)),num2str(4*b(:,1)),num2str(b(:,2)) ),strcat( num2str(0*b(:,1)),num2str(5*b(:,1)),num2str(b(:,2)) ),strcat( num2str(0*b(:,1)),num2str(6*b(:,1)),num2str(b(:,2)) ),strcat( num2str(0*b(:,1)),num2str(7*b(:,1)),num2str(b(:,2)) ),strcat( num2str(0*b(:,1)),num2str(8*b(:,1)),num2str(b(:,2)) ),strcat( num2str(0*b(:,1)),num2str(9*b(:,1)),num2str(b(:,2)) ),strcat( num2str(b(:,1)),num2str(0*b(:,1)),num2str(b(:,2)) ),strcat( num2str(b(:,1)),num2str(b(:,1)),num2str(b(:,2)) ),strcat( num2str(b(:,1)),num2str(2*b(:,1)),num2str(b(:,2)) ),strcat( num2str(b(:,1)),num2str(3*b(:,1)),num2str(b(:,2)) ),strcat( num2str(b(:,1)),num2str(4*b(:,1)),num2str(b(:,2)) ),strcat( num2str(b(:,1)),num2str(5*b(:,1)),num2str(b(:,2)) ),strcat( num2str(b(:,1)),num2str(6*b(:,1)),num2str(b(:,2)) ),strcat( num2str(b(:,1)),num2str(7*b(:,1)),num2str(b(:,2)) ),strcat( num2str(b(:,1)),num2str(8*b(:,1)),num2str(b(:,2)) ),strcat( num2str(b(:,1)),num2str(9*b(:,1)),num2str(b(:,2)) ),strcat( num2str(2*b(:,1)),num2str(0*b(:,1)),num2str(b(:,2)) ),]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 读取所有附件中的图片%读取附件1中的图像n = 19;image_name = strcat('D:/B/附件1','/',image_num,'.bmp');%拼接图像地址和名字for j = 1:nimage_1(:,:,j) = imread(image_name(j,:));%将图像读入矩阵endsave image_1 image_1;%附件1图像%读取附件2中的图像n = 19;image_name = strcat('D:/B/附件2','/',image_num,'.bmp');%拼接图像地址和名字for j = 1:nimage_2(:,:,j) = imread(image_name(j,:));%将图像读入矩阵endsave image_2 image_2;%附件2图像%读取附件3中的图像n = 209;image_name = strcat('D:/B/附件3','/',image_num,'.bmp');%拼接图像地址和名字for j = 1:nimage_3(:,:,j) = imread(image_name(j,:));%将图像读入矩阵endsave image_3 image_3;%附件3图像%读取附件4中的图像n = 209;image_name = strcat('D:/B/附件4','/',image_num,'.bmp');%拼接图像地址和名字for j = 1:nimage_4(:,:,j) = imread(image_name(j,:));%将图像读入矩阵endsave image_4 image_4;%附件4图像%读取附件5 a 中的图像n = 209;image_name = strcat('D:/B/附件5','/',image_num,'a','.bmp');%拼接图像地址和名字for j = 1:nimage_5a(:,:,j) = imread(image_name(j,:));%将图像读入矩阵endsave image_5a image_5a;%附件5a图像%读取附件5 b 中的图像n = 209;image_name = strcat('D:/B/附件5','/',image_num,'b','.bmp');%拼接图像地址和名字for j = 1:nimage_5b(:,:,j) = imread(image_name(j,:));%将图像读入矩阵endsave image_5b image_5b;%附件5a图像2.f_hang_left_right.m文件function [left_zi_chang right_zi_chang] = f_hang_left_right(image_hang)% 此函数计算一行字左右两端汉字的长度%image_hang表示附件图片中第几行字%image_hang = image_1(106:146,:,1);%取行[row col] = size(image_hang);image_01 = image_hang>=200; %01化图形,0表示汉字,1表示背景image_hang_he = sum(image_01,1);%对列求和%%%%%%%%%%%%%%%%%%%找汉字hanzi_fa_zhi = row;%表示空格kong_ge_chang = 3;% 空格的长度hang_he_01 = image_hang_he == hanzi_fa_zhi;if( hang_he_01(1) == 0 )%本行左边开头为汉字,统计汉字的长度for i =1:col-kong_ge_changif( sum(hang_he_01(i:i+kong_ge_chang-1)) == kong_ge_chang )break;endendleft_zi_chang = i - 1;elseleft_zi_chang = 0;endif(left_zi_chang > 41)left_zi_chang = 0;endif( hang_he_01(col) == 0 )%本行结束为汉字,统计汉字的长度for i =col:-1:kong_ge_changif( sum(hang_he_01(i-kong_ge_chang +1:i)) == kong_ge_chang ) break;endendright_zi_chang = col - i;elseright_zi_chang = 0;endif(right_zi_chang > 41)right_zi_chang = 0;end3.f_pi_pei_du.m文件function [left_zi_chang right_zi_chang] = f_hang_left_right(image_hang) % 此函数计算一行字左右两端汉字的长度%image_hang表示附件图片中第几行字%image_hang = image_1(106:146,:,1);%取行[row col] = size(image_hang);image_01 = image_hang>=200; %01化图形,0表示汉字,1表示背景image_hang_he = sum(image_01,1);%对列求和%%%%%%%%%%%%%%%%%%%找汉字hanzi_fa_zhi = row;%表示空格kong_ge_chang = 3;% 空格的长度hang_he_01 = image_hang_he == hanzi_fa_zhi;if( hang_he_01(1) == 0 )%本行左边开头为汉字,统计汉字的长度for i =1:col-kong_ge_changif( sum(hang_he_01(i:i+kong_ge_chang-1)) == kong_ge_chang ) break;endendleft_zi_chang = i - 1;elseleft_zi_chang = 0;endif(left_zi_chang > 41)left_zi_chang = 0;endif( hang_he_01(col) == 0 )%本行结束为汉字,统计汉字的长度for i =col:-1:kong_ge_changif( sum(hang_he_01(i-kong_ge_chang +1:i)) == kong_ge_chang ) break;endendright_zi_chang = col - i;elseright_zi_chang = 0;endif(right_zi_chang > 41)right_zi_chang = 0;end4.fujian_1_chengxu.m文件%%%%%%%%% 此文件,将附件1中的图片进行拼接% 1.先统计出附件1 所有行字的左右汉字长度% 2.计算匹配度% 3.根据匹配度进行拼接load image_1;%读取附件1数据文件% 人工干预计算下列值ding_kong = 37;% ding_kong 表示顶端空行zi_gao = 41;% zi_gao 表示字的高度zi_kuan = 41;% zi_kuan 表示字的宽度konghang_gao = 26;% konghang_gao 表示空行的高度hang_shu = 27;%附件1 所给文件的汉字总行数% 1.先统计出附件1 所有行字的左右汉字长度fujian_zitu = zeros(hang_shu,2);%附件1中的每一个子图的左右汉字长度fujian_1 = zeros(27,2,19);%附件1中所有图的左右汉字长度for j = 1:19zi_ding = ding_kong;for i = 1:hang_shu[fujian_zitu(i,1) fujian_zitu(i,2)]= f_hang_left_right( image_1( zi_ding+1 : zi_ding +zi_gao ,:,j) );zi_ding = zi_ding + zi_gao + konghang_gao;endfujian_1(:,:,j) = fujian_zitu;endsave fujian_1_zuoyou_zichang fujian_1;%保存字长结果fujian1_pinjie_jieguo = zeros(1,19);%保存拼接结果的矩阵pipeidu = zeros(1,19);%用来保存中间匹配度的向量fujian1_pinjie_jieguo(1) = 9;%人工干预找到的第一个(最左边)的纸条(即,图008.bmp)fa_zhi = 0.8;% 匹配度计算时的阀值,大于此阀值的任务匹配正确,小于此值的认为匹配不正确% 2.计算匹配度%匹配度fujian_1_pipei_du = zeros(19,19);for i= 1:19for j=1:19fujian_1_pipei_du(i,j) = f_pi_pei_du(fujian_1(:,2,i),fujian_1(:,1,j),fa_zhi);endendsave fujian_1_pipei_du fujian_1_pipei_du;;%保存匹配度结果fujian_1_pipei_du_bian = fujian_1_pipei_du;%用于去除已选的纸条% 3.根据匹配度进行拼接fj1_pinjie_jieguo = zeros(1,19);fj1_yong = zeros(1,19);fj1_pinjie_jieguo(1) = 9;fj1_yong(fj1_pinjie_jieguo(1)) = 1;for i = 1:18for j = 1:19;if( fj1_yong(j)==1 )fujian_1_pipei_du_bian(fj1_pinjie_jieguo(i),j) = 0;endend[max_pipei_du fj1_pinjie_jieguo(i+1)] = max(fujian_1_pipei_du_bian(fj1_pinjie_jieguo(i),:));fj1_yong(fj1_pinjie_jieguo(i+1)) = 1;endsave fj1_pinjie_jieguo fj1_pinjie_jieguo;;%保存拼接结果fj1_pinjie_jieguo%%%拼接结果输出到屏幕上%%%%%%%%%%%%fujian_1_jieguo_tu = zeros(1980,19*72);for i = 1:19fujian_1_jieguo_tu(:,(i-1)*72+1:i*72) = image_1(:,:,fj1_pinjie_jieguo(i));endsave fujian_1_jieguo_tu fujian_1_jieguo_tu;imview(fujian_1_jieguo_tu)5.fujian2_pinjie_jieguo.m文件%%%%%%%%% 此文件,将附件2中的图片进行拼接% 1.先统计出附件2 所有纸条的左右边界像素qian,hou% 2.计算匹配度% 3.根据匹配度进行拼接% 1.先统计出附件2 所有纸条的左右边界像素qian,houload image_2;for m=1:19qian(:,m)=image_2(:,1,m);hou(:,m)=image_2(:,72,m);end% 2.计算匹配度%图像0-1化qian_01 = qian>=255;hou_01 = hou>=255;%匹配度fujian2_pipei_du = zeros(19,19);for j= 1:19for i=1:19fujian2_pipei_du(i,j) = sum( qian_01(:,i) == hou_01(:,j) ) / 1980;endendsave fujian_2_pipei_du fujian2_pipei_du;% 3.根据匹配度进行拼接fj2_pinjie_jieguo = zeros(1,19);fj2_pinjie_jieguo(1) = 4;for i = 1:18[max_pipei_du fj2_pinjie_jieguo(i+1)] = max(fujian2_pipei_du(:,fj2_pinjie_jieguo(i))); endsave fj2_pinjie_jieguo fj2_pinjie_jieguo;fj2_pinjie_jieguofujian_2_jieguo_tu = zeros(1980,19*72);for i = 1:19fujian_2_jieguo_tu(:,(i-1)*72+1:i*72) = image_2(:,:,fj2_pinjie_jieguo(i));endsave fujian_2_jieguo_tu fujian_2_jieguo_tu;imview(fujian_2_jieguo_tu)6.fujian_3_fenzu.m 文件文件%% 1.将11*19的纸条,分成11组,即先把属于同一组的图片归组,依据就是“每个纸条的上边界空行数”或者“汉字数”load image_3;for i = 1:209image_hang_he(:,i) = sum(image_3(:,:,i)',1);end%若为空格则标记为1,并统计空格的个数。

相关文档
最新文档