数学建模B题国家一等奖Matlab程序.pdf
《数学建模B题国家一等奖Matlab程序.pdf》由会员分享,可在线阅读,更多相关《数学建模B题国家一等奖Matlab程序.pdf(13页珍藏版)》请在冰点文库上搜索。
附录附录3:
程序源文件:
程序源文件1.duqu_image.m文件文件%数据读取预处理文件%将附件中的图片读取到matlab矩阵中,并保存为image_1,image_2,image_3,image_4,image_5a,image_5b%所有附件均放在文件夹D:
B中%图片名序列%图像名称序号b=ones(1,10);0123456789;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);%拼接图像地址和名字forj=1:
nimage_1(:
:
j)=imread(image_name(j,:
);%将图像读入矩阵endsaveimage_1image_1;%附件1图像%读取附件2中的图像n=19;image_name=strcat(D:
/B/附件2,/,image_num,.bmp);%拼接图像地址和名字forj=1:
nimage_2(:
:
j)=imread(image_name(j,:
);%将图像读入矩阵endsaveimage_2image_2;%附件2图像%读取附件3中的图像n=209;image_name=strcat(D:
/B/附件3,/,image_num,.bmp);%拼接图像地址和名字forj=1:
nimage_3(:
:
j)=imread(image_name(j,:
);%将图像读入矩阵endsaveimage_3image_3;%附件3图像%读取附件4中的图像n=209;image_name=strcat(D:
/B/附件4,/,image_num,.bmp);%拼接图像地址和名字forj=1:
nimage_4(:
:
j)=imread(image_name(j,:
);%将图像读入矩阵endsaveimage_4image_4;%附件4图像%读取附件5a中的图像n=209;image_name=strcat(D:
/B/附件5,/,image_num,a,.bmp);%拼接图像地址和名字forj=1:
nimage_5a(:
:
j)=imread(image_name(j,:
);%将图像读入矩阵endsaveimage_5aimage_5a;%附件5a图像%读取附件5b中的图像n=209;image_name=strcat(D:
/B/附件5,/,image_num,b,.bmp);%拼接图像地址和名字forj=1:
nimage_5b(:
:
j)=imread(image_name(j,:
);%将图像读入矩阵endsaveimage_5bimage_5b;%附件5a图像2.f_hang_left_right.m文件文件functionleft_zi_changright_zi_chang=f_hang_left_right(image_hang)%此函数计算一行字左右两端汉字的长度%image_hang表示附件图片中第几行字%image_hang=image_1(106:
146,:
1);%取行rowcol=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)%本行左边开头为汉字,统计汉字的长度fori=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_chang41)left_zi_chang=0;endif(hang_he_01(col)=0)%本行结束为汉字,统计汉字的长度fori=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_chang41)right_zi_chang=0;end3.f_pi_pei_du.m文件functionleft_zi_changright_zi_chang=f_hang_left_right(image_hang)%此函数计算一行字左右两端汉字的长度%image_hang表示附件图片中第几行字%image_hang=image_1(106:
146,:
1);%取行rowcol=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)%本行左边开头为汉字,统计汉字的长度fori=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_chang41)left_zi_chang=0;endif(hang_he_01(col)=0)%本行结束为汉字,统计汉字的长度fori=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_chang41)right_zi_chang=0;end4.fujian_1_chengxu.m文件%此文件,将附件1中的图片进行拼接%1.先统计出附件1所有行字的左右汉字长度%2.计算匹配度%3.根据匹配度进行拼接loadimage_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中所有图的左右汉字长度forj=1:
19zi_ding=ding_kong;fori=1:
hang_shufujian_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;endsavefujian_1_zuoyou_zichangfujian_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);fori=1:
19forj=1:
19fujian_1_pipei_du(i,j)=f_pi_pei_du(fujian_1(:
2,i),fujian_1(:
1,j),fa_zhi);endendsavefujian_1_pipei_dufujian_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;fori=1:
18forj=1:
19;if(fj1_yong(j)=1)fujian_1_pipei_du_bian(fj1_pinjie_jieguo(i),j)=0;endendmax_pipei_dufj1_pinjie_jieguo(i+1)=max(fujian_1_pipei_du_bian(fj1_pinjie_jieguo(i),:
);fj1_yong(fj1_pinjie_jieguo(i+1)=1;endsavefj1_pinjie_jieguofj1_pinjie_jieguo;%保存拼接结果fj1_pinjie_jieguo%拼接结果输出到屏幕上%fujian_1_jieguo_tu=zeros(1980,19*72);fori=1:
19fujian_1_jieguo_tu(:
(i-1)*72+1:
i*72)=image_1(:
:
fj1_pinjie_jieguo(i);endsavefujian_1_jieguo_tufujian_1_jieguo_tu;imview(fujian_1_jieguo_tu)5.fujian2_pinjie_jieguo.m文件%此文件,将附件2中的图片进行拼接%1.先统计出附件2所有纸条的左右边界像素qian,hou%2.计算匹配度%3.根据匹配度进行拼接%1.先统计出附件2所有纸条的左右边界像素qian,houloadimage_2;form=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);forj=1:
19fori=1:
19fujian2_pipei_du(i,j)=sum(qian_01(:
i)=hou_01(:
j)/1980;endendsavefujian_2_pipei_dufujian2_pipei_du;%3.根据匹配度进行拼接fj2_pinjie_jieguo=zeros(1,19);fj2_pinjie_jieguo
(1)=4;fori=1:
18max_pipei_dufj2_pinjie_jieguo(i+1)=max(fujian2_pipei_du(:
fj2_pinjie_jieguo(i);endsavefj2_pinjie_jieguofj2_pinjie_jieguo;fj2_pinjie_jieguofujian_2_jieguo_tu=zeros(1980,19*72);fori=1:
19fujian_2_jieguo_tu(:
(i-1)*72+1:
i*72)=image_2(:
:
fj2_pinjie_jieguo(i);endsavefujian_2_jieguo_tufujian_2_jieguo_tu;imview(fujian_2_jieguo_tu)6.fujian_3_fenzu.m文件文件%1.将11*19的纸条,分成11组,即先把属于同一组的图片归组,依据就是“每个纸条的上边界空行数”或者“汉字数”loadimage_3;fori=1:
209image_hang_he(:
i)=sum(image_3(:
:
i),1);end%若为空格则标记为1,并统计空格的个数。
若为汉字则标记为0,并统计汉字的个数。
将结果放入矩阵image_hang_he_18360中fori=1:
209he_18360=0;%若一行都是空格,则他的像素和为72*255=18360forj=1:
180if(image_hang_he(1,i)=18360)index=1;if(image_hang_he(j,i)=18360)he_18360=he_18360+1;elsebreak;endelseindex=0;if(image_hang_he(j,i)=18360)he_18360=he_18360+1;elsebreak;endendendimage_hang_he_18360(1,i)=he_18360;image_hang_he_18360(2,i)=index;end7.fj_3_hang_jieguo.mfunctionfj_3_hang_jieguo=f_fj3_hang_pinjie(image_3,A1)%A1为附件3的一组%例如A1=5032358921191301441916614218719312295517918996;%A1行所选择的图片%输入参数%将A1行的这些图片的最左边(第一列)的像素放入fujian3_1qian。
将这些图片做右边(最后一列)的像素放入fujian3_1hou。
%loadimage_3;fujian3_1qian=zeros(180,19);fori=1:
19fujian3_1qian(:
i)=image_3(:
1,A1(i);endfujian3_1hou=zeros(180,19);fori=1:
19fujian3_1hou(:
i)=image_3(:
72,A1(i);end%图像0-1化qian_01=fujian3_1qian=255;hou_01=fujian3_1hou=255;%匹配度fujian_3_pipei_du=zeros(19,19);liaxu_fazhi=5;fori=1:
19forj=1:
19if(j=i)%qian_hou_he=hou_01(:
i)+qian_01(:
j);%fujian_3_pipei_du(i,j)=sum(qian_hou_he=0)+(qian_hou_he=2)*2-(qian_hou_he=1)*3)/180;fujian_3_pipei_du(i,j)=sum(hou_01(:
i)=qian_01(:
j)/180;%fujian_3_pipei_du(i,j)=f_lianxu_pipei_du(hou_01(:
i),qian_01(:
j),liaxu_fazhi);elsefujian_3_pipei_du(i,j)=0;endendend%savefujian_3_pipei_dufujian_3_pipei_du;fj_3_pinjie_jieguo=zeros(1,19);fj_3_pinjie_yong=zeros(1,19)fj_3_pinjie_jieguo
(1)=1;%输入参数fj_3_pinjie_yong(3)=1;fori=1:
18forj=1:
19;if(fj_3_pinjie_yong(j)=1)fujian_3_pipei_du(fj_3_pinjie_jieguo(i),j)=0;endendmax_pipei_dumax_pipei_index=max(fujian_3_pipei_du(fj_3_pinjie_jieguo(i),:
);fj_3_pinjie_jieguo(i+1)=max_pipei_index;fj_3_pinjie_yong(max_pipei_index)=1;endfj_3_hang_jieguo=zeros(1,19);fori=1:
19fj_3_hang_jieguo(i)=A1(fj_3_pinjie_jieguo(i);end%A1fj_3_pinjie_jieguofj_3_hang_jieguofigure;imshow(image_3(:
:
fj_3_hang_jieguo
(1),image_3(:
:
fj_3_hang_jieguo
(2),image_3(:
:
fj_3_hang_jieguo(3),image_3(:
:
fj_3_hang_jieguo(4).,image_3(:
:
fj_3_hang_jieguo(5),image_3(:
:
fj_3_hang_jieguo(6),image_3(:
:
fj_3_hang_jieguo(7),image_3(:
:
fj_3_hang_jieguo(8).,image_3(:
:
fj_3_hang_jieguo(9),image_3(:
:
fj_3_hang_jieguo(10),image_3(:
:
fj_3_hang_jieguo(11),image_3(:
:
fj_3_hang_jieguo(12).,image_3(:
:
fj_3_hang_jieguo(13),image_3(:
:
fj_3_hang_jieguo(14),image_3(:
:
fj_3_hang_jieguo(15),image_3(:
:
fj_3_hang_jieguo(16).,image_3(:
:
fj_3_hang_jieguo(17),image_3(:
:
fj_3_hang_jieguo(18),image_3(:
:
fj_3_hang_jieguo(19);8.fujian_3_pinjie_hang.m文件%此文件,将附件3中的图片分好的组,进行组内拼接,产生源文件的行%行分组情况fujian_3_fenzu_juzh=306496076173207113845566593991051121721812023910692636477582891041231311491621681941025190953559444878859198113122125128137145150165184438146336971127159167175176545794138139154197209629711713272021375364687073798010016316417872848617120334811331341571661992012062816153186112617221111401461511581821831851882051071741981467110905102103109114124152155156195411201411472081151861181695163121180192196192427427788101143148872311574108413324083116129135160161170177200521362045032358921191301441916614218719312295517918996;loadimage_3;fj_3_pinjie_hang=zeros(11,19);fori=1:
11%调用函数f_fj3_hang_pinjie,完成行分组后的