2013B题碎纸片拼接
Photo1_1:
clear;clc; path='E:\B\附件1\'; files=dir('E:\B\附件1\*.bmp'); % objdir='E:\B\附件1\'; % bgfile=[objdir,['00' int2str(i)],'.bmp']; % lengthf=length(files); % for i=1:lengthf % img=imread(strcat('E:\B\附件1\',files(i).name)); % imshow(img); % end % bg=imread([path,files(1).name]); % imshow(bg); % imageinfo([path,files(1).name]) xsmat=ones(19,19); for i=1:19 imi=imread([path,files(i).name]); [mrow,mcol]=size(imi); for j=1:19 imj=imread([path,files(j).name]); timi=im2double(imi); timj=im2double(imj); xssum=sum(abs(timi(:,mcol)-timj(:,1)));%计算图像i和图像j的相似度。 xsmat(i,j)=xssum; end end first=0;last=0; for i=1:19 img=imread([path,files(i).name]); [ro,co]=size(img); tot=0; for j=1:ro if(img(j,1)==255) tot=tot+1; end end if tot==ro first=i; break; end end que=[]; que=[que first]; flag=1; pos=1; tf=first; while(flag==1) t=255*255*254; tp=0; for i=1:19 if i~=tf if t>xsmat(tf,i) t=xsmat(tf,i); tp=i; end end end tf=tp; pos=pos+1; que=[que tp]; if pos==19 flag=0; end end tim=[]; for i=1:19 im=imread([path files(que(i)).name]); tim=[tim im]; end imshow(tim);
Photo1_2:
clear;clc; path='E:\B\附件2\'; files=dir('E:\B\附件2\*.bmp'); xsmat=ones(19,19); for i=1:19 imi=imread([path,files(i).name]); [mrow,mcol]=size(imi); for j=1:19 imj=imread([path,files(j).name]); timi=im2double(imi); timj=im2double(imj); xssum=sum((timi(:,mcol)-timj(:,1)).^2);%计算图像i和图像j的相似度。 xsmat(i,j)=xssum; end end first=0;last=0; for i=1:19 img=imread([path,files(i).name]); [ro,co]=size(img); tot=0; for j=1:ro if(img(j,1)==255) tot=tot+1; end end if tot==ro first=i; break; end end que=[] que=[que first]; flag=1; pos=1; tf=first; while(flag==1) t=255*255*254; tp=0; for i=1:19 if i~=tf if t>xsmat(tf,i) t=xsmat(tf,i); tp=i; end end end tf=tp; pos=pos+1; que=[que tp]; if pos==19 flag=0; end end tim=[]; for i=1:19 im=imread([path files(que(i)).name]); tim=[tim im]; end imshow(tim);
photo2_1_a:
clear;clc; path='E:\B\附件3\'; files=dir('E:\B\附件3\*.bmp'); fl=length(files); eig=[];%特征向量矩阵 for i=1:fl imi=imread([path,files(i).name]); [ro,co]=size(imi); thresh=graythresh(imi);%图像二值化; imj=im2bw(imi,thresh); t=[]; for j=1:ro if min(imj(j,:))==0 t=[ t 0]; else t=[t 1]; end end eig=[eig t']; end P=eig; net=newc(minmax(P),11,0.1); net.trainParam.epochs=200; net=init(net); % net=newsom(P,[11]); net=train(net,P); Y=sim(net,P); y=vec2ind(Y); % y=kmeans(P',11); % 测试分类 te=[]; for i=1:11 tot=0; for j=1:209 if y(j)==i tot=tot+1; end end te=[te tot]; end c1=[];c2=[];c3=[];c4=[];c5=[];c6=[];c7=[];c8=[];c9=[];c10=[];c11=[]; for i=1:fl if y(i)==1 c1=[c1 i]; elseif y(i)==2 c2=[c2 i]; elseif y(i)==3 c3=[c3 i]; elseif y(i)==4 c4=[c4 i]; elseif y(i)==5 c5=[c5 i]; elseif y(i)==6 c6=[c6 i]; elseif y(i)==7 c7=[c7 i]; elseif y(i)==8 c8=[c8 i]; elseif y(i)==9 c9=[c9 i]; elseif y(i)==10 c10=[c10 i]; else c11=[c11 i]; end end c1=sort(c1);c2=sort(c2);c3=sort(c3);c4=sort(c4);c5=sort(c5);c6=sort(c6);c7=sort(c7);c8=sort(c8);c9=sort(c9);c10=sort(c10);c11=sort(c11); %人工干预
photo2_1_b:
% 求最左边的图片 leftque=[]; cntnum=zeros(fl,1); maxnum=0; tmax=0;tpos=0; for i=1:fl imi=imread([path,files(i).name]); [ro,co]=size(imi); thresh=graythresh(imi);%图像二值化; imj=im2bw(imi,thresh); tot=0; for j=1:co if min(imj(:,j))==1 tot=tot+1; else break; end end if i==8 maxnum=tot; end if tmax<tot tmax=tot;tpos=i; end cntnum(i)=tot; end for i=1:fl if cntnum(i)>=maxnum leftque=[leftque i]; end end leftque; %构建209*209相似度矩阵 x2smat=ones(209,209); for i=1:fl imi=imread([path,files(i).name]); % thresh=graythresh(imi); % tmi=im2bw(imi,thresh); for j=1:fl imj=imread([path,files(j).name]); % thresh=graythresh(imj); % tmj=im2bw(imj,thresh); timi=im2double(imi); timj=im2double(imj); x2ssum=sum(abs(timi(:,co)-timj(:,1))); x2smat(i,j)=x2ssum; end end
photo2_1_c:
%%组合每行碎片 c=[ 8 1 33 46 54 57 69 71 94 127 138 139 154 159 167 175 176 197 209; 169 2 19 24 27 31 42 51 63 77 87 88 101 121 143 148 180 192 196; 50 3 12 23 29 55 58 66 92 96 119 130 142 144 179 187 189 191 193; 15 4 13 32 40 52 74 83 108 116 129 135 136 160 161 170 177 200 204; 90 5 41 102 103 109 114 115 118 120 124 141 147 152 155 156 186 195 208; 126 14 17 22 67 107 110 111 140 146 151 158 174 182 183 185 188 198 205 ; 30 6 11 38 45 49 56 60 65 76 93 99 105 112 172 173 181 202 207; 62 7 20 21 37 53 64 68 70 73 79 80 97 100 117 132 163 164 178; 39 9 10 25 26 36 47 75 82 89 104 106 123 131 149 162 168 190 194; 72 16 18 28 34 61 81 84 86 133 134 153 157 166 171 199 201 203 206; 95 35 43 44 48 59 78 85 91 98 113 122 125 128 137 145 150 165 184]; p1=c(1,:);p2=c(2,:);p3=c(3,:);p4=c(4,:);p5=c(5,:);p6=c(6,:);p7=c(7,:);p8=c(8,:); p9=c(9,:);p10=c(10,:);p11=c(11,:); q1=cocom(p1);%根据相似度求每列的顺序 q2=cocom(p2);q3=cocom(p3);q4=cocom(p4);q5=cocom(p5);q6=cocom(p6);q7=cocom(p7); q8=cocom(p8);q9=cocom(p9);q10=cocom(p10);q11=cocom(p11); f1=[8 209 139 159 127 69 176 46 175 1 138 54 57 94 154 71 167 33 197 ]; f2=[169 101 77 63 143 31 42 24 148 192 51 180 121 87 196 27 2 88 19]; f3=[50 55 66 144 187 3 58 193 179 119 191 96 12 23 130 29 92 189 142]; f4=[15 129 4 160 83 200 136 13 74 161 204 170 135 40 32 52 108 116 177]; f5=[90 147 103 155 115 41 152 208 156 141 186 109 118 5 102 114 195 120 124]; f6=[126 14 183 110 198 17 185 111 188 67 107 151 22 174 158 182 205 140 146]; f7=p7(q7); f8=[62 20 79 68 70 100 163 97 132 80 64 117 164 73 7 178 21 53 37]; f9=[39 149 47 162 25 36 82 190 123 104 131 194 89 168 26 9 10 106 75]; f10=[72 157 84 133 201 18 81 34 203 199 16 134 171 206 86 153 166 28 61]; f11=[95 35 85 184 91 48 122 43 125 145 78 113 150 98 137 165 128 59 44]; tm1=[];tm2=[];tm3=[];tm4=[];tm5=[];tm6=[];tm7=[];tm8=[];tm9=[];tm10=[];tm11=[]; for i=1:19 tpim=imread([path,files(f1(i)).name]); tm1=[tm1 tpim]; tpim1=imread([path,files(f2(i)).name]); tm2=[tm2 tpim1]; tpim2=imread([path,files(f3(i)).name]); tm3=[tm3 tpim2]; tpim3=imread([path,files(f4(i)).name]); tm4=[tm4 tpim3]; tpim4=imread([path,files(f5(i)).name]); tm5=[tm5 tpim4]; tpim5=imread([path,files(f6(i)).name]); tm6=[tm6 tpim5]; tpim6=imread([path,files(f7(i)).name]); tm7=[tm7 tpim6]; tpim7=imread([path,files(f8(i)).name]); tm8=[tm8 tpim7]; tpim8=imread([path,files(f9(i)).name]); tm9=[tm9 tpim8]; tpim9=imread([path,files(f10(i)).name]); tm10=[tm10 tpim9]; tpim10=imread([path,files(f11(i)).name]); tm11=[tm11 tpim10]; end %%组合11张横向碎片 %first 50 tm3; [a,b]=size(tm3); eu=[];ed=[];%tm矩阵的第一行和最后一行; eu=[eu tm1(1,:);tm2(1,:);tm3(1,:);tm4(1,:);tm5(1,:);tm6(1,:);tm7(1,:);tm8(1,:);tm9(1,:);tm10(1,:);tm11(1,:)]; ed=[ed tm1(a,:);tm2(a,:);tm3(a,:);tm4(a,:);tm5(a,:);tm6(a,:);tm7(a,:);tm8(a,:);tm9(a,:);tm10(a,:);tm11(a,:)]; eu=im2double(eu); ed=im2double(ed); ei=zeros(11,11); for i=1:11 for j=1:11 eimat(i,j)=sum(abs(ed(i,:)-eu(j,:))); end end first=3; q2ue=[];ff=ones(11,1); q2ue=[q2ue first];ff(first)=-1; flag=1; pos=1; tf=first; while(flag==1) t=255*255*254; tp=0; for i=1:11 if i~=tf && ff(i)~=-1; if t>eimat(tf,i) t=eimat(tf,i); tp=i; end end end tf=tp;ff(tf)=-1; pos=pos+1; q2ue=[q2ue tp]; if pos==11 flag=0; end end % imshow(tm4) fim=[tm3;tm8;tm2;tm9;tm10;tm4;tm11;tm6;tm7;tm1;tm5;]; imshow(fim);
cocom函数:
function fc=cocom(p)%根据相似度求行的排列顺序 load x2smat.mat p1=p;tp1=p1; fc=[1]; lo=1;tp1(1)=-1; flag=1;tot=0; while(flag==1) tot=tot+1; tpo=0; min=255*255*255; for i=1:19 if i~=lo && tp1(i)~=-1 if min>x2smat(p1(lo),p1(i)) min=x2smat(p1(lo),p1(i)); tpo=i; end end end fc=[fc tpo]; lo=tpo; tp1(lo)=-1; if tot==18 flag=0; end end % la=0; % for i=1:19 % if tp1(i)~=-1 % la=i; % end % end % fc=[fc la];
Photo2_2_a:
clear;clc; path='E:\B\附件4\'; files=dir('E:\B\附件4\*.bmp'); fl=length(files); eig=[];%特征向量矩阵 for i=1:fl imi=imread([path,files(i).name]); [ro,co]=size(imi); thresh=graythresh(imi);%图像二值化; imj=im2bw(imi,thresh); t=[]; for j=1:ro if sum(imj(j,:))<56 t=[t 1]; else t=[t 0]; end end eig=[eig t']; end P=eig; net=newc(minmax(P),11,0.1); net.trainParam.epochs=250; net=init(net); % net=newsom(P,[11]); net=train(net,P); Y=sim(net,P); y=vec2ind(Y); % y=kmeans(P',11); % 测试分类 te=[]; for i=1:11 tot=0; for j=1:209 if y(j)==i tot=tot+1; end end te=[te tot]; end c1=[];c2=[];c3=[];c4=[];c5=[];c6=[];c7=[];c8=[];c9=[];c10=[];c11=[]; for i=1:fl if y(i)==1 c1=[c1 i]; elseif y(i)==2 c2=[c2 i]; elseif y(i)==3 c3=[c3 i]; elseif y(i)==4 c4=[c4 i]; elseif y(i)==5 c5=[c5 i]; elseif y(i)==6 c6=[c6 i]; elseif y(i)==7 c7=[c7 i]; elseif y(i)==8 c8=[c8 i]; elseif y(i)==9 c9=[c9 i]; elseif y(i)==10 c10=[c10 i]; else c11=[c11 i]; end end c1=sort(c1);c2=sort(c2);c3=sort(c3);c4=sort(c4);c5=sort(c5);c6=sort(c6);c7=sort(c7);c8=sort(c8);c9=sort(c9);c10=sort(c10);c11=sort(c11); %人工干预
Photo2_2_b:
% 求最左边的图片 leftque=[]; cntnum=zeros(fl,1); maxnum=0; tmax=0;tpos=0; for i=1:fl imi=imread([path,files(i).name]); [ro,co]=size(imi); thresh=graythresh(imi);%图像二值化; imj=im2bw(imi,thresh); tot=0; for j=1:co if min(imj(:,j))==1 tot=tot+1; else break; end end if i==172 maxnum=tot; end if tmax<tot tmax=tot;tpos=i; end cntnum(i)=tot; end for i=1:fl if cntnum(i)>0 leftque=[leftque i]; end end leftque=[19 20 70 81 86 132 159 171 191 201 208];leftque=leftque+1; %构建209*209相似度矩阵 x2smat=ones(209,209); for i=1:fl imi=imread([path,files(i).name]); % thresh=graythresh(imi); % tmi=im2bw(imi,thresh); for j=1:fl imj=imread([path,files(j).name]); % thresh=graythresh(imj); % tmj=im2bw(imj,thresh); timi=im2double(imi); timj=im2double(imj); x2ssum=sum(abs(timi(:,co)-timj(:,1))); x2smat(i,j)=x2ssum; end end
Photo2_2_c:
%%组合每行碎片 c=[ 10 11 17 19 36 43 45 56 57 67 75 84 135 146 153 158 172 184 206; 6 25 30 31 38 41 47 52 59 60 87 93 99 108 118 128 151 159 187; 16 21 37 42 44 46 74 77 80 109 117 136 137 144 162 174 180 200 208; 2 32 39 51 54 64 86 98 121 124 130 139 140 154 160 161 176 188 204; 8 22 34 50 55 62 63 113 119 120 134 143 163 169 170 190 193 198 209; 7 18 27 29 79 81 92 95 101 102 104 114 147 149 165 171 197 199 202; 20 23 58 72 83 89 94 106 115 122 127 142 152 156 166 177 183 195 203; 4 14 26 28 35 70 96 111 112 131 133 145 164 167 168 179 182 189 207; 9 15 24 48 61 69 71 85 91 97 100 110 123 138 157 173 175 186 196; 1 13 49 53 73 78 82 88 90 103 116 125 126 129 132 141 178 194 201; 3 5 12 33 40 65 66 68 76 105 107 148 150 155 181 185 191 192 205]; p1=c(1,:);p2=c(2,:);p3=c(3,:);p4=c(4,:);p5=c(5,:);p6=c(6,:);p7=c(7,:);p8=c(8,:); p9=c(9,:);p10=c(10,:);p11=c(11,:); q1=cocom(p1);%根据相似度求每列的顺序 q2=cocom(p2);q3=cocom(p3);q4=cocom(p4);q5=cocom(p5);q6=cocom(p6);q7=cocom(p7); q8=cocom(p8);q9=cocom(p9);q10=cocom(p10);q11=cocom(p11); f1=[172 43 67 206 11 158 75 146 84 135 56 19 57 36 17 10 184 153 45]; f2=[87 52 108 30 41 159 187 99 25 118 151 6 60 59 93 31 38 47 128]; f3=[21 42 109 117 137 74 37 208 136 16 77 44 200 46 174 80 162 180 144]; f4=[160 140 2 130 64 139 154 54 39 124 121 176 86 51 161 188 98 204 32]; f5=[209 22 8 50 62 120 34 143 169 63 170 55 193 134 119 190 163 198 113]; f6=[202 149 171 197 199 95 114 165 79 104 92 81 102 27 101 7 18 29 147]; f7=[20 195 94 142 89 122 127 106 156 115 177 183 152 23 58 203 72 166 83]; f8=[133 182 96 70 168 164 167 189 112 145 207 4 131 35 14 111 26 28 179]; f9=[71 85 61 15 69 175 138 196 9 48 173 157 97 24 100 123 91 186 110]; f10=[82 78 129 201 132 53 126 141 194 88 90 49 73 13 178 125 1 103 116]; f11=[192 76 12 155 191 185 3 105 181 65 107 5 150 33 205 66 40 68 148]; tm1=[];tm2=[];tm3=[];tm4=[];tm5=[];tm6=[];tm7=[];tm8=[];tm9=[];tm10=[];tm11=[]; for i=1:19 tpim=imread([path,files(f1(i)).name]); tm1=[tm1 tpim]; tpim1=imread([path,files(f2(i)).name]); tm2=[tm2 tpim1]; tpim2=imread([path,files(f3(i)).name]); tm3=[tm3 tpim2]; tpim3=imread([path,files(f4(i)).name]); tm4=[tm4 tpim3]; tpim4=imread([path,files(f5(i)).name]); tm5=[tm5 tpim4]; tpim5=imread([path,files(f6(i)).name]); tm6=[tm6 tpim5]; tpim6=imread([path,files(f7(i)).name]); tm7=[tm7 tpim6]; tpim7=imread([path,files(f8(i)).name]); tm8=[tm8 tpim7]; tpim8=imread([path,files(f9(i)).name]); tm9=[tm9 tpim8]; tpim9=imread([path,files(f10(i)).name]); tm10=[tm10 tpim9]; tpim10=imread([path,files(f11(i)).name]); tm11=[tm11 tpim10]; end %组合11张横向碎片 %first 50 tm3; [a,b]=size(tm3); eu=[];ed=[];%tm矩阵的第一行和最后一行; eu=[eu tm1(1,:);tm2(1,:);tm3(1,:);tm4(1,:);tm5(1,:);tm6(1,:);tm7(1,:);tm8(1,:);tm9(1,:);tm10(1,:);tm11(1,:)]; ed=[ed tm1(a,:);tm2(a,:);tm3(a,:);tm4(a,:);tm5(a,:);tm6(a,:);tm7(a,:);tm8(a,:);tm9(a,:);tm10(a,:);tm11(a,:)]; eu=im2double(eu); ed=im2double(ed); ei=zeros(11,11); for i=1:11 for j=1:11 eimat(i,j)=sum(abs(ed(i,:)-eu(j,:))); end end first=3; q2ue=[];ff=ones(11,1); q2ue=[q2ue first];ff(first)=-1; flag=1; pos=1; tf=first; while(flag==1) t=255*255*254; tp=0; for i=1:11 if i~=tf && ff(i)~=-1; if t>eimat(tf,i) t=eimat(tf,i); tp=i; end end end tf=tp;ff(tf)=-1; pos=pos+1; q2ue=[q2ue tp]; if pos==11 flag=0; end end % imshow(tm7) fim=[tm11;tm6;tm2;tm7;tm4;tm3;tm5;tm9;tm8;tm1;tm10]; imshow(fim);