matlab头模型图像,用Matlab解《2013年数据建模比赛》图像碎片拼接题
摘要: 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年数据建模比赛》图像碎片拼接题相关推荐
- matlab彩色碎片拼接与复原_用Matlab解《2013年数据建模比赛》图像碎片拼接题
摘要: matlab,数学建模,碎片拼接 额,最近抠c++抠累了,突然心血来潮翻看近年来的大学生数学建模题.相比当年参加比赛的题目,总体感觉现在的题目越来越接近生活了.可能是多了一些经历,对一些题特别 ...
- matlab并网模型,光伏并网MATLAB模型 一些入门的并网控制系统 - 下载 - 搜珍网
压缩包 : ebf90b46d7ca3aa77998d48520ce08d.zip 列表 光伏并网MATLAB模型/ 光伏并网MATLAB模型/PQ.slx 光伏并网MATLAB模型/PV.mdl 光 ...
- matlab层模型弹塑性分析,matlab弹塑性时程分析法编程
matlab弹塑性时程分析法编程 MATLAB 编程:at short g;F(21,14)=0;xg=[0 600 1100 1500 2100 2500 2900 350 2050 1500 10 ...
- matlab获得模型切面,基于MATLAB的STL模型切片分层算法
吴建 吴婷 陈廷豪 包涵 摘 要:为提高STL模型的切片效率,提出一种基于MATLAB的STL模型切片分层新算法.首先对STL模型进行数据预处理,筛选出只与切平面相交的三角片集合,然后利用相邻三角面 ...
- matlab打开模型,老版本Matlab模型打开方式
mdl文件在6.5里面做的,但是到了新版本里面却打不开,下面就是相关信息: Warning: Unable to load model file 'd:\MATLAB7\work\*.mdl'. Ru ...
- ar模型功率谱估计 matlab,AR模型功率谱估计及Matlab实现
南昌大学实验报告 学生姓名:学号:专业班级: 实验类型:□验证□综合□设计□创新实验日期:实验成绩: 一.实验名称 基于AR模型的功率谱估计及Matlab实现 二.实验目的 1.了解现代谱估计方法,深 ...
- matlab决策树模型过程,利用MATLAB统计工具箱进行决策树分类的一个例子
这个例子开始从lda线性分类算法,最后引出决策树分类算法,不错,初学者可以参考下 网上的很多决策树算法都没有例子,都是就一堆代码都不知道参数怎么传递.直接用工具箱里面的决策树算法,不懂得就help一下 ...
- 2015美国数学建模a代码c语言,美国数学建模比赛2020 MCM C题代码详解
# #!-*- coding:utf-8 -*- import pandas as pd import numpy as np import xlrd import vaderSentiment fr ...
- matlab mdh模型,6轴机器人DH建模、仿真、正逆解代码
一.模型 二.MDH模型 使用修改DH模型.改进DH模型与标准DH模型主要区别在于末端,改进DH并没有建到工具坐标系,这里将4.5.6轴的坐标系都建在同一点,因此机器人连杆的参数只需要4个值a1.a2 ...
最新文章
- 【机器学习】用摸鱼学来解释隐马尔可夫模型(HMM)
- 信息安全系统设计基础_exp1
- vue从url中获取token并加入到 请求头里_轻流amp;amp;企业微信——获取打卡数据...
- mysql数据库优化语句_【MySQL】10条SQL优化语句,让你的MySQL数据库跑得更快!
- java自动校准程序_java – VisualVM校准步骤与Windows 10挂起
- 基于Spring Boot2 + Spring Security OAuth2 实现单点登陆(二)
- 深层听觉(用无意识状态的大脑学习)秘诀
- 深信服设备电源键关机
- UI Automator
- MTK_android11_以太网(内网)和WIFI(外网)共存
- 如何换ionic里面的图标
- C primer plus——C进阶探幽
- 输入一串字符,并判断其中英文字符和数字字符的个数——C语言实现(C语言练习)
- 小学计算机奥林匹克试题,历届小学数学奥林匹克试题:91届A卷
- 折半查找判定数及平均查找长度(一定要看这 能看懂的)
- leslie模型matlab代码6,leslie模型人口预测程序,请求大家!
- 判断二叉树是否为满二叉树
- 中标麒麟6安装Qt 4.8.4+QtCreator 2.7.0 NeoKylin Linux Desktop Release 6+Qt4.8.4+QtCreator2.7.0
- 电脑XP系统蓝屏修理记录
- 什么是网络安全,为何要注重网络安全?
热门文章
- VMware Mac 全屏问题
- (转) MCU实战经验---多种的按键处理
- mysql查询多造一列_mysql某列多值查询_MySQL
- android 65536 简书,app编译打包时的65536问题
- Boring Game (10 分)
- 如何使用IEDA连接数据库
- 验1-8 输出倒三角图案 (5 分)
- cdn加载插件和npm安装的差别_免费、快速且可靠的开源CDN-jsDelivr
- 前端知识 | React Native手势响应浅析
- 21. Kotlin学习笔记 (一) 基本语法