模板匹配MATLAB实现及算法优化

合集下载

matlab模板匹配算法

matlab模板匹配算法

matlab模板匹配算法Matlab模板匹配算法是一种常用的计算机视觉技术,用于在图像中寻找特定的模式或物体。

该算法通过对比模板图像和待匹配图像的像素值,来确定模板在待匹配图像中的位置。

在本文中,我们将详细介绍Matlab模板匹配算法的原理、步骤以及在实际应用中的一些注意事项。

通过这些内容的介绍,读者将能够全面了解该算法的工作原理以及如何在Matlab中实现。

一、原理介绍模板匹配算法的基本思想是在待匹配图像中滑动一个与模板大小相同的窗口,并计算窗口中的像素值与模板像素值的相似度。

相似度可以通过计算像素值之间的差异来进行评估,常见的方法有求和差分平方和(SSD)和归一化互相关(NCC)等。

二、步骤说明1. 加载图像和模板图像:首先,我们需要使用Matlab的图像处理工具箱加载待匹配的图像和模板图像。

可以使用imread函数将图像数据读取为Matlab中的矩阵。

2. 确定窗口大小:根据需要匹配的模板大小,在待匹配图像中滑动一个与模板大小相同的窗口。

通常情况下,窗口大小与模板大小相同或略大于模板大小。

3. 计算相似度:对于每个窗口,在窗口中提取像素值,并将其与模板图像逐像素进行比较。

根据所选的相似度度量方法,计算窗口和模板之间的相似度。

4. 确定匹配位置:确定窗口与模板的最佳匹配位置。

匹配位置通常是相似度最大的位置,可以使用Matlab的max函数来查找最大值的位置。

5. 可选的后处理:根据具体情况,可以对匹配结果进行进一步的后处理。

例如,可以通过设置合适的匹配阈值来过滤掉相似度低于阈值的结果。

6. 可视化结果:最后,可以使用Matlab的图像绘制函数,在待匹配图像上标记出匹配的位置,以便于结果的可视化和分析。

三、注意事项在使用Matlab模板匹配算法时,需要注意以下几点:1. 模板选择:选择合适的模板非常关键。

模板应该具有明显的特征,并且在待匹配图像中具有一定的可区分性。

2. 光照和尺度变化:模板匹配算法对光照和尺度变化非常敏感。

最优化方法的Matlab实现

最优化方法的Matlab实现

最优化方法的Matlab实现Matlab中使用最优化方法可以使用优化工具箱。

在优化工具箱中,有多种最优化算法可供选择,包括线性规划、非线性规划、约束优化等。

下面将详细介绍如何在Matlab中实现最优化方法。

首先,需要建立一个目标函数。

目标函数是最优化问题的核心,它描述了要优化的变量之间的关系。

例如,我们可以定义一个简单的目标函数:```matlabfunction f = objFun(x)f=(x-2)^2+3;end```以上代码定义了一个目标函数`objFun`,它使用了一个变量`x`,并返回了`f`的值。

在这个例子中,目标函数是`(x-2)^2 + 3`。

接下来,需要选择一个最优化算法。

在Matlab中,有多种最优化算法可供选择,如黄金分割法、割线法、牛顿法等。

以下是一个使用黄金分割法的示例:```matlabx0=0;%初始点options = optimset('fminsearch'); % 设定优化选项```除了黄金分割法,还有其他最优化算法可供选择。

例如,可以使用`fminunc`函数调用一个无约束优化算法,或者使用`fmincon`函数调用带约束的优化算法。

对于非线性约束优化问题,想要求解最优解,可以使用`fmincon`函数。

以下是一个使用`fmincon`函数的示例:```matlabx0=[0,0];%初始点A = []; b = []; Aeq = []; beq = []; % 约束条件lb = [-10, -10]; ub = [10, 10]; % 取值范围options = optimoptions('fmincon'); % 设定优化选项```除了优化选项,Matlab中还有多个参数可供调整,例如算法迭代次数、容差等。

可以根据具体问题的复杂性来调整这些参数。

总而言之,Matlab提供了丰富的最优化工具箱,可以灵活地实现不同类型的最优化方法。

Matlab中的优化问题求解方法与示例分析

Matlab中的优化问题求解方法与示例分析

Matlab中的优化问题求解方法与示例分析介绍在科学与工程领域,优化问题是一个常见且重要的研究方向。

优化问题的目标是在给定的约束条件下,找到使得目标函数取得最优值的变量取值。

Matlab作为一个著名的科学计算软件,提供了丰富的优化问题求解方法。

本文将介绍Matlab中常用的优化问题求解方法,并通过实例分析来展示其应用。

一、线性规划问题的求解方法线性规划问题(Linear Programming)是一类目标函数与约束条件均为线性关系的优化问题。

Matlab中提供了线性规划问题求解的函数“linprog”和“intlinprog”。

1. linprog函数linprog函数用于求解线性规划问题,其使用方法如下:```[x, fval, exitflag, output] = linprog(f, A, b, Aeq, beq, lb, ub)```其中,f为目标函数的系数向量,A和b为不等式约束的系数矩阵和常数向量,Aeq和beq为等式约束的系数矩阵和常数向量,lb和ub为变量的下界和上界。

2. intlinprog函数intlinprog函数用于求解整数线性规划问题,即变量取值为整数的线性规划问题。

其使用方法与linprog类似,但需要添加一个参数“options”,用于设置求解器的选项。

二、非线性规划问题的求解方法非线性规划问题(Nonlinear Programming)是一类目标函数或约束条件存在非线性关系的优化问题。

Matlab中提供了多种非线性规划问题求解的函数,包括“fminunc”、“fmincon”和“lsqnonlin”。

1. fminunc函数fminunc函数用于求解没有约束条件的非线性规划问题,其使用方法如下:```[x, fval, exitflag, output] = fminunc(fun, x0)```其中,fun为目标函数的句柄,x0为变量的初始猜测值。

2. fmincon函数fmincon函数用于求解带约束条件的非线性规划问题,其使用方法如下:```[x, fval, exitflag, output, lambda] = fmincon(fun, x0, A, b, Aeq, beq, lb, ub)```参数的含义与linprog函数中的相对应参数相似,但需要注意的是,A、b、Aeq 和beq都是针对不等式约束和等式约束的系数矩阵和常数向量;lb和ub为变量的下界和上界。

Matlab中的优化问题求解方法

Matlab中的优化问题求解方法

Matlab中的优化问题求解方法在数学和工程领域,优化问题是一个重要的研究方向。

通过寻找最优解,可以提高系统的效率和性能。

Matlab提供了丰富的工具箱和函数,可以用于解决各种不同类型的优化问题。

本文将介绍一些常见的优化问题求解方法,并针对它们在Matlab中的应用进行分析和讨论。

第一种常见的优化问题求解方法是线性规划(Linear Programming,LP)。

在线性规划中,目标函数和约束条件都是线性的。

通过寻找使得目标函数达到最大或最小的变量取值,可以获得问题的最优解。

Matlab中的优化工具箱提供了linprog函数,可以用于求解线性规划问题。

该函数采用单纯形算法或内点算法进行求解,并且可以处理带有等式和不等式约束的问题。

用户只需提供目标函数系数、约束矩阵和约束向量,即可得到问题的最优解和最优值。

除了线性规划,二次规划(Quadratic Programming,QP)也是常见的优化问题求解方法。

在二次规划中,目标函数是一个二次函数,约束条件可以是线性的或二次的。

Matlab中的优化工具箱提供了quadprog函数,可以用于求解二次规划问题。

该函数基于内点算法或者信赖域反射算法进行求解。

用户只需提供目标函数的二次项系数、一次项系数以及约束矩阵和约束向量,即可得到问题的最优解和最优值。

除了线性规划和二次规划,非线性规划(Nonlinear Optimization)也是常见的优化问题求解方法。

与线性规划和二次规划不同,非线性规划中的目标函数和约束条件可以是非线性的。

Matlab中的优化工具箱提供了fmincon函数,可以用于求解约束非线性优化问题。

该函数采用内点法、SQP法或者信赖域反射法进行求解。

用户需要提供目标函数、约束函数以及约束类型,并设定初始解,即可得到问题的最优解和最优值。

除了上述三种基本的优化问题求解方法,约束最小二乘(Constrained Least Squares)问题也是一个重要的优化问题。

如何使用Matlab进行多目标优化

如何使用Matlab进行多目标优化

如何使用Matlab进行多目标优化使用Matlab进行多目标优化概述:多目标优化是在现实问题中常见的一种优化方法,即需要优化多个目标函数,而非只有一个目标函数。

这篇文章将介绍如何使用Matlab进行多目标优化,包括问题建模、求解方法和实例分析。

1. 问题建模在进行多目标优化之前,需要将实际问题建模为数学模型。

首先,明确问题的决策变量和目标函数。

决策变量是需要优化的参数或变量,而目标函数是需要最小化或最大化的指标。

例如,我们要优化一个生产系统的成本和产量,可以将成本设为一个目标函数,产量设为另一个目标函数。

2. 目标权重设定由于多目标优化存在矛盾或折衷的情况,需要设定目标函数的权重。

权重反映了各个目标函数的重要性,较高的权重意味着对应的目标更重要。

例如,在上述生产系统的例子中,如果成本比产量更重要,可以给成本赋予较高的权重。

3. 多目标优化求解方法Matlab提供了多种多目标优化求解方法,常用的有基于进化算法的优化方法,例如遗传算法、粒子群优化算法等。

这些方法通过不断迭代搜索解空间,逐步找到最优解。

以下是使用Matlab进行多目标优化的一般步骤:a) 定义优化问题的问题函数,包括目标函数和约束条件。

b) 设定优化问题的求解选项,例如优化算法、迭代次数和收敛准则等。

c) 运行优化求解器,获得最优解或近似最优解。

d) 对求解结果进行分析和评价。

4. 多目标优化实例分析为了更好地理解如何使用Matlab进行多目标优化,我们以一个简单的例子进行分析。

假设有一个三维空间内的旅行商问题,即找到一条路径,使得旅行距离最短、花费最少以及时间最短。

我们可以将问题建模为一个三目标优化问题:目标一:最小化旅行距离。

目标二:最小化旅行花费。

目标三:最小化旅行时间。

通过定义目标函数和约束条件,我们可以使用Matlab的多目标优化求解器,如gamultiobj函数,来获得近似最优解。

在求解过程中,可以通过设置收敛准则、种群大小等选项来调节求解参数。

优化问题的Matlab求解方法

优化问题的Matlab求解方法

优化问题的Matlab求解方法引言优化问题在实际生活中有着广泛应用,可以用来解决很多实际问题。

Matlab作为一款强大的数学计算软件,提供了多种求解优化问题的方法。

本文将介绍在Matlab中求解优化问题的常见方法,并比较它们的优缺点。

一、无约束无约束优化问题是指没有约束条件的优化问题,即只需要考虑目标函数的最大或最小值。

在Matlab中,可以使用fminunc函数来求解无约束优化问题。

该函数使用的是拟牛顿法(quasi-Newton method),可以迭代地逼近最优解。

拟牛顿法是一种迭代方法,通过逐步近似目标函数的梯度和Hessian矩阵来求解最优解。

在使用fminunc函数时,需要提供目标函数和初始点,并可以设置其他参数,如迭代次数、容差等。

通过不断迭代,拟牛顿法可以逐步逼近最优解。

二、有约束有约束优化问题是指在优化问题中加入了约束条件。

对于有约束优化问题,Matlab提供了多种求解方法,包括线性规划、二次规划、非线性规划等。

1. 线性规划线性规划是指目标函数和约束条件都为线性的优化问题。

在Matlab中,可以使用linprog函数来求解线性规划问题。

该函数使用的是单纯形法(simplex method),通过不断迭代来逼近最优解。

linprog函数需要提供目标函数的系数矩阵、不等式约束矩阵和约束条件的右手边向量。

通过调整这些参数,可以得到线性规划问题的最优解。

2. 二次规划二次规划是指目标函数为二次型,约束条件线性的优化问题。

在Matlab中,可以使用quadprog函数来求解二次规划问题。

该函数使用的是求解二次规划问题的内点法(interior-point method),通过迭代来求解最优解。

quadprog函数需要提供目标函数的二次项系数矩阵、线性项系数矩阵、不等式约束矩阵和约束条件的右手边向量。

通过调整这些参数,可以得到二次规划问题的最优解。

3. 非线性规划非线性规划是指目标函数或者约束条件中至少有一个是非线性的优化问题。

Matlab中的多目标优化算法实现指南

Matlab中的多目标优化算法实现指南

Matlab中的多目标优化算法实现指南简介:多目标优化是在现实问题中常见的一种情况,例如在工程设计、金融投资和决策支持等领域。

Matlab作为一种强大的数值计算和工程仿真软件,提供了多种多目标优化算法的工具箱,如NSGA-II、MOGA等。

本文将介绍如何使用Matlab实现多目标优化算法,并给出一些应用示例。

一、多目标优化问题多目标优化问题是指在存在多个冲突的目标函数的情况下,找到一组最优解,使得这些目标函数能够达到最优。

在现实问题中,通常会涉及到多个目标,例如在工程设计中同时考虑成本和性能,或者在金融投资中同时考虑风险和收益等。

二、Matlab的多目标优化工具箱Matlab提供了多种多目标优化算法的工具箱,如Global Optimization Toolbox、Optimization Toolbox等。

这些工具箱可以帮助用户快速实现多目标优化算法,并且提供了丰富的优化函数和评价指标。

三、NSGA-II算法实现NSGA-II(Non-dominated Sorting Genetic Algorithm II)是一种常用的多目标优化算法,它通过遗传算法的方式来搜索最优解。

在Matlab中,我们可以使用NSGA-II工具箱来实现该算法。

1. 确定目标函数首先,我们需要确定待优化的问题中具体的目标函数,例如最小化成本和最大化性能等。

在Matlab中,我们可以使用函数句柄来定义这些目标函数。

2. 设定决策变量决策变量是影响目标函数的参数,我们需要确定这些变量的取值范围。

在Matlab中,可以使用函数句柄或者向量来定义这些变量。

3. 设定其他参数除了目标函数和决策变量,NSGA-II算法还需要其他一些参数,例如种群大小、迭代次数等。

在Matlab中,我们可以使用结构体来存储这些参数。

4. 运行算法将目标函数、决策变量和其他参数传递给NSGA-II工具箱,然后运行算法。

Matlab会自动进行优化计算,并给出一组最优解。

MATLAB中的优化算法及其使用方法

MATLAB中的优化算法及其使用方法

MATLAB中的优化算法及其使用方法1. 引言在科学与工程领域,优化问题是一类常见且重要的问题。

它涉及到在给定约束条件下,寻找最优解或使目标函数达到最小或最大值的问题。

在解决这类问题时,MATLAB是一个非常强大且常用的工具,它提供了多种优化算法和函数。

本文将介绍MATLAB中的部分常见优化算法及其使用方法。

2. 优化问题的形式化表示在应用优化算法之前,首先需要将优化问题进行形式化表示。

假设我们要解决一个优化问题,其中有一个目标函数f(x)和一组约束条件h(x) = 0和g(x) ≤ 0。

这里,x是一个n维向量,表示我们要优化的参数。

3. 无约束优化算法无约束优化算法用于解决没有约束条件的优化问题。

MATLAB中提供了多个无约束优化算法,常用的有fminunc和fminsearch。

3.1 fminunc函数fminunc函数是MATLAB中用于寻找无约束优化问题最小值的函数。

它基于梯度下降算法,通过迭代优化来逼近最优解。

使用fminunc函数,我们需要提供目标函数和初始解作为输入参数,并指定其他可选参数,如最大迭代次数和精度要求。

3.2 fminsearch函数fminsearch函数也是用于无约束优化问题的函数,但与fminunc不同的是,它使用了模拟退火算法来搜索最优解。

使用fminsearch函数,我们需要提供目标函数和初始解作为输入参数,并指定其他可选参数,如最大迭代次数和收敛容忍度。

4. 约束优化算法约束优化算法用于解决带有约束条件的优化问题。

MATLAB中提供了多个约束优化算法,常用的有fmincon和ga。

4.1 fmincon函数fmincon函数是MATLAB中用于求解约束优化问题的函数。

它基于拉格朗日乘子法,并使用内点法等技术来求解约束优化问题。

使用fmincon函数,我们需要提供目标函数、约束条件、初始解和约束类型等作为输入参数,并指定其他可选参数,如最大迭代次数和精度要求。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

模板匹配MATLAB实现及算法优化一、引言现代社会已进入信息时代,随着计算机技术、通信技术和数学的发展,图像信息处理能力和水平也不断提高,相应的也得到和更多关注、研究和更加广泛的应用。

图像匹配是图像处理的一项关键技术,可广泛用于目标识别与跟踪、立体视觉、变化检测、车场车牌识别、人脸识别、机器人导航、测绘、等领域,已成为一门新兴的分支学科。

由于拍摄时间、拍摄角度、自然环境的变化、多种传感器的使用和传感器本身的缺陷,使拍摄的图像不仅受噪声的影响,而且存在严重的灰度失真和几何畸变。

在这种条件下,如何有效地进行图像匹配一直是人们研究的热点和难点。

要研究模板匹配,首先必须明确模板匹配的定义:模板匹配是指通过一定的匹配算法在两幅或多幅图像之间识别同名点,如二维图像匹配中通过比较目标区和搜索区中相同大小的窗口的相关系数,取搜索区中相关系数最大所对应的窗口中心点作为同名点。

其实质是在基元相似性的条件下,运用匹配准则的最佳搜索问题。

简单的讲就是,要判读一幅大图像中是否存在某种已知的图案,则以一幅与该图案有着相同尺寸和方向的小图像为模板,通过一定的算法可以在图中找到目标,确定其坐标位置。

那么如何实现模板与原图像的匹配呢?下面将结合一个具体例子说明模板匹配的实现过程。

二、 问题描述及解决方法1. 问题描述现有模板如下图:原图如下图:问题:如何在原图中找到模板所处的位置,并把该位置标记出来。

2. 解决方法首先必须建立判断模板与原图相应位置相似程度的准则。

对于彩色图像,是基于图像的特征匹配;而灰度图像,则是基于相关函数。

本实验的处理对象主要是灰度图片。

相关函数又分成两类:(1) 差值测度。

计算公式如下:max |(,)(,)|f x y g x y ε=-|(,)(,)|Df x yg x y dxdy ε=-⎰⎰22[(,)(,)]Df x yg x y dxdy ε=-⎰⎰(2) 相关测度。

计算公式如下:1222(,)(,)(,)[(,)(,)]D D D f x y g x y dxdy p x y f x y dxdy g x y dxdy =⋅⎰⎰⎰⎰⎰⎰显然,上式中的p(x,y)取值范围是0到1。

越接近于0,表示两图像相差越大;越接近于1,表示两图像越相似。

有了描述相似程度的数学模型,接下来就可以用MATLAB 编程实现模板匹配,从而解决上述问题了。

三、 MATLAB 实现要实现这个程序,必须有三个重要组成部分:1. 模板循环功能:实现模板扫过原图的每一个像素点。

语句:for i=1:M-mfor j=1:N-nendend描述:以模板左上角第一个点为标志点,使其依次从左到右、从上到下扫过原图每一个像素点。

2. 相似性判断功能:在每一次循环时,计算模板与覆盖的原图区域的相似程度,并判断两图像是否相似。

语句:temp=imcrop(im,[j,i,n-1,m-1]);r=corr2(temp,T);%È¡µÃÏà¹ØÏµÊýif r>0.95%¹æ¶¨ÖµÎª0.95end描述:(1) imcrop 是MATLAB 自带库函数,实现的是图像裁剪的功能,这里使用此函数,可以得到原图上被模板覆盖区域,与模板同尺寸的矩阵。

(2) corr2也是MATLAB 自带库函数,是用来计算两个矩阵的相关测度的。

(3) 0.95是置信阈值,当相关测度大于0.95时,就认为模板匹配成功。

3. 标识原图上匹配成功的区域功能:用框圈出或高亮显示原图上与模板匹配成功的区域位置。

语句:plot(j:j+n,i,'w');plot(j:j+n,i+m,'w');plot(j,i:i+m,'w');plot(j+n,i:i+m,'w');描述:此语句实现用方框圈出匹配成功区域。

实验结果如图:四、算法优化模板匹配在实际应用中经常用于制导导引头、传感器等,这类设备计算能力、内存有限,且要求在较短时间内得到处理结果。

因此,以减少处理计算量、加快处理速度为目的的算法优化必不可少。

我个人将优化的方式分为三种:循环次数优化,具体有粗精匹配相结合、乱序匹配等;相似性计算优化,这是我们此次实验的着眼点,将做具体介绍;以及以上两种思路的结合优化。

通过上文列举的相似性计算准则可知,不同数学模型的计算量明显不同,而多种相似性计算公式的存在也为算法优化提供了可能。

1.差值测度优化思路:相比相关测度计算,差值测度只计算减法,所以在计算量上将大大降低。

语句:temp=imcrop(im,[j,i,n-1,m-1]);a=temp-T;b=abs(a);e=max(a);if e<50;end结果:未优化运行时间:T=3.9746s采用差值测度优化后运行时间:T=1.7524s2.TMP优化思路:TMP法首先认为原图与模板具有相同的直流分量,那么只要检测除直流分量能量外的能量水平,就可以判断相似性。

语句:Nimage=im(i:i+r2-1,j:j+c2-1);Nimage=Nimage-mean(mean(Nimage));corr=sum(sum(Nimage.*image22));M(i,j)=corr/sqrt(sum(sum(Nimage.^2)));结果:采用TMP优化算法后运行时间:T=1.5853s3.TMC优化思路:TMC法原理与TMP法相同,只是在计算时省略了归一化过程。

语句:Nimage=im(i:i+r2-1,j:j+c2-1);Nimage=Nimage-mean(mean(Nimage));corr=sum(sum(Nimage.*image22));corrMat(i,j)=corr;结果:采用TMC优化算法后运行时间:T=1.140s4.边缘检测优化思路:以上所有算法的处理对象都是模板及原图包含的所有信息,但是区别一个物体最直观的方式是区分他的轮廓,所以如果先提取原图与模板轮廓,然后再进行匹配计算,则在保证精度的基础上可以大大减少信息处理量。

语句:tedge = edge(tt);wedge = edge(ww);out = filter2(tedge,wedge);o = max(max(out));output = (1/o)*out;结果:采用边缘检测优化算法后运行时间:T=0.0964s结论:以上4种优化算法相比原未优化算法,在处理相同模板匹配问题的前提下,都显著提升了运行速度。

这几种算法中,边缘检测优化算法更具优势。

五、主要程序1.未优化原程序clcclearclose alltic;im=imread('D:\1120120260 ÕÔ´«\t-m\letters.jpg');%¶ÁÈ¡Ô-ͼÏñT=imread('D:\1120120260 ÕÔ´«\t-m\K.jpg');%¶ÁȡƥÅäͼÏñimshow(im);im=rgb2gray(im);%½«Ô-ͼ»Ò¶È»¯T=rgb2gray(T);%½«Æ¥Åäͼ»Ò¶È»¯im=double(im);T=double(T);[m,n]=size(T);%»ñȡƥÅäͼÏóµÄ´óС³ß[M,N]=size(im);%»ñÈ¡Ô-ͼÏóµÄ´óС³ß´çhold onfor i=1:M-mfor j=1:N-ntemp=imcrop(im,[j,i,n-1,m-1]);r=corr2(temp,T);%È¡µÃÏà¹ØÏµÊýif r>0.95%¹æ¶¨ÖµÎª0.95%ÏÂÃæÓÃplotº¯ÊýÔÚÔ-ͼµÄ×ø±êϵÉÏ»-³öÆ¥ÅäÇøÓòplot(j:j+n,i,'w');plot(j,i:i+m,'w');plot(j+n,i:i+m,'w');endendendtime=toc;2.差值测度优化clcclearclose alltic;im=imread('D:\1120120260 ÕÔ´«\t-m\letters.jpg');%¶ÁÈ¡Ô-ͼÏñT=imread('D:\1120120260 ÕÔ´«\t-m\K.jpg');%¶ÁȡƥÅäͼÏñimshow(im);im=rgb2gray(im);%½«Ô-ͼ»Ò¶È»¯T=rgb2gray(T);%½«Æ¥Åäͼ»Ò¶È»¯im=double(im);T=double(T);[m,n]=size(T);%»ñȡƥÅäͼÏóµÄ´óС³ß[M,N]=size(im);%»ñÈ¡Ô-ͼÏóµÄ´óС³ß´çhold onfor i=1:M-mfor j=1:N-ntemp=imcrop(im,[j,i,n-1,m-1]);a=temp-T;b=abs(a);e=max(a);if e<50; %ÈÏΪ×î´óÎó²îСÓÚ50¼´Æ¥Åä³É¹¦%ÏÂÃæÓÃplotº¯ÊýÔÚÔ-ͼµÄ×ø±êϵÉÏ»-³öÆ¥ÅäÇøÓòplot(j:j+n,i,'w');plot(j:j+n,i+m,'w');plot(j,i:i+m,'w');endendendtime=toc;3.TMP优化clcclearclose alltic;im=imread('D:\1120120260 ÕÔ´«\t-m\letters.jpg');%¶ÁÈ¡Ô-ͼÏñT=imread('D:\1120120260 ÕÔ´«\t-m\K.jpg');%¶ÁȡƥÅäͼÏñim=rgb2gray(im);%½«Ô-ͼ»Ò¶È»¯T=rgb2gray(T);%½«Æ¥Åäͼ»Ò¶È»¯im=double(im);T=double(T);[r1,c1]=size(im);[r2,c2]=size(T);image22=T-mean(mean(T));%»ùÓÚÄÜÁ¿·¨µÄÏà¹ØÐÔ¼ì²âM=[];for i=1:(r1-r2+1)for j=1:(c1-c2+1)Nimage=im(i:i+r2-1,j:j+c2-1);Nimage=Nimage-mean(mean(Nimage)); % ÓëÄ£°åÖØºÏ²¿·ÖÔ-ͼÏñµÄ¾ùÖµ²îcorr=sum(sum(Nimage.*image22));M(i,j)=corr/sqrt(sum(sum(Nimage.^2)));endend% plot box on the target imageresult=plotbox(im,T,M);imshow(uint8(result));title('Matching Result using tmp');% figure,% subplot(2,2,1),imshow(uint8(T));title('Template');% subplot(2,2,2),imshow(uint8(im));title('Target');% subplot(2,2,3),imshow(uint8(result));title('Matching Result using tmp');time=toc;4.TMC优化clcclearclose alltic;im=imread('D:\1120120260 ÕÔ´«\t-m\letters.jpg');%¶ÁÈ¡Ô-ͼÏñT=imread('D:\1120120260 ÕÔ´«\t-m\K.jpg');%¶ÁȡƥÅäͼÏñim=rgb2gray(im);%½«Ô-ͼ»Ò¶È»¯T=rgb2gray(T);%½«Æ¥Åäͼ»Ò¶È»¯im=double(im);T=double(T);[r1,c1]=size(im);[r2,c2]=size(T);% Ä£°åµÄ¾ùÖµ²îimage22=T-mean(mean(T));corrMat=[];%»ùÓÚ¾ùÖµ²îµÄÏà¹ØÐÔ¼ìÑéfor i=1:(r1-r2+1)for j=1:(c1-c2+1)Nimage=im(i:i+r2-1,j:j+c2-1);Nimage=Nimage-mean(mean(Nimage)); % ÓëÄ£°åÖØºÏ²¿·ÖµÄͼÏñ¾ùÖµ²îcorr=sum(sum(Nimage.*image22));corrMat(i,j)=corr;endend% plot box on the target imageresult=plotbox(im,T,corrMat);imshow(uint8(result));title('Matching Result using tmc');% figure,% subplot(2,2,1),imshow(uint8(T));title('Template');% subplot(2,2,2),imshow(uint8(im));title('Target');% subplot(2,2,3),imshow(uint8(result));title('Matching Result using tmc');time=toc;5.边缘检测优化clcclearclose alltic;%¶ÁÈëͼÏñSw = imread('D:\1120120260 ÕÔ´«\t-m\letters.jpg');w = im2double(w);sizw = size(w);% figure% imshow(w)% title('Input Image')%¶ÁÈëÄ£°åTt = imread('D:\1120120260 ÕÔ´«\t-m\K.jpg');t = im2double(t);sizt = size(t);% figure% imshow(t)% title('Target Image')ww = rgb2gray(w);tt = rgb2gray(t);%ÓÅ»¯-ÓñßÔµ½øÐÐÏà¹Ø¼ì²âtedge = edge(tt);wedge = edge(ww);%²ÉÓþí»ýÅжÏÏà¹ØÐÔ£¬ÈôÏàͬ£¬¾í»ý×î´óout = filter2(tedge,wedge);o = max(max(out));output = (1/o)*out;%ÕÒµ½Ä£°åλÖ㬲¢¸ßÁÁÏÔʾģ°åÇøÓòpixel = find(output == 1); pcolumn = fix(pixel / sizw(1)); prow = mod(pixel,sizw(1));rdis = fix(sizt(1)/2);cdis = fix(sizt(2)/2);cmin = pcolumn - cdis;cmax = pcolumn + cdis;rmin = prow - rdis;rmax = prow + rdis;c = [cmincmincmaxcmax];r = [rminrmaxrmaxrmin];m = roipoly(ww,c,r);m = im2double(m);% figure,imshow(m);m = 0.5 * (m + 1);mask(:,:,1) = m;mask(:,:,2) = m;mask(:,:,3) = m;final = mask .* w;figureimshow(final)title('Result Image')time=toc;6.plotbox子程序function result=plotbox(im,T,M); [r1,c1]=size(im);[r2,c2]=size(T);[r,c]=max(M);[r3,c3]=max(max(M));i=c(c3);j=c3;result=im;for x=i:i+r2-1for y=jresult(x,y)=255;endendfor x=i:i+r2-1for y=j+c2-1result(x,y)=255; endendfor x=ifor y=j:j+c2-1result(x,y)=255; endendfor x=i+r2-1for y=j:j+c2-1result(x,y)=255; endend。

相关文档
最新文档