建不了的模。 发表于 2014-7-24 11:17

[源码] 2013全国大学生数学建模B题源程序

[源码] 2013全国大学生数学建模B题源程序
附件1和2:
I=cell(1,19);%存放二值图片
A=cell(1,19);%存放原始图片
for j=1:19
    if j-1<10
        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
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
            if  I{k}(j,72)==I{i}(j,1)
                t=t+1;
            end
        end
        d(i-1)=t;
    end
    =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=;
imshow(r);
%对图片做最后的处理,显示图片
for i=1:19
    y(i)=A{i}(1);
end
%将碎片序号按复原后顺序填入1×19的矩阵
附件3:
I=cell(11,19);%存放二值图片
A=cell(11,19);%存放原始图片
c=zeros(11,19);
for j=1:209
    if j-1<10
        imageName=strcat('00',num2str(j-1),'.bmp');
    else if j-1<100 && j-1>=10
            imageName=strcat('0',num2str(j-1),'.bmp');
        else if j-1>=100 && j-1<209
                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
    end
    d(i)=t;
end
=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        137
    6753        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 l=1:11
    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);
%%对图片做最后的处理,显示图片

taozhanghua 发表于 2014-7-24 12:00

谢谢分享77777777777

微软神器 发表于 2014-7-25 08:57

问一下:strcat('00',num2str(j-1),'.bmp')是什么意思?如果要用到第三问,图片怎么导入?
页: [1]
查看完整版本: [源码] 2013全国大学生数学建模B题源程序