摘要: matlab,数学建模,碎片拼接

额,最近抠c++抠累了,突然心血来潮翻看近年来的大学生数学建模题。相比当年参加比赛的题目,总体感觉现在的题目越来越接近生活了。可能是多了一些经历,对一些题特别有感觉,加之联想起以前做完一道难题得到的兴奋感,一个想法涌上心头,为什么不利用现在的知识来好好“收拾收拾”它们呢。因此便有了这篇的文章,一方面是分享下自己的想法,另外也是锻炼下自己的文笔,身为程序猿,是时候改变一下一些习惯了。选出特别感兴趣的题目《2013年数学建模B赛题-图像碎片拼接》,开弄!

题目按切割方式不同归类为三个子问题:单面纵切,单面纵横切,双面纵横切,其中前两个又分为中英文纸张的情况,三个问题依次越来越复杂,越来越接近实际情况。不过相较于生活中的问题,《女子将5万钞票撕成碎片续:丈夫辞职在家拼钱》,http://news.qq.com/a/20120506/000091.htm,建模题还是比较小儿科的。

单面纵切:可以理解为对n个碎片块进行“行内”排列组合,最终要求是使碎片边界无缝接合起来。排列组合的话可以用神经网络,遗传算法等智能算法实现,“无缝”需要一个量来表征。前面智能算法对碎片不同组合时的无缝量进行评估,之后得到的最优解。这是学院派的解法,以此思路进行下去,一篇华丽的文章就可以出炉了。另外两个子问题也可以作类似的分解。

下面是我实现的解法,以前面方法相比,这种方法有些“简单粗暴”,先上matlab代码先(复制后放在相应的文件夹里运行即可):

clear all;clc;close all

%% 碎片拼接

file_list= dir(‘*.bmp‘); % 获取文件列表

if size(file_list,1)>0

image_list = {file_list.name};

else

error(‘no image‘)

end

file_num=size(image_list,2);

score=zeros(1,file_num);

feature=cell(1,file_num);

for ind=1:file_num % 计算碎片特征

filename=cell2mat(image_list(ind));

a=imread(filename);

[row,col,len]=size(a);

if len==3

a=rgb2gray(a);

end

a_d=double(a);

f=a_d(:,1)‘;

tmp1=f.*f;

tmp2=sqrt( sum(tmp1) );

f=f/tmp2;

one.left=f;

one.left_std=std(f);

f=a_d(:,end)‘;

tmp1=f.*f;

tmp2=sqrt( sum(tmp1) );

f=f/tmp2;

one.right=f;

one.right_std=std(f);

feature{ind}=one;

end

%% 计算碎块的相似性矩阵

score_left=zeros(file_num,file_num);

score_right=zeros(file_num,file_num);

std_thr=0.001;

for y=1:file_num % compare

for x=1:file_num

if y==x

continue;

end

score_left(y,x)=feature{y}.left*feature{x}.right‘;

score_right(y,x)=feature{y}.right*feature{x}.left‘;

if feature{y}.left_std

score_left(y,x)=0;

end

if feature{y}.right_std

score_right(y,x)=0;

end

end

end

%% 计算块间相似性

order=[1];

order_left=2:file_num; % order,第一个保证前后都有对象

while 1

order

if isempty(order_left)

break;

end

left=order(1);right=order(end);

score=score_left(left,:);

[c,i]=max(score);

if c(1)>0.95 && any(order_left==i(1))

order=[i order];

order_left(order_left==i(1))=[];

end

score=score_right(right,:);

[c,i]=max(score);

if c(1)>0.95 && any(order_left==i(1))

order=[order i];

order_left(order_left==i(1))=[];

end

end

%% 拼接

b=[];

for ind=1:file_num % 拼接

filename=cell2mat(image_list(order(ind)));

a=imread(filename);

[row,col,len]=size(a);

if len==3

a=rgb2gray(a);

end

b=[b a];

end

%% show

imshow(b)

大概的思路是先计算块的特征,然后计算块间的相似性,最后进行拼接。其实看代码更容易理解,其中的无缝量选择,可以应用在前面方法的实现里。

拼接后的效果图:

中文:                                                                                英文:

~~Yemuzi分享文章,欢迎拍砖~~

原文:http://www.cnblogs.com/yemuzi/p/4093912.html

matlab头模型图像,用Matlab解《2013年数据建模比赛》图像碎片拼接题相关推荐

  1. matlab彩色碎片拼接与复原_用Matlab解《2013年数据建模比赛》图像碎片拼接题

    摘要: matlab,数学建模,碎片拼接 额,最近抠c++抠累了,突然心血来潮翻看近年来的大学生数学建模题.相比当年参加比赛的题目,总体感觉现在的题目越来越接近生活了.可能是多了一些经历,对一些题特别 ...

  2. matlab并网模型,光伏并网MATLAB模型 一些入门的并网控制系统 - 下载 - 搜珍网

    压缩包 : ebf90b46d7ca3aa77998d48520ce08d.zip 列表 光伏并网MATLAB模型/ 光伏并网MATLAB模型/PQ.slx 光伏并网MATLAB模型/PV.mdl 光 ...

  3. matlab层模型弹塑性分析,matlab弹塑性时程分析法编程

    matlab弹塑性时程分析法编程 MATLAB 编程:at short g;F(21,14)=0;xg=[0 600 1100 1500 2100 2500 2900 350 2050 1500 10 ...

  4. matlab获得模型切面,基于MATLAB的STL模型切片分层算法

    吴建 吴婷 陈廷豪 包涵 摘  要:为提高STL模型的切片效率,提出一种基于MATLAB的STL模型切片分层新算法.首先对STL模型进行数据预处理,筛选出只与切平面相交的三角片集合,然后利用相邻三角面 ...

  5. matlab打开模型,老版本Matlab模型打开方式

    mdl文件在6.5里面做的,但是到了新版本里面却打不开,下面就是相关信息: Warning: Unable to load model file 'd:\MATLAB7\work\*.mdl'. Ru ...

  6. ar模型功率谱估计 matlab,AR模型功率谱估计及Matlab实现

    南昌大学实验报告 学生姓名:学号:专业班级: 实验类型:□验证□综合□设计□创新实验日期:实验成绩: 一.实验名称 基于AR模型的功率谱估计及Matlab实现 二.实验目的 1.了解现代谱估计方法,深 ...

  7. matlab决策树模型过程,利用MATLAB统计工具箱进行决策树分类的一个例子

    这个例子开始从lda线性分类算法,最后引出决策树分类算法,不错,初学者可以参考下 网上的很多决策树算法都没有例子,都是就一堆代码都不知道参数怎么传递.直接用工具箱里面的决策树算法,不懂得就help一下 ...

  8. 2015美国数学建模a代码c语言,美国数学建模比赛2020 MCM C题代码详解

    # #!-*- coding:utf-8 -*- import pandas as pd import numpy as np import xlrd import vaderSentiment fr ...

  9. matlab mdh模型,6轴机器人DH建模、仿真、正逆解代码

    一.模型 二.MDH模型 使用修改DH模型.改进DH模型与标准DH模型主要区别在于末端,改进DH并没有建到工具坐标系,这里将4.5.6轴的坐标系都建在同一点,因此机器人连杆的参数只需要4个值a1.a2 ...

最新文章

  1. 【机器学习】用摸鱼学来解释隐马尔可夫模型(HMM)
  2. 信息安全系统设计基础_exp1
  3. vue从url中获取token并加入到 请求头里_轻流amp;amp;企业微信——获取打卡数据...
  4. mysql数据库优化语句_【MySQL】10条SQL优化语句,让你的MySQL数据库跑得更快!
  5. java自动校准程序_java – VisualVM校准步骤与Windows 10挂起
  6. 基于Spring Boot2 + Spring Security OAuth2 实现单点登陆(二)
  7. 深层听觉(用无意识状态的大脑学习)秘诀
  8. 深信服设备电源键关机
  9. UI Automator
  10. MTK_android11_以太网(内网)和WIFI(外网)共存
  11. 如何换ionic里面的图标
  12. C primer plus——C进阶探幽
  13. 输入一串字符,并判断其中英文字符和数字字符的个数——C语言实现(C语言练习)
  14. 小学计算机奥林匹克试题,历届小学数学奥林匹克试题:91届A卷
  15. 折半查找判定数及平均查找长度(一定要看这 能看懂的)
  16. leslie模型matlab代码6,leslie模型人口预测程序,请求大家!
  17. 判断二叉树是否为满二叉树
  18. 中标麒麟6安装Qt 4.8.4+QtCreator 2.7.0 NeoKylin Linux Desktop Release 6+Qt4.8.4+QtCreator2.7.0
  19. 电脑XP系统蓝屏修理记录
  20. 什么是网络安全,为何要注重网络安全?

热门文章

  1. VMware Mac 全屏问题
  2. (转) MCU实战经验---多种的按键处理
  3. mysql查询多造一列_mysql某列多值查询_MySQL
  4. android 65536 简书,app编译打包时的65536问题
  5. Boring Game (10 分)
  6. 如何使用IEDA连接数据库
  7. 验1-8 输出倒三角图案 (5 分)
  8. cdn加载插件和npm安装的差别_免费、快速且可靠的开源CDN-jsDelivr
  9. 前端知识 | React Native手势响应浅析
  10. 21. Kotlin学习笔记 (一) 基本语法