Matlab图像匹配问题
已知一个任意形状,查找在大图像中最接近的形状位置。
输入:一个小图形状和一张大图
输出:最接近的形状在大图中的位置
假设:
(1)已知形状与目标形状有一定的形变。
(2)形状与大图像均为二值图像,图中有多个形状。
要求:
建立数学模型,并编写程序实现;
查找精度高,抗噪能力强(大图像可能含有噪声),速度快。
例如,小图形状如下:
大图形状如下:

首先介绍一下Matlab中如果对于一些函数的功能使用不是很熟悉的时候,可以直接使用help function查看该函数或者语句的具体使用方法,英文描述,虽然会有个别单词不认识,但总体写的十分的详细并且有example,能够让你读懂如何使用该函数或语句;比如使用Matlab解这道数学建模题目时,要用到imread(),fullfile(),imageSet(),等等函数语句时,可以使用help xxx进行具体查看其各个参数代表什么意思;

解题思路:
问题分析:
该问题是需要我们队两张二值图进行图像匹配,寻找大图中的对应小图中的目标图案;因此需要寻找一个key值,使得其能够唯一的标识每一个图案;
图案的大小以及方向都可能发生了形变,根据像素位置显然是不能解决的;
模型构成:
先将大图的图案总数量提取出来,然后对每个图案求得其key值,这里我设置的key值是图案边界key=(周长/面积);将每个图案的key值和小图的key值进行差值运算,差值最小的编号图案即是我们所要寻找的图案;
模型求解(使用Matlab中各种函数求解):
代码:
big=imread('pic_Big.png');
sma=imread('pic_Sma.png');
se=strel('disk',2);
level_Big=graythresh(big);
level_Sma=graythresh(sma);
bw_Big=im2bw(big,level_Big);
bw_Sma=im2bw(sma,level_Sma);
openbw_Big=imopen(bw_Big,se);
>> openbw_Sma=imopen(bw_Sma,se);
>> %首先big代表大图,即含有多个图案的图像,sma代表小图,即所要寻找的目标图案;
>> %bw_Big和bw_Sma分别是将两张图转换成二值图;
>> %graythresh是寻找阈值的函数,具体使用可以通过help graythresh以及百度深入了解;
>> %openbe_Big和openbw_Sma分别是对两张二值图做开运算(属于形态学图像处理),用途:使边界平滑,消除细小的尖刺,断开狭小的连接,保持面积不变;
>> [L,num]=bwlabel(openbw_Big,8);
>> %将openbw_Big的联通区域块数计算出来,即num表示有几个联通区域(白色块);
>> stats_Big=regionprops(openbw_Big,'Area','Perimeter','BoundingBox');
>> stats_Sma=regionprops(openbw_Sma,'Area','Perimeter','BoundingBox');
>> Sma_key=double(stats_Sma(2).Perimeter/stats_Sma(2).Area);
>> %使用regionprops(图像,'属性')将各个联通块的属性存储下来;
>> %计算出sma图案的Sma_key即图案的(周长/面积)值;
Big_key=zeros(1,num);
%定义一个一维数组存储big的多个key值;
>> for i=1:num
Big_key(1,i)=stats_Big(i).Perimeter/stats_Big(i).Area;
end
%求出big图像中各个图案的(周长/面积)值存放在Big_key数组;
>> min=10;
des=10;
for i=2:num
if min>abs(Big_key(1,i)-Sma_key)
min=abs(Big_key(1,i)-Sma_key);
sprintf('%d\n',i);
des=i;
end
end
>> %设置最小值min(后续判断各个图案的key值和目标key值差值最小存放变量);
>> %设置变量des存放最终key值和目标key值差值最小的联通块的编号;后续求得des=2;
boundingbox=stats_Big(des).BoundingBox;
>> %将寻找到的目标联通块编号即des=2的联通块的BoundingBox(边界框)找出;
>> figure(1),imshow(openbw_Big);
rectangle('position',boundingbox,'EdgeColor','r');
>> %使用rectangle函数将该联通块用某红颜色的矩形框框出来;
>> rectangle('position',boundingbox,'EdgeColor','b');
%使用蓝色矩形框将联通块框出来;

具体其中的各个函数及其中参数意义可以自行百度深入了解,或者有什么问题欢迎留言讨论;
Matlab图像匹配问题的更多相关文章
- 【Matlab编程】Matlab让电脑失而复得
在学校常常有同学电脑失窃,大抵都是粗细大意.据说iPhone手机失窃后能够获取小偷的照片,从而将照片找到.如今用matlab写一个程序使得当小偷使用电脑上网时,电脑自己主动将电脑前面的人的照片发到你指 ...
- 基于MATLAB的Sobel边缘检测算法实现
图像边缘就是图像灰度值突变的地方,也就是图像在该部分的像素值变化速度非常之快,就比如在坐标轴上一条曲线有刚开始的平滑突然来个大转弯,在变化出的导数非常大. Sobel算子主要用作边缘检测,它是一离散型 ...
- Matlab 绘制三维立体图(以地质异常体为例)
前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...
- Matlab slice方法和包络法绘制三维立体图
前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...
- Matlab 高斯_拉普拉斯滤波器处理医学图像
前言:本程序是我去年实现论文算法时所做.主要功能为标记切割肝脏区域.时间有点久,很多细节已经模糊加上代码做了很多注释,因此在博客中不再详述. NOTE: 程序分几大段功能模块,仔细阅读,对解决医学图像 ...
- android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测
目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...
- MATLAB中绘制质点轨迹动图并保存成GIF
工作需要在MATLAB中绘制质点轨迹并保存成GIF以便展示. 绘制质点轨迹动图可用comet和comet3命令,使用例子如下: t = 0:.01:2*pi;x = cos(2*t).*(cos(t) ...
- linux下配置matlab运行环境(MCR)
在安装好的matlab下有MCR(MatlabCompilerRuntime)在matlab2011/toolbox/compiler/deploy/glnxa64下找到MCRInstaller.zi ...
- EMD分析 Matlab 精华总结 附开源工具箱(全)
前言: 本贴写于2016年12与15日,UK.最近在学习EMD(Empirical Mode Decomposition)和HHT(Hilbert-Huang Transform)多分辨信号处理,FQ ...
随机推荐
- 改用固定IP后zabbix无法发送邮件的问题解决
虚拟机之前一直用随机IP,然后发送邮件也正常. 改成固定IP以后,发送邮件失败. 用mail命令发送邮件成功. 查看zabbix_server的log,显示 cannot connect to SMT ...
- R语言数据结构二
上节我们讲到R语言中的基本数据类型,包括数值型,复数型,字符型,逻辑型以及对应的操作和不同数值类型之间的转换.众所周知,R语言的优势在于进行数据挖掘,大数据处理等方面,因此单个的数据并不能满足我们的需 ...
- Android开发——布局性能优化的一些技巧(一)
0. 前言 上一篇我们分析了为什么LinearLayout会比RelativeLayout性能更高,意义在于分析了这两种布局的实现源码,算是对一个小结论的证明过程,但是对布局性能的优化效果,对这两种布 ...
- 对Oracle的游标进行更为精细的控制
摘要自 Oracle性能控制艺术 DECLARE l_ename emp.ename%TYPE :='SCOTT'; l_empno emp.empno%TYPE; l_cursor INTEGER; ...
- 函数内联inline
C++语言支持函数内联,其目的是为了提高函数的执行效率(速度). 宏的优点 在C程序中,可以用宏代码提高执行效率. 编译预处理器用拷贝宏代码的方式取代函数调用,省去了参数压栈,生成汇编语言的CALL调 ...
- 14-[mysql内置功能]--视图,触发器,存储过程,事务
1.视图 (1)准备数据 /* 数据导入: Navicat Premium Data Transfer Source Server : localhost Source Server Type : M ...
- [SDOI2018]战略游戏 圆方树,树链剖分
[SDOI2018]战略游戏 这题是道路相遇(题解)的升级版,询问的两个点变成了\(S\)个点. LG传送门 还是先建出圆方树,考虑对于询问的\(S\)个点,答案就是圆方树上能包含这些点的最小连通块中 ...
- int类型转换的几种方式差异
1.(int)是一种类型转换:当我们觟nt类型到long,float,double,decimal类型,可以使用隐式转换,但是当我们从long类型到int类型就需要使用显式转换,否则会产生编译错误. ...
- CSS过渡动画之transition
O(∩_∩)O~ 这两天在看看CSS的相关内容,关于transition动画感觉很有意思,分享一下. CSS负责给html加效果,自然少不了各种动画,今天介绍一下transition. 概述 看一段比 ...
- shell编程基础(转载)
Shell编程基础 原作者 Leal:请参阅页面底部的编者列表. 授权许可: 创作共享署名协议 GNU 自由文档许可证 注意:本文仍然在持续的修订之中,且错漏之处可能较多.如果能够阅读英语的话,可以考 ...