数学建模B题国家一等奖Matlab程序_精品文档.pdf
《数学建模B题国家一等奖Matlab程序_精品文档.pdf》由会员分享,可在线阅读,更多相关《数学建模B题国家一等奖Matlab程序_精品文档.pdf(13页珍藏版)》请在冰豆网上搜索。
![数学建模B题国家一等奖Matlab程序_精品文档.pdf](https://file1.bdocx.com/fileroot1/2022-10/14/03b1e65c-0ab5-497e-86ae-27a0b793ee90/03b1e65c-0ab5-497e-86ae-27a0b793ee901.gif)
附录附录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_du