当前位置:文档之家› OpenCV2.0中机器学习函数与类

OpenCV2.0中机器学习函数与类

OpenCV2.0中机器学习函数与类
OpenCV2.0中机器学习函数与类

OpenCV2.0中机器学习函数与类

目录

https://www.doczj.com/doc/af9667179.html,/index.

php/%E6%9C%BA%E5%9

9%A8%E5%AD%A6%E4%

B9%A0%E4%B8%AD%E6

%96%87%E5%8F%82%E8

%80%83%E6%89%8B%E

5%86%8C -

.E7.AE.80.E4.BB.8B.EF.B

C.9A.E9.80.9A.E7.94.A8.

E7.B1.BB.E5.92.8C.E5.87.

BD.E6.95.B0? 1 简

介:通用类和函数o

1.1 CvStatModel

o 1.2 CvStatModel::CvStatModel

o 1.3 CvStatModel::CvStatModel(...) o

1.4 CvStatModel::~CvStatModel

o 1.5 CvStatModel::clear

o 1.6 CvStatModel::save

o 1.7 CvStatModel::load

o 1.8 CvStatModel::write

o 1.9 CvStatModel::read

o 1.10 CvStatModel::train

o 1.11 CvStatModel::predict

? 2 Normal Bayes 分类器

o 2.1 CvNormalBayesClassifier

o 2.2 CvNormalBayesClassifier::train

o 2.3 CvNormalBayesClassifier::predict

? 3 K 近邻算法

o 3.1 CvKNearest

o 3.2 CvKNearest::train

o 3.3 CvKNearest::find_nearest

o 3.4 例程:使用kNN 进行2 维样本集的分类,样本集的分布为混合高斯分布

? 4 支持向量机部分

o 4.1 CvSVM

o 4.2 CvSVMParams

o 4.3 CvSVM::train

o 4.4 CvSVM::get_support_vector*

o 4.5 补充:在 WindowsXP+OpenCVRC1 平台下整合 OpenCV 与 libSVM

o 4.6 常用 libSVM 资料链接

? 5 决策树

o 5.1 CvDTreeSplit

o 5.2 CvDTreeNode

o 5.3 CvDTreeParams

o 5.4 CvDTreeTrainData o 5.5 CvDTree

o 5.6 CvDTree::train

o 5.7 CvDTree::predict

? 6 Boosting

o 6.1 CvBoostParams

o 6.2 CvBoostTree

o 6.3 CvBoost

o 6.4 CvBoost::train

o 6.5 CvBoost::predict

o 6.6 CvBoost::prune

o 6.7 CvBoost::get_weak_predictors

? 7 Random Trees

? 8 Expectation-Maximization

o 8.1 CvEMParams

o 8.2 nclusters

o 8.3 cov_mat_type o

8.4 start_step

o 8.5 term_crit o

8.6 probs

o 8.7 weights o

8.8 covs

o 8.9 means

? 9 神经网络

? 10 中文翻译者

[ 编辑]

简介:通用类和函数

机器学习库(MLL)是一些用于分类、回归和数据聚类的类和函数。

大部分分类和回归算法是用 C++类来实现。尽管这些算法有一些不同的特性(像处理 missing measurements 的能力,或者 categorical input variables

等),这些类之间有一些相同之处。这些相同之处在类 CvStatModel 中被定义,其他 ML 类都是从这个类中继承。

[ 编辑]

CvStatModel

ML 库中的统计模型基类。

class CvStatModel

{

public:

/* CvStatModel(); */

/* CvStatModel( const CvMat* train_data ... ); */

virtual ~CvStatModel();

virtual void clear()=0;

/* virtual bool train( const CvMat* train_data, [int tflag,] ..., const CvMat* responses, ...,

[const CvMat* var_idx,] ..., [const CvMat* sample_idx,] ...

[const CvMat* var_type,] ..., [const CvMat* missing_mask,]

... )=0;

*/

/* virtual float predict( const CvMat* sample ... ) const=0; */

virtual void save( const char* filename, const char* name=0 )=0; virtual void

load( const char* filename, const char* name=0 )=0;

virtual void write( CvFileStorage* storage, const char* name )=0; virtual void

read( CvFileStorage* storage, CvFileNode* node )=0;

};

在上面的声明中,一些函数被注释掉。实际上,一些函数没有一个单一的API (缺省的构造函数除外),然而,在本节后面描述的语法和定义方面有一些相似之处,好像他们是基类的一部分一样。

注意:opencv 1.0 版本对 CvStatModel 类做了修改,类的声明如下。

class CV_EXPORTS CvStatModel

{

public:

CvStatModel();

virtual ~CvStatModel();

virtual void clear();

virtual void save( const char* filename, const char* name=0 ); virtual void

load( const char* filename, const char* name=0 );

virtual void write( CvFileStorage* storage, const char* name ); virtual void

read( CvFileStorage* storage, CvFileNode* node );

protected:

const char* default_model_name;

}; [ 编

辑]

CvStatModel::CvStatModel

缺省构造函数

CvStatModel::CvStatModel();

ML 中的每个统计模型都有一个无参数构造函数。这个构造函数在"两步法"构造

时非常有用,先调用这个缺省构造函数,紧接着调用 tranin() 或者 load() 函

数.(This constructor is useful for 2-stage model construction, when the default constructor is followed by train() or load().)

[ 编辑]

CvStatModel::CvStatModel(...)

训练构造函数

CvStatModel::CvStatModel( const CvMat* train_data ... ); */

大多数 ML 类都提供一个单步创建+训练的构造函数。此构造函数等价于缺省构造函数,加上一个紧接的 train() 方法调用,所传入的参数即为调用的参数。

[ 编辑]

CvStatModel::~CvStatModel

虚拟析构函数(Virtual destructor)

CvStatModel::~CvStatModel();

基类析构被声明为虚方法,因此你可以安全地写出下面的代码:CvStatModel* model;

if( use_svm )

model = new CvSVM(... /* SVM params */);

else

model = new CvDTree(... /* Decision tree params */);

...

delete model;

一般,每个继承类的析构器不用做任何操作,但是如果调用了重载的 clear()

方法,将释放全部内存资源。

[ 编辑]

CvStatModel::clear

释放内存,重置模型状态

void CvStatModel::clear();

clear 方法和析构函数发生的行为相似,比如:clear 方法释放类成员所占用的内存空间。然而,和析构函数不同的是,clear 方法不析构对象自身,也即调用clear 方法后,对象本身在将来仍然可以使用。一般情况下,析构器、load 方法、read 方法、派生类 train 成员调用 clear 方法释放内存空间,甚至是用户也可以进行明确的调用。

[ 编辑]

CvStatModel::save

将模型保存到文件

void CvStatModel::save( const char* filename, const char* name=0 );

save 方法将整个模型状态以指定名称或默认名称(取决于特定的类)保存到指定的 XML 或 YAML 文件中。该方法使用的是 cxcore 中的数据保存功能。[ 编辑]

CvStatModel::load

从文件中装载模型

void CvStatModel::load( const char* filename, const char* name=0 );

load 方法从指定的 XML 或 YAML 文件中装载指定名称(或默认的与模型相

关名称)的整个模型状态。之前的模型状态将被 clear()清零。

请注意,这个方法是虚的,因此任何模型都可以用这个虚方法来加载。然而,不像OpenCV 中的C 类型可以用通用函数cvLoad()来加载,这里模型类型无论如何都要是已知的,因为一个空模型作为恰当类的一种,必须被预先建

构。这个限制将会在未来的 ML 版本中移除。[ 编辑]

CvStatModel::write

将模型写入文件存储

void CvStatModel::write( CvFileStorage* storage, const char* name );

write 方法将整个模型状态用指定的或默认的名称(取决于特定的类)写到文件存储中去。这个方法被 save()调用。

[ 编辑]

CvStatModel::read

从文件存储中读出模型

void CvStatMode::read( CvFileStorage* storage, CvFileNode* node );

read 方法从文件存储中的指定节点中读取整个模型状态。这个节点必须由用户来定位,如使用 cvGetFileNodeByName()函数。这个方法被 load()调用。

之前的模型状态被 clear()清零。

[ 编辑]

CvStatModel::train

训练模型

bool CvStatMode::train( const CvMat* train_data, [int tflag,] ..., const CvMat* responses, ...,

[const CvMat* var_idx,] ..., [const CvMat* sample_idx,] ...

[const CvMat* var_type,] ..., [const CvMat* missing_mask,]

... );

这个函数利用输入的特征向量和对应的响应值(responses)来训练统计模型。特征向量和其对应的响应值都是用矩阵来表示。缺省情况下,特征向量都以行向量被保存在 train_data 中,也就是所有的特征向量元素都是连续存储。不过,一些算法可以处理转置表示,即特征向量用列向量来表示,所有特征向量的相同位置的元素连续存储。如果两种排布方式都支持,这个函数的参数 tflag 可以使用下面的取值:

tflag=CV_ROW_SAMPLE

tflag=CV_COL_SAMPLE

训练数据必须是 32fC1(32 位的浮点数,单通道)格式响应值通常是以向量方

式存储(一个行,或者一个列向量),存储格式为 32sC1(仅在分类问题中)

或者 32fC1 格式,每个输入特征向量对应一个值(虽然一些算法,比如某几种

神经网络,响应值为向量)。

对于分类问题,响应值是离散的类别标签;对于回归问题,响应值是被估计函

数的输出值。一些算法只能处理分类问题,一些只能处理回归问题,另一些算

法这两类问题都能处理。In the latter case the type of output variable is either passed as separate parameter, or as a last element of var_type vector:

CV_VAR_CATEGORICAL means that the output values are discrete class labels,

CV_VAR_ORDERED(=CV_VAR_NUMERICAL) means that the output values are ordered, i.e. 2 different values can be compared as numbers, and this is a regression problem The types of input variables can be also specified using var_type. Most algorithms can handle only ordered input variables.

ML 中的很多模型也可以仅仅使用选择特征的子集,或者(并且)使用选择样本的子集来训练。为了让用户易于使用,train 函数通常包含 var_idx 和 sample_idx 参数。var_idx 指定感兴趣的特征,sample_idx 指定感兴趣的样本。这两个向量可以是整数(32sC1)向量,例如以 0 为开始的索引,或者 8 位(8uC1) 的使用的特征或者样本的掩码。用户也可以传入 NULL 指针,用来表示训练中使用所有变量/样本。

除此之外,一些算法支持数据缺失情况,也就是某个训练样本的某个特征值未

知(例如,他们忘记了在周一测量病人 A 的温度)。参数 missing_mask,一个

8 位的同train_data 同样大小的矩阵掩码,用来指示缺失的数据(掩码中的非

零值)。

通常来说,在执行训练操作前,可以用clear()函数清除掉早先训练的模型状态。然而,一些函数可以选择用新的数据更新模型,而不是将模型重置,一切

从头再来。

[ 编辑]

CvStatModel::predict

预测样本的 response

float CvStatMode::predict( const CvMat* sample[,

] ) const;

这个函数用来预测一个新样本的响应值(response)。在分类问题中,这个函数返回类别编号;在回归问题中,返回函数值。输入的样本必须与传给

train_data 的训练样本同样大小。如果训练中使用了 var_idx 参数,一定记住在predict 函数中使用跟训练特征一致的特征。

后缀const 是说预测不会影响模型的内部状态,所以这个函数可以很安全地从

不同的线程调用。

[ 编辑]

Normal Bayes 分类器

这个简单的分类器模型是建立在每一个类别的特征向量服从正态分布的基础上

的(尽管,不必是独立的),因此,整个分布函数被假设为一个高斯分布,每

一类别一组系数。当给定了训练数据,算法将会估计每一个类别的向量均值和

方差矩阵,然后根据这些进行预测。 [Fukunaga90] K. Fukunaga.

Introduction to Statistical Pattern Recognition. second ed., New York: Academic Press, 1990.

注:OpenCV 1.0rc1(0.9.9)版本的贝叶斯分类器有个小 bug,训练数据时候会

提示错误

OpenCV ERROR: Formats of input arguments do not match () in

function cvSVD, cxsvd.cpp(1243)

修改方法为将文件 ml/src/mlnbayes.cpp 中的 193 行:

CV_CALL( cov = cvCreateMat( _var_count, _var_count, CV_32FC1 ));

改为

CV_CALL( cov = cvCreateMat( _var_count, _var_count, CV_64FC1 ));

此问题在 OpenCV 1.0.0 中已经得到修正。

[ 编辑]

CvNormalBayesClassifier

对正态分布的数据的贝叶斯分类器

class CvNormalBayesClassifier : public CvStatModel

{

public:

CvNormalBayesClassifier();

virtual ~CvNormalBayesClassifier();

CvNormalBayesClassifier( const CvMat* _train_data, const CvMat*

_responses,

const CvMat* _var_idx=0, const CvMat* _sample_idx=0 );

virtual bool train( const CvMat* _train_data, const CvMat* _responses, const CvMat* _var_idx = 0, const CvMat* _sample_idx=0, bool

update=false );

virtual float predict( const CvMat* _samples, CvMat* results=0 ) const;

virtual void clear();

virtual void save( const char* filename, const char* name=0 ); virtual void

load( const char* filename, const char* name=0 );

virtual void write( CvFileStorage* storage, const char* name ); virtual void

read( CvFileStorage* storage, CvFileNode* node );

protected:

...

}; [ 编

辑]

CvNormalBayesClassifier::train

训练这个模型

bool CvNormalBayesClassifier::train( const CvMat* _train_data, const CvMat*

_responses,

const CvMat* _var_idx = 0, const CvMat* _sample_idx=0, bool update=false );

这个函数训练正态贝叶斯分类器。并且遵循通常训练“函数”的以下一些限制:只支持 CV_ROW_SAMPLE 类型的数据,输入的变量全部应该是有序的,输出的变量是一个分类结果。(例如,_responses 中的元素必须是整数,因此向量的类型有可能是 32fC1 类型的),不支持 missing, measurements。

另外,有一个 update 标志,标志着模型是否使用新数据升级。 In addition,

there is update flag that identifies, whether the model should be trained from scratch (update=false) or be updated using the new training data (update=true).

[ 编辑]

CvNormalBayesClassifier::predict

对未知的样本或或本集进行预测

float CvNormalBayesClassifier::predict( const CvMat* samples, CvMat* results=0 ) const;

这个函数估计输入向量的最有可能的类别。输入向量(一个或多个)被储存在矩阵的每一行中。对于多个输入向量,则输出会是一个向量结果。对于单一的输入,函数本身的返回值就是预测结果。

[ 编辑]

K 近邻算法

这个算法首先贮藏所有的训练样本,然后通过分析(包括选举,计算加权和等方式)一个新样本周围K 个最近邻以给出该样本的相应值。这种方法有时候被称作“基于样本的学习”,即为了预测,我们对于给定的输入搜索最近的已知其相应的特征向量。

[ 编辑]

CvKNearest

K 近邻类

class CvKNearest : public CvStatModel //继承自 ML 库中的统计模型基类

{

public:

CvKNearest();

virtual ~CvKNearest(); //虚函数定义

CvKNearest( const CvMat* _train_data, const CvMat* _responses, const

CvMat* _sample_idx=0, bool _is_regression=false,

int max_k=32 );

virtual bool train( const CvMat* _train_data, const CvMat* _responses,

const CvMat* _sample_idx=0, bool

is_regression=false,

int _max_k=32, bool _update_base=false );

virtual float find_nearest( const CvMat* _samples, int k, CvMat* results, const float** neighbors=0, CvMat* neighbor_responses=0, CvMat*

dist=0 ) const;

virtual void clear(); int

get_max_k() const;

int get_var_count() const; int

get_sample_count() const; bool

is_regression() const;

protected:

...

}; [ 编

辑]

CvKNearest::train

训练 KNN 模型

bool CvKNearest::train( const CvMat* _train_data, const CvMat*

_responses,

const CvMat* _sample_idx=0, bool

is_regression=false,

int _max_k=32, bool _update_base=false );

这个类的方法训练 K 近邻模型。它遵循一个一般训练方法约定的限制:只支持CV_ROW_SAMPLE 数据格式,输入向量必须都是有序的,而输出可以是无序的(当 is_regression=false),可以是有序的(is_regression=true)。并且变量子集

和省略度量是不被支持的。

参数_max_k 指定了最大邻居的个数,它将被传给方法 find_nearest。参数

_update_base 指定模型是由原来的数据训练(_update_base=false),还是被新训练数据更新后再训练(_update_base=true)。在后一种情况下_max_k 不能大于原值, 否则它会被忽略.

[ 编辑]

CvKNearest::find_nearest

寻找输入向量的最近邻

float CvKNearest::find_nearest( const CvMat* _samples, int k, CvMat* results=0, const float** neighbors=0, CvMat* neighbor_responses=0, CvMat*

dist=0 ) const;

对每个输入向量(表示为 matrix_sample 的每一行),该方法找到 k(k≤

get_max_k() )个最近邻。在回归中,预测结果将是指定向量的近邻的响应的

均值。在分类中,类别将由投票决定。

对传统分类和回归预测来说,该方法可以有选择的返回近邻向量本身的指针(neighbors, array of k*_samples->rows pointers),它们相对应的输出值(neighbor_responses, a vector of k*_samples->rows elements) ,和输入向量与近

邻之间的距离(dist, also a vector of k*_samples->rows elements)。

对每个输入向量来说,近邻将按照它们到该向量的距离排序。

对单个输入向量,所有的输出矩阵是可选的,而且预测值将由该方法返回。In case of a single input vector all the output matrices are optional and the predicted value is returned by the method.

[ 编辑]

例程:使用 kNN 进行 2 维样本集的分类,样本集

的分布为混合高斯分布

#include "ml.h" #include

"highgui.h"

int main( int argc, char** argv )

{

const int K = 10;

int i, j, k, accuracy; float

response;

int train_sample_count = 100;

CvRNG rng_state = cvRNG(-1);

CvMat* trainData = cvCreateMat( train_sample_count, 2, CV_32FC1 ); CvMat* trainClasses = cvCreateMat( train_sample_count, 1,

CV_32FC1 );

IplImage* img = cvCreateImage( cvSize( 500, 500 ), 8, 3 ); float

_sample[2];

CvMat sample = cvMat( 1, 2, CV_32FC1, _sample );

cvZero( img );

CvMat trainData1, trainData2, trainClasses1, trainClasses2;

// form the training samples

cvGetRows( trainData, &trainData1, 0, train_sample_count/2 );

cvRandArr( &rng_state, &trainData1, CV_RAND_NORMAL,

cvScalar(200,200), cvScalar(50,50) );

cvGetRows( trainData, &trainData2, train_sample_count/2,

train_sample_count );

cvRandArr( &rng_state, &trainData2, CV_RAND_NORMAL,

cvScalar(300,300), cvScalar(50,50) );

cvGetRows( trainClasses, &trainClasses1, 0,

train_sample_count/2 );

cvSet( &trainClasses1, cvScalar(1) );

cvGetRows( trainClasses, &trainClasses2, train_sample_count/2,

train_sample_count );

cvSet( &trainClasses2, cvScalar(2) );

// learn classifier

CvKNearest knn( trainData, trainClasses, 0, false, K ); CvMat*

nearests = cvCreateMat( 1, K, CV_32FC1);

for( i = 0; i < img->height; i++ )

{

for( j = 0; j < img->width; j++ )

{

sample.data.fl[0] = (float)j;

sample.data.fl[1] = (float)i;

//estimates the response and get the neighbors' labels response =

knn.find_nearest(&sample,K,0,0,nearests,0);

//compute the number of neighbors representing the

majority

for( k = 0, accuracy = 0; k < K; k++ )

{

if( nearests->data.fl[k] == response)

accuracy++;

}

// highlight the pixel depending on the accuracy (or

confidence)

cvSet2D( img, i, j, response == 1 ?

机器视觉技术发展现状文献综述

机器视觉技术发展现状 人类认识外界信息的80%来自于视觉,而机器视觉就是用机器代替人眼来做 测量和判断,机器视觉的最终目标就是使计算机像人一样,通过视觉观察和理解 世界,具有自主适应环境的能力。作为一个新兴学科,同时也是一个交叉学科,取“信息”的人工智能系统,其特点是可提高生产的柔性和自动化程度。目前机器视觉技术已经在很多工业制造领域得到了应用,并逐渐进入我们的日常生活。 机器视觉是通过对相关的理论和技术进行研究,从而建立由图像或多维数据中获机器视觉简介 机器视觉就是用机器代替人眼来做测量和判断。机器视觉主要利用计算机来模拟人的视觉功能,再现于人类视觉有关的某些智能行为,从客观事物的图像中提取信息进行处理,并加以理解,最终用于实际检测和控制。机器视觉是一项综合技术,其包括数字处理、机械工程技术、控制、光源照明技术、光学成像、传感器技术、模拟与数字视频技术、计算机软硬件技术和人机接口技术等,这些技术相互协调才能构成一个完整的工业机器视觉系统[1]。 机器视觉强调实用性,要能适应工业现场恶劣的环境,并要有合理的性价比、通用的通讯接口、较高的容错能力和安全性、较强的通用性和可移植性。其更强调的是实时性,要求高速度和高精度,且具有非接触性、实时性、自动化和智能 高等优点,有着广泛的应用前景[1]。 一个典型的工业机器人视觉应用系统包括光源、光学成像系统、图像捕捉系统、图像采集与数字化模块、智能图像处理与决策模块以及控制执行模块。通过 CCD或CMOS摄像机将被测目标转换为图像信号,然后通过A/D转换成数字信号传送给专用的图像处理系统,并根据像素分布、亮度和颜色等信息,将其转换成数字化信息。图像系统对这些信号进行各种运算来抽取目标的特征,如面积、 数量、位置和长度等,进而根据判别的结果来控制现场的设备动作[1]。 机器视觉一般都包括下面四个过程:

基于机器视觉的工件识别和定位文献综述

基于机器视觉的工件识别和定位文献综述 1.前言 1.1工业机器人的现状与发展趋势 机器人作为一种最典型的应用范围广、技术附加值高的数字控制装备,在现代先进生产制造业中发挥的作用越来越重要,机器人技术的发展将会对未来生产和社会发展起到强有力的推动作用。《2l 世纪日本创建机器人社会技术发展战略报告》指出,“机器人技术与信息技术一样,在强化产业竞争力方面是极为重要的战略高技术领域。培育未来机器人产业是支撑2l 世纪日本产业竞争力的产业战略之一,具有非常重要的意义。” 研发工业机器人的初衷是为了使工人能够从单调重复作业、危险恶劣环境作业中解脱出来,但近些年来,工厂和企业引进工业机器人的主要目的则更多地是为了提高生产效率和保证产品质量。因为机器人的使用寿命很长,大都在10 年以上,并且可以全天后不间断的保持连续、高效地工作状态,因此被广泛应用于各行各业,主要进行焊接、装配、搬运、加工、喷涂、码垛等复杂作业。伴随着工业机器人研究技术的成熟和现代制造业对自动生产的需要,工业机器人越来越被广泛的应用到现代化的生产中。 现在机器人的价格相比过去已经下降很多,并且以后还会继续下降,但目前全世界范围的劳动力成本都有所上涨,个别国家和地区劳动力成本又很高,这就给工业机器人的需求提供了广阔的市场空间,工业机器人销量的保持着较快速度的增长。工业机器人在生产中主要有机器人工作单元和机器人工作生产线这两种应用方式,并且在国外,机器人工作生产线已经成为工业机器人主要的应用方式。以机器人为核心的自动化生产线适应了现代制造业多品种、少批量的柔性生产发展方向,具有广阔的市场发展前景和强劲生命力,已开发出多种面向汽车、电气机械等行业的自动化成套装备和生产线产品。在发达国家,机器人自动化生产线已经应用到了各行各业,并且已经形成一个庞大的产业链。像日本的FANUC、MOTOMAN,瑞典的ABB、德国的KUKA、意大利的COMAU 等都是国际上知名的被广泛用于自动化生产线的工业机器人。这些产品代表着当今世界工业机器人的最高水平。 我国的工业机器人前期发展比较缓慢。当将被研发列入国家有关计划后,发展速度就明显加快。特别是在每次国家的五年规划和“863”计划的重点支持下,我国机器人技术的研究取得了重大发展。在机器人基础技术和关键技术方面都取得了巨大进展,科技成果已经在实际工作中得到转化。以沈阳新松机器人为代表的国内机器人自主品牌已迅速崛起并逐步缩小与国际品牌的技术差距。 机器人涉及到多学科的交叉融合,涉及到机械、电子、计算机、通讯、控制等多个方面。在现代制造业中,伴随着工业机器人应用范围的扩大和机器人技术的发展,机器人的自动化、智能化和网络化的程度也越来越高,所能实现的功能也越来越多,性能越来越好。机器人技术的内涵已变为“灵活应用机器人技术的、具有实在动作功能的智能化系统。”目前,工业机器人技术正在向智能机器和智能系统的方向发展,其发展趋势主要为:结构的模块化和可重构化;控制技术的开放化、PC 化和网络化;伺服驱动技术的数字化和分散化;多传感器融合技术的实用化;工作环境设计的优化和作业的柔性化以及系统的网络化和智能化等方面。 1.2机器视觉在工业机器人中的应用 工业机器人是FMS(柔性加工)加工单元的主要组成部分,它的灵活性和柔性使其成为自动化物流系统中必不可少的设备,主要用于物料、工件的装卸、分捡和贮运。目前在全世界有数以百万的各种类型的工业机器人应用在机械制造、零件加工和装配及运输等领域,

基于机器视觉的产品检测技术研究

基于机器视觉的产品检测技术研究 1、机器视觉 1.1机器视觉的概念 机器视觉被定义为用计算机来模拟人的视觉功能,从客观事物的图像中提取信息,进行处理并加以理解,最终用于实际检测、测量和控制。一个典型的工业机器视觉应用系统包括光源、光学系统、图像采集系统、数字图像处理与智能判断决策模块和机械控制执行模块。系统首先通过CCD相机或其它图像拍摄装置将目标转换成图像信号,然后转变成数字化信号传送给专用的图像处理系统,根据像素分布!亮度和颜色等信息,进行各种运算来抽取目标的特征,根据预设的容许度和其他条件输出判断结果。 值得一提的是,广义的机器视觉的概念与计算机视觉没有多大区别,泛指使用计算机和数字图像处理技术达到对客观事物图像的识别、理解。而工业应用中的机器视觉概念与普通计算机视觉、模式识别、数字图像处理有着明显区别,其特点是: 1、机器视觉是一项综合技术,其中包括数字图像处理技术、机械工程技术、控制技术、电光源照明技术,光学成像技术、传感器技术、模拟与数字视频技术、计算机软硬件技术、人机接口技术等。这些技术在机器视觉中是并列关系。相互协调应用才能构成一个成功的工业机器视觉应用系统。 2、机器视觉更强调实用性,要求能够适应工业生产中恶劣的环境,要有合理的性价比,要有通用的工业接口,能够由普通工作者来操作,有较高的容错能力和安全性,不会破坏工业产品,必须有较强的通用性和可移植性。 3、对机器视觉工程师来说,不仅要具有研究数学理论和编制计算机软件的能力,更需要光、机、电一体化的综合能力。 4、机器视觉更强调实时性,要求高速度和高精度,因而计算机视觉和数字图像处理中的许多技术目前还难以应用于机器视觉,它们的发展速度远远超过其在工业生产中的实际应用速度。 1.2机器视觉的研究范畴 从应用的层面看,机器视觉研究包括工件的自动检测与识别、产品质量的自动检测、食品的自动分类、智能车的自主导航与辅助驾驶、签字的自动验证、目标跟踪与制导、交通流的监测、关键地域的保安监视等等。从处理过程看,机器视觉分为低层视觉和高层视觉两阶段。低层视觉包括边缘检测、特征提取、图像分割等,高层视觉包括特征匹配、三维建模、形状分析与识别、景物分析与理解等。从方法层面看,有被动视觉与主动视觉之,又有基于特征的方法与基于模型的方法之分。从总体上来看,也称作计算机视觉。可以说,计算机视觉侧重于学术研究方面,而机器视觉则侧重于应用方面。 机器人视觉是机器视觉研究的一个重要方向,它的任务是为机器人建立视觉系统,使得机器人能更灵活、更自主地适应所处的环境,以满足诸如航天、军事、工业生产中日益增长的需要(例如,在航天及军事领域对于局部自主性的需要,在柔性生产方式中对于自动定位与装配的需要,在微电子工业中对于显微结构的检测及精密加工的需要等)。机器视觉作为一门工程学科,正如其它工程学科一样,是建立在对基本过程的科学理解之上的。机器视觉系统的设计依赖于具体的问题,必须考虑一系列诸如噪声、照明、遮掩、背景等复杂因素,折中地处理信噪比、分辨率、精度、计算量等关键问题。 1.3机器视觉的研究现状 机器视觉研究出现于60年代初期,电视摄像技术的成熟与计算机技术的发展使得机器视觉研究成为可能。它作为早期人工智能研究的一部分,由于技术条件的限制,进展缓慢。80年代初,在D·Marr提出的计算视觉理论指导下,机器视觉研究得到了迅速发展,成为

基于机器视觉的产品检测技术研究【详述】

机器视觉概念/研究现状/应用/检测 内容来源网络,由“深圳机械展(11万㎡,1100多家展商,超10万观众)”收集整理! 更多cnc加工中心、车铣磨钻床、线切割、数控刀具工具、工业机器人、非标自动化、数字化无人工厂、精密测量、3D打印、激光切割、钣金冲压折弯、精密零件加工等展示,就在深圳机械展. 1、机器视觉 1.1机器视觉的概念 机器视觉被定义为用计算机来模拟人的视觉功能,从客观事物的图像中提取信息,进行处理并加以理解,最终用于实际检测、测量和控制。一个典型的工业机器视觉应用系统包括光源、光学系统、图像采集系统、数字图像处理与智能判断决策模块和机械控制执行模块。系统首先通过CCD相机或其它图像拍摄装置将目标转换成图像信号,然后转变成数字化信号传送给专用的图像处理系统,根据像素分布!亮度和颜色等信息,进行各种运算来抽取目标的特征,根据预设的容许度和其他条件输出判断结果。 值得一提的是,广义的机器视觉的概念与计算机视觉没有多大区别,泛指使用计算机和数字图像处理技术达到对客观事物图像的识别、理解。而工业应用中的机器视觉概念与普通计算机视觉、模式识别、数字图像处理有着明显区别,其特点是: 1、机器视觉是一项综合技术,其中包括数字图像处理技术、机械工程技术、控制技术、电光源照明技术,光学成像技术、传感器技术、模拟与数字视频技术、计算机软硬件技术、人机接口技术等。这些技术在机器视觉中是并列关系。相互协调应用才能构成一个成功的工业机器视觉应用系统。 2、机器视觉更强调实用性,要求能够适应工业生产中恶劣的环境,要有合理的性价比,

要有通用的工业接口,能够由普通工作者来操作,有较高的容错能力和安全性,不会破坏工业产品,必须有较强的通用性和可移植性。 3、对机器视觉工程师来说,不仅要具有研究数学理论和编制计算机软件的能力,更需要光、机、电一体化的综合能力。 4、机器视觉更强调实时性,要求高速度和高精度,因而计算机视觉和数字图像处理中的许多技术目前还难以应用于机器视觉,它们的发展速度远远超过其在工业生产中的实际应用速度。 1.2机器视觉的研究范畴 从应用的层面看,机器视觉研究包括工件的自动检测与识别、产品质量的自动检测、食品的自动分类、智能车的自主导航与辅助驾驶、签字的自动验证、目标跟踪与制导、交通流的监测、关键地域的保安监视等等。从处理过程看,机器视觉分为低层视觉和高层视觉两阶段。低层视觉包括边缘检测、特征提取、图像分割等,高层视觉包括特征匹配、三维建模、形状分析与识别、景物分析与理解等。从方法层面看,有被动视觉与主动视觉之,又有基于特征的方法与基于模型的方法之分。从总体上来看,也称作计算机视觉。可以说,计算机视觉侧重于学术研究方面,而机器视觉则侧重于应用方面。 机器人视觉是机器视觉研究的一个重要方向,它的任务是为机器人建立视觉系统,使得机器人能更灵活、更自主地适应所处的环境,以满足诸如航天、军事、工业生产中日益增长的需要(例如,在航天及军事领域对于局部自主性的需要,在柔性生产方式中对于自动定位与装配的需要,在微电子工业中对于显微结构的检测及精密加工的需要等)。机器视觉作为一门工程学科,正如其它工程学科一样,是建立在对基本过程的科学理解之上的。机器视觉系统的设计依赖于具体的问题,必须考虑一系列诸如噪声、照明、遮掩、背景等复杂因素,折中地处理信噪比、分辨率、精度、计算量等关键问题。

机器视觉技术及其应用概述

机器视觉技术及其应用概述 姓名: 班级:机械0904班学号: 摘要:近年来,机器视觉已经发展成为光电子的一个应用分支,广泛应用于微 电子、PCB生产、自动驾驶、印刷、科学研究和军事等领域。机器视觉在中国的蓬勃发展,使从事机器视觉的公司和人员大量涌现。首先概述了机器视觉技术的基本原理并分析了机器视觉系统的构建;接着论述了机器视觉技术的当前主要应用领域与情况;最后分析了现阶段机器视觉技术存在的问题。 关键词:器视觉;技术;应用 机器视觉系统组成及其工作原理 机器视觉即用机器代替人眼来做测量和判断。机器视觉系统的工作流程大致为:被摄取目标——经图像摄取装臵——图像信号——经图像处理系统——数字信号——经抽取目标特征——判断结果并控制设备。该流程的实现需相应的硬件作为基础,典型的工业机器视觉系统构成有照明、镜头、相机、图像采集卡、视觉处理器等。下面将对机器视觉系统组成和工作原理进一步具体说明。 机器视觉系统组成 从原理上机器视觉系统主要由三部分组成:图像的采集、图像的处理和分析、输出或显示。—个典型的机器视觉系统应该包括光源、光学系统、图像捕捉系统、图像数字化模块、数字图像处理模块、智能判断决策模块和机械控制执行模块,如图1所示。 从中我们可以看出机器视觉是一项综合技术。其中包括数字图像处理技术、机械工程技术、控制技术、光源照明技术、光学成像技术、传感器技术、模拟与数字视频技术、计算机软硬件技术、人机接口技术等。只有这些技术的相互协调应用才能构成一个完整的机器视觉应用系统。机器视觉应用系统的关键技术主要体现在光源照明、光学镜头、摄像机(CCD)、图像采集卡、图像信号处理以及执行机构等。以下分别就各方面展开论述。

基于机器视觉的工件智能抓取技术研究

基于机器视觉的工业机器人工件搬运技术研究 1.1研究背景 自 19 世纪 60 年代问世以来,工业机器人不断发展和完善,现已得到广泛应用,机器人产业也逐渐成熟[]1。目前,全世界已拥有 100 多万台工业机器人广泛应用在焊接、搬运、装配、喷涂、修边、拾料、包装、堆垛和上下料等单调或复杂的作业中,为企业节约了大量的劳动成本,大大提高了劳动生产率。工业机器人是面向工业领域的多关节机械手或多自由度的机器人,它在稳定产品品质、提高生产效率和改善劳动条件等方面有着十分重要的作用,它的应用能够使企业大大缩短新产品的换产周期和节约劳动成本,从而提高了产品的市场竞争力[]23-。 随着当代工业革命深入发展,工业生产日益趋向自动化,工业机器人技术也正朝着智能、柔性的方向发展。许多发达国家对于智能工业机器人的研究都较为重视,我国也早已将其纳入国家高科技发展规划。国家层面的重视也必将给工业机器人技术带来新的跨越式发展,机器人的发展也必将对社会经济和生产力的发产生更加深远的影响 1.2 研究目的和意义 对于工作在自动化生产线上或柔性制造系统中的工业机器人来说,其完成最多的一类操作是“抓取—放置”动作,比如流水线上的工件搬运、装配以及各工位之间的工件转移和上下料。机器人要完成这类操作是经过复杂计算的:首先,机器人必须知道怎么抓,其次机器人应该知道怎么放;同时在这个过程还要伴随着机器人运动学分析的过程。传统的工业机器人完成这类操作,必须经过精确的逐点示教后,才能一步一步的按照固定程序执行。在这个过程中,工件相对于机器人的初始位姿(位置和姿态)和终止位姿是事先规定的,但很多情况下,特别是流水线场合,工件的位姿常常是不固定的。这就导致实际目标工件的位姿与理想工件位姿总是有偏差的,这种偏差哪怕很小都会导致机器人操作任务的失败。这种由于环境的变化而导致机器人不能很好地完成任务的情况极大地限制了机器人的实际应用。这就要求工业机器人具备一定的环境适应能力,即工业机器人智能化。智能工业机器人的智能特征在于它具有与外部世界、对象、环境和人相互协调的工作机能,具体表现在机器视觉、接近

基于机器视觉技术的物体表面缺陷检测.

基于机器视觉技术的物体表面缺陷检测 何小利1 , 宋钰 2 (1. 四川理工学院计算机学院, 四川自贡643000; 2. 四川理工学院网络中心, 四川自贡643000; 摘要:本文对物体表面缺陷进行研究和检测. 而检测的方法是采用LED 环形灯光直接暗视场正面照明方式来提取插座面板划痕图像. 具体过程是使用动态阈值分割图像, 并采用放射变换、区域特征处理及连通区域提取等技术来检测出插座面板划痕. 关键词:机器视觉; 物体表面; 缺陷检测中图分类号:T P393 文献标识码:A 文章编号: 1009-4970(2011 02-0064-050 引言 在传统的产品生产过程中, 一般情况下对产品的表面缺陷检测是采用人工检测的方法. 随着科学 技术的不断发展, 特别是计算机技术的发展, 出现了计算机视觉检测技术. 利用这种新技术设计出来的系统不受恶劣环境和主观因素的影响, 能快速、准确地检测产品的质量, 完成人工无法完成的检测任务. 机器视觉检测结合了计算机图像处理和模式识别理论, 它综合了计算机技术、数据结构、图像处理, 模式识别和软件工程等不同领域的相关知识. 一个典型的机器视觉系统应该包括以下五大块, 照明、镜头、相机、图像采集卡、视觉处理器.

1 物体表面缺陷检测 物体表面缺陷检测是机器视觉的一种典型应用. 本文以插座面板划痕检测为例, 通过采用LED 环形灯直接暗视场正面照明方式采集图像, 然后使用动态阈值分割法将插座面板区域中划痕检测的感兴趣区域提取出来, 再通过使用区域特征、区域形态学对插座面板区域使用腐蚀运算去掉分割区域中杂点和小的突出物, 确保计算上有足够的精度, 最后使用放射变换、图像平滑、连通区域提取等算法 检测出划痕并显示其结果(见图 1. 图1 插座面板划痕检测流程图 1. 1 图像获取 照明的方向性通常有两种:漫射和直接照射.

相关主题
文本预览
相关文档 最新文档