运行前,请将附件所在的目录加入到MATLAB的路径中!!!!
都是自己编的,还望大神指教!!
附件1和2的源程序:
Clear all
I=cell(1,19);%存放二值图片
A=cell(1,19);%存放原始图片
for j=1:19
if j-1
imageName=strcat(\'00\',num2str(j-1),\'.bmp\');
else
imageName=strcat(\'01\',num2str(j-11),\'.bmp\');
end
I{j} = imread(imageName);
end
A=I;
%读取图片
for j=1:19
for k=1:1980
for h=1:72
if I{j}(k,h)~=255
I{j}(k,h)=1;
else
I{j}(k,h)=0;
end
end
end
end
%将图片二值化
b=zeros(1,19);
for i=1:19
sum=0;
for j=1:1980
sum=sum+I{i}(j);
end
b(i)=sum;
end
for i=1:19
if b(i)==0
q=i;
end
%找出原图最左边的碎纸片的编号,并存放在变量q中
for i=0:18
I{i+1}(1)=i;
A{i+1}(1)=i;
end
%对每张图片做标记(即在二值化后的矩阵和原始图片的矩阵的第一个元素处做标记) t=I{q};
I{q}=I{1};
I{1}=t;
%交换二值化后的第q张和第一张图片
t=A{q};
A{q}=A{1};
A{1}=t;
%交换原始图片的第q张和第一张
for k=1:18
d=zeros(18,1);
for i=k+1:19
t=0;
for j=1:1980
ifI{k}(j,72)==I{i}(j,1)
t=t+1;
end
end
d(i-1)=t;
end
[w,v]=max(d);
t=I{v+1};
I{v+1}=I{k+1};
I{k+1}=t;
end
%对二值图片进行拼接
for k=1:19
for s=1:19
if I{k}(1)==A{s}(1)
t=A{s};
A{s}=A{k};
A{k}=t;
end
end
end
%根据拼接好的而二值图片的标记信息交换对应的原始图片以便显示
r=[A{1:19}];
%对图片做最后的处理,显示图片
for i=1:19
y(i)=A{i}(1);
end
%将碎片序号按复原后顺序填入1×19的矩阵
附件2的源程序:
I=cell(11,19);%存放二值图片
A=cell(11,19);%存放原始图片
c=zeros(11,19);
for j=1:209
if j-1
imageName=strcat(\'00\',num2str(j-1),\'.bmp\');
else if j-1=10
imageName=strcat(\'0\',num2str(j-1),\'.bmp\');
else if j-1>=100 && j-1
imageName=strcat(num2str(j-1),\'.bmp\');
end
end
end
I{j} = imread(imageName);
end
A=I;
%读取图片
for j=1:209
for k=1:180
for h=1:72
if I{j}(k,h)~=255
I{j}(k,h)=1;
else
I{j}(k,h)=0;
end
end
end
end
%将图片二值化
for i=0:208
I{i+1}(1)=i;
A{i+1}(1)=i;
end
%对每张图片做标记(即在二值化后的矩阵和原始图片的矩阵的第一个元素处做标记) a1=zeros(1,209);
a2=zeros(1,209);
a3=zeros(1,209);
for j=1:209
sum1=0;
for i=1:180
sum1=sum1+I{j}(i,1);
end
a1(j)=sum1;
end
for j=1:209
sum2=0;
for i=1:72
sum2=sum2+I{j}(1,i);
end
a2(j)=sum2;
end
for i=1:209
a3(i)=a1(i)+a2(i);
end
q=50;
c(1,1)=q-1;
%找出原图左上角的碎纸片的编号,并存放在变量q中
%在找的过程中发现一共有10张碎纸片符合要求,此时需要涉入人工干预
%经过人工分析比较,发现,最符合要求的碎纸片的编号为049,因此直接给q赋值为50 %对每张图片做标记(即在二值化后的矩阵和原始图片的矩阵的第一个元素处做标记) j=1;
for i=1:208
if c(i)==0
C{j}=I{i+1};
j=j+1;
end
end
%找出可能是最左边边缘的的碎纸片,并存放在元胞数组C中,共有16个符合要求 t=I{q};
I{q}=I{1};
I{1}=t;
%交换二值化后的第q张和第一张图片
r=cell2mat(A);
for i=1:16
t=0;
for j=1:72
if I{1}(180,j)==C{i}(1,j)
t=t+1;
end
d(i)=t;
end
[w,v]=max(d);
y=C{v}(1);
t=I{2};
I{2}=I{y+1};
I{y+1}=t;
%************************上面的代码不要修改*************************%
a=[2038 148 2462 1485 770 361 7610 2396 9429 12918 2112 501 230 818 1157 2110 5465 5111 10242
6066 4233 4988 4250 720 10392 2985 1974 9016 3827 409 11833 817 489 1081 3089 90 6100 270
1031 7561 1444 2117 4252 709 6368 428 134 1219 4248 129 1007 406 2994 163 181 3782 10404
2389 1489 4964 5653 299 232 3008 9612 8409 4251 1177 12995 1247 5477 58 1441 1107 5587 160
1104 823 1028 5998 6544 1158 158 3650 2070 5999 5066 7453 4264 3660 2469 8729 11413 3004 1376753 5067 541 81 149 1014 3830 143 7451 4302 3849 6349 1511 1846 2986 11965 2520 2802 4373
2386 2689 348 417 14010 162 2210 492 4372 1092 159 1677 350 2044 233 126 10924 4230 1011
483 69 70 2481 1453 3083 6781 4308 10244 1221 3781 5637 1090 8339 1490 403 4781 1038 1246
1024 4315 10379 1082 164 3954 717 2062 6083 5049 4981 86 712 1801 1667 340 6954 2333 2106
1261 738 1108 1182 1487 161 2329 5046 9587 1 4998 128 3142 2277 4304 4018 1630 5121 6343
85 10192 2458 2045 300 6942 1688 301 1870 6074 1680 2111 5473 721 2519 11905 6245 1450 1835];
for i=1:209
aa(i)=r(a(i));
end
s1=reshape(aa,11,19);
for k=1:209
for s=1:209
if I{k}(1)==A{s}(1)
t=A{s};
A{s}=A{k};
A{k}=t;
end
end
end
for k=1:19
for i=1:11
for j=1:19
if s1(l,k)==A{i,j}(1)t=A{i,j};A{i,j}=A{l,k};A{l,k}=t;break;end
end
end
end
end
for i=1:11
for j=1:19
I{1}=A{i,j};
end
end
r=cell2mat(A);
imshow(r);
%%对图片做最后的处理,显示图片