• 客服电话

    在线时间:8:00-16:00

    客服电话

    000-000-0000

    电子邮件

    ndiyadmin@163.com
  • 手机版

    电子DIY手机版

    随时随地掌握网站动态

  • 官方微信

    扫描二维码

    免费获取邀请码

程序鉴赏:刚刚结束的全国数学建模比赛B题程序

[复制链接]
3190 14
木头风火轮 发表于 2013-9-18 17:00:43 | 只看该作者 |阅读模式 打印 上一主题 下一主题
本帖最后由 木头风火轮 于 2013-9-18 21:35 编辑

首次参加数学建模比赛,用到的知识确实以前玩单片机积累下来的编程能力,用编程解决一个拼图问题 。四天三夜的奋战在16号星期一中午落下帷幕,下面我将在此奋斗过程中写的一个比较亮得出手的程序展示给大家欣赏一下, 电脑上安装了matlab的朋友可以将附件下下来放到matlab\work中试试,这只是第一问的程序,因为第二问的程序不能将附件3和附件四的图片完美地拼出来, 这里就不展示了 ,

附件1、2的下载地址
http://pan.baidu.com/share/link?shareid=1076586380&uk=1696272141

clc,clear
for i=0:9;
    k=i+1;
    aa{k}=imread(strcat('00',num2str(i),'.bmp'));%读取图片信息
end
for i=10:18;
    k=i+1;
    aa{k}=imread(strcat('0',num2str(i),'.bmp'));
end
Length=length(aa);%图片总数
L={Length,1};%有Length个左边缘
R={Length,1};
for i=1:Length %对所有图片进行0/1编码
    [m,n]=size(aa{i});%测出图片原来的尺寸
   AA{i}(aa{i}<255)=1;
    AA{i}(aa{i}==255)=0;
   A{i}=reshape(AA{i},m,n);%还原图片尺寸
    L{i}=A{i}(:,1); %找出所有图片边缘0/1编码
    R{i}=A{i}(:,n);
end
j=1;
for i=1:Length %找出排在原图最左边的碎片
   if sum(L{i}.^2)==0
       j=j+1;
        Aone{j}=aa{i};
        AL{j}=L{i};
        AR{j}=R{i};
        t=i-1;
   end
end
J=j;
C=zeros(Length,1);  %定义左右边缘数值相减差的集合
bmpR=AR{j};  
qianlie=Aone{j};
col=zeros(19,1) ;  %定义查找出来的所有可与已确定图片相接的碎片编号的集合
col(1,1)=t;       %最左边图片所属的编号
for k=1:18  
    for i=1:Length     
        c=bmpR-L{i};
        d=c';
        C(i)=sum((d(1,:)-mean(d)).^2)/length(d);
    end
    D=C';
    Cmin=min(D);     %找出差值平方和最小的即为最合适相接的边缘
    [row,column]=find(D==Cmin);   %标出该图片的编号为原编号
    Aa=aa{column};    %将最适合拼接的下一张图片数据赋值给Aa
    bmpk=[qianlie,Aa];    %将前面已固定的图片与找出的图片进行拼接
    imshow(bmpk)           %显示合并后的图片
    qianlie=bmpk;          %将重新固定好的图片数据赋值给qianlie
    bmpR=R{column};          %将新添加的图片右边缘数据赋值给bmpk
    col(k+1)=column-1 ; %显示每次拼接上的图片编号
end
paixu=col'
参与人数 3贡献 +5 刀币 +10 收起 理由
虫子先生 + 5 + 3
ozhaojie + 2
diyhome + 5

查看全部评分总评分 : 贡献 +5 刀币 +10

收藏
收藏2
分享
分享
支持
支持0
反对
反对0

精彩评论14

跳转到指定楼层
2#
裤衩喜欢diy 发表于 2013-9-18 17:16:33 | 只看该作者


不懂的说,,

谢谢分享
3#
 楼主| 木头风火轮 发表于 2013-9-18 17:19:20 | 只看该作者
裤衩喜欢diy 发表于 2013-9-18 17:16
不懂的说,,

谢谢分享

里面都有注释, matlab的程序没有C语言严格,但很多和C语言类似
4#
流星也会永恒 发表于 2013-9-18 18:38:30 | 只看该作者
MATLAB还没装
5#
著名的PCB哥 发表于 2013-9-18 19:18:20 | 只看该作者
上大学的时候,MATLAB没学好~~
6#
qqxg1518 发表于 2013-9-18 19:32:41 | 只看该作者
对这种语言不懂,还是让能人来评吧
7#
 楼主| 木头风火轮 发表于 2013-9-18 20:34:06 | 只看该作者
mianmuhua 发表于 2013-9-18 19:18
上大学的时候,MATLAB没学好~~

matlab加上傅里叶算法,处理信号,处理频谱,图像,音乐什么的,,那是相当的好玩,,,不过我现在还没学到那一步
8#
hxrong 发表于 2013-9-18 21:24:22 | 只看该作者
没上过大学,不懂matlab, 刚看还是以为是PIC 的mplab
9#
 楼主| 木头风火轮 发表于 2013-9-18 21:30:00 | 只看该作者
hxrong 发表于 2013-9-18 21:24
没上过大学,不懂matlab, 刚看还是以为是PIC 的mplab

matlab ,老师就教了一点, 都是自学的, 因为这个软件可以用在很多地方, 很强大,
10#
7758 发表于 2013-10-3 15:43:27 | 只看该作者
感觉也很强大,我选修课选的这个,到时候好好玩玩
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关注我们
中国电子DIY官方微信

客服电话:000-000-0000

客服邮箱:776513803@qq.com

周一至周五 9:00-18:00

公司地址:深圳市南山区美丽湾大厦B座

Powered by X3.4@ 2001-2013