QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1327|回复: 3
打印 上一主题 下一主题

注意初始化存储矩阵,否则,Matlab默认赋0,找最小值会出错!!!

[复制链接]
字体大小: 正常 放大

413

主题

36

听众

1854

积分

升级  85.4%

  • TA的每日心情
    开心
    2019-9-18 21:55
  • 签到天数: 258 天

    [LV.8]以坛为家I

    社区QQ达人

    群组2015国赛冲刺

    群组2016美赛公益课程

    群组国赛讨论

    群组第三届数模基础实训

    群组Matlab讨论组

    跳转到指定楼层
    1#
    发表于 2015-8-6 09:50 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    clc
    clear
    %load 'C:\Users\Administrator\Desktop\碎纸拼接\程序\汉语\matlab_A.mat'
    load 'H:\我们团队做过的题目\训练2\程序\二小问---程序\汉语\新发法2\bi_jiao_ju_zhen_A'
    global A
    x1=[94        34        84        183        90        47        121        42        124        144        77        112        149        97        136        164        127        58        43];
    x2=[49        54        65        143        186        2        57        192        178        118        190        95        11        22        129        28        91        188        141];
    x3=[61        19        78        67        69        99        162        96        131        79        63        116        163        72        6        177        20        52        36];
    x4=[168        100        76        62        142        30        41        23        147        191        50        179        120        86        195        26        1        87        18];
    x5=[29        64        111        201        5        92        180        48        37        75        55        44        206        10        104        98        172        171        59];
    x6=[38        148        46        161        24        35        81        189        122        103        130        193        88        167];
    x7=[25        8        9        105        74];
    x8=[71        156        83        132        200        17        80        33        202        198        15        133];
    x9=[170        205        85        152        165        27        60];
    x10=[13        182        109        197        16        184        110        187        66        106        150        21        173        157        181        204        139        145];
    x11=[128  3        159        82        199        135        12        73        160        203        169        134        39        31        51        107        115        176];
    x12=[146 102 154        114        40        151        207        155        140        185        108        117        4        101        113        194        119        123];
    x13=[7        208        138        158        126        68        175        45        174         0        137        53];
    x14=[56        93        153        70        166        32        196];
    x1=x1+1;x2=x2+1;x3=x3+1;x4=x4+1;x5=x5+1;x6=x6+1;x7=x7+1;x8=x8+1;
    x9=x9+1;x10=x10+1;x11=x11+1;x12=x12+1;x13=x13+1;x14=x14+1;
    %为了放到矩阵x中
    x6(19)=0;x7(19)=0;x8(19)=0;x9(19)=0;x10(19)=0;x11(19)=0;x12(19)=0;
    x13(19)=0;x14(19)=0;
    global x
    x=[x1;x2;x3;x4;x5;x6;x7;x8;x9;x10;x11;x12;x13;x14];

    %构造比较矩阵
    line=ones(180,1)*255;

    %筛选左边的全白
    n_zuo(14,2)=0;
    for i=1:14
        t=0;
        for j=1:19
            if x(i,j)~=0
                c=isequal(A(:,1,x(i,j)),line);
                if  c==1
                    t=t+1;
                    n_zuo(i,t)=x(i,j);
                end
            end
        end
    end
    n_j_zuo=n_zuo;

    %筛选右边的全白
    n_you(14,2)=0;
    for i=1:14
        t=0;
        for j=1:19
            if x(i,j)~=0
                c=isequal(A(:,72,x(i,j)),line);
                if  c==1
                    t=t+1;
                    n_you(i,t)=x(i,j);
                end
            end
        end
    end
    n_j_you=n_you;

    %左边分类编程
    zuo_liang_ge(1,2)=0;%左边有两个全白。
    k_0=1;
    zuo_yi_ge(1,1)=0;%左边只有一个是全白的。
    k_1=1;
    zuo_ling_ge(1,2)=0;%左边无全白的!
    k_2=1;
    for i=1:14
        k=0;
        for j=1:2
            if n_j_zuo(i,j)==0
                k=k+1; %k=0表示:左边有两个全白
            end        %k=1表示:左边有1个全白
        end
        if k==0%左边有两个全白。
            zuo_liang_ge(k_0,1:2)=n_j_zuo(i,;
            zuo_liang_ge(k_0,4)=i;
            k_0=k_0+1;
        end
        if k==1%左边只有一个是全白的。
            zuo_yi_ge(k_1,1)=n_j_zuo(i,1);
            zuo_yi_ge(k_1,4)=i;
            k_1=k_1+1;
        end
        if k==2%左边无全白的!
            zuo_ling_ge(k_2,1:2)=n_j_zuo(i,;
            zuo_ling_ge(k_2,4)=i;
            k_2=k_2+1;
        end
    end

    %右边分类编程
    you_2_ge(1,2)=0;%右边有两个全白。
    k_2=1;
    you_1_ge(1,1)=0;%右边只有一个是全白的。
    k_1=1;
    you_0_ge(1,2)=0;%右边无全白的!
    k_0=1;
    for i=1:14
        k=0;
        for j=1:2
            if n_j_you(i,j)==0
                k=k+1; %k=0表示:右边有两个全白
            end         %k=1表示:右边有1个全白
        end
        if k==0%右边有两个全白。
            you_2_ge(k_2,1:2)=n_j_you(i,;
            you_2_ge(k_2,4)=i;
            k_2=k_2+1;
        end
        if k==1%右边只有一个是全白的。
            you_1_ge(k_1,1)=n_j_you(i,1);
            you_1_ge(k_1,4)=i;
            k_1=k_1+1;
        end
        if k==2%右边无全白的!
            you_0_ge(k_0,1:2)=n_j_you(i,;
            you_0_ge(k_0,4)=i;
            k_0=k_0+1;
        end
    end



    %左边全白为一个的排序
    suo_ying=zuo_yi_ge;
    bai=suo_ying(:,1);          %左边全白所对应的页数。
    bai_row=suo_ying(:,4);  %左边全白所对应的 x 所在的行。
    n_pai_xu=length(bai);  %要排几行。
    pai_xu(1:n_pai_xu,1)=bai;  %排好之后的矩阵。
    %----------------进行排序-----------------------------
    flag=72+1;  %做标志位。
    A(1,flag,=0;
    for hang=1:n_pai_xu
        ye=bai(hang,1);          %左边全白所对应的页数。
        x_row=bai_row(hang,1);   %左边全白所对应的 x 所在的行。
        A(1,flag,ye)=1;    %首先,将最左边为全白的做标记。
        B=A(:,72,ye);
        %比较与最左边的最小距离。
       
        for i=1:18  %该循环安排新的最左边。
            d(1,1:19)=inf;  %注意初始化存储矩阵,否则,Matlab默认赋0,找最小值会出错!!!
            for j=1:19
                if x(x_row,j) ~=0
                    if A( 1,flag, x(x_row,j) )==1
                        d(1,j)=inf;
                    elseif A( 1,flag, x(x_row,j) )==0
                        R(j)= pdist2( double( B )',double( A( :,1, x(x_row,j) ) )' );
                        d(1,j)=sum( R(j) );
                    end
                end
            end
            [zhi,wei_zi]=min( d );
            A(1,flag, x(x_row,wei_zi) )=1;  %找到相邻图片后,做标志位。
            if  x(x_row,i+1)~=0      %判断 x 矩阵的元素是否为零。
                B=A(:,72,x(x_row,wei_zi) );   %并且更新最左边图片位置。
                pai_xu(hang,i+1)=x(x_row,wei_zi);
            elseif  x(x_row,i+1)==0    %如果为零,则将其位置赋inf
                pai_xu(hang,i+1)=inf;
            end
        end
    end

    %显示图片
    for i=1:n_pai_xu
        for j=1:19
            if pai_xu(i,j)~=inf
                B(:, 72*(j-1)+1:72*j ,i)=A(:,1:72,pai_xu(i,j));
            end
        end
        %显示图片
       % figure
       % imshow(B(:,:,i));
    end
    pai_xu=pai_xu-1;

    pai_xu_2_quan_bai=quan_bai_2(zuo_liang_ge);  %全部用第一个
    %用 zuo_ling_ge,you_1_ge 先找出最右边为全白的图片
    pai_xu_2_wu_bai=quan_bai_0(zuo_ling_ge,you_1_ge);  %全部用第一个




    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    数学中国版主团队!

    413

    主题

    36

    听众

    1854

    积分

    升级  85.4%

  • TA的每日心情
    开心
    2019-9-18 21:55
  • 签到天数: 258 天

    [LV.8]以坛为家I

    社区QQ达人

    群组2015国赛冲刺

    群组2016美赛公益课程

    群组国赛讨论

    群组第三届数模基础实训

    群组Matlab讨论组

    回复

    使用道具 举报

    715

    主题

    213

    听众

    8594

    积分

  • TA的每日心情
    开心
    2017-4-28 17:18
  • 签到天数: 415 天

    [LV.9]以坛为家II

    社区QQ达人 邮箱绑定达人 风雨历程奖 最具活力勋章 发帖功臣 元老勋章 新人进步奖

    群组乐考无忧考研公益讲座

    群组2017美赛两天强训

    群组模友会交流视频

    群组

    群组国赛讨论

    回复

    使用道具 举报

    715

    主题

    213

    听众

    8594

    积分

  • TA的每日心情
    开心
    2017-4-28 17:18
  • 签到天数: 415 天

    [LV.9]以坛为家II

    社区QQ达人 邮箱绑定达人 风雨历程奖 最具活力勋章 发帖功臣 元老勋章 新人进步奖

    群组乐考无忧考研公益讲座

    群组2017美赛两天强训

    群组模友会交流视频

    群组

    群组国赛讨论

    就是文中的符号被写成QQ表情了。。。

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2024-6-1 12:44 , Processed in 0.411254 second(s), 69 queries .

    回顶部