《基于opencv的机械零件部件特征的识别与检测》—阅读笔记

论文出处:《基于OpenCV的机械零件局部特征的识别与检测》— 孙新军

粗减版:

1.openCV操作:

·图像高斯滤波
	cvSmooth(0
·OTSU二值化
	cvThreshold()
·图像膨胀处理
	cvDilate(0

2.图像特征提取

·轮廓长度:cvArcLength
·轮廓面积:	cvContourArea
·7个HU矩:	cvGetHuMoments
·平均功率谱:cvDFT
·熵:
·能量
·对比度
·一致性
·行列式的值:cvDet
·条件数得倒数:cvInvert+CV_SVD(参数)
·范数:cvNorm
·0阶空间矩:cvGetSpatialMoment

3.图像特征识别与检测

随机森林学习算法:
	bool CvRTrees::train()//训练
	double CvRTrees::predict()//测试
	//特征信息以行向量方式输入,80%样本进行训练
	//具体参数看详细版

详细版:

0.open CV 补充知识

在这里插入图片描述
·opencv 数据访问方式

访问方式有四种:间接访问,直接访问,指针访问,用C66外壳访问。

·指针访问:

·单字节单通道的图像访问:

IplImage* img = cvCreateImage(cvSize(512,512),IPL_DEPTH_8U,1);
int height = img->height;
int width = img->.width;
int step = img->widthStep/sizeof(uchar);
uchar* data = (uchar*) img->imageData;
data[i*step+j] = 111;

·对单字节多通道图像访问:

IplImage* img = cvCreateImage(cvSize(512,512),IPL_DEPTH_8U,3);
int height = img->height;
int width = img->width;
int step = img->widthStep/sizeof(uchar);
int channels = img->nChannels;
uchar* data = (uchar*) img->imageData;
data[i*step+j*channels+k] = 111;

·openCV数据结构:

CvMat--矩阵类
IplImage--图像类
CvHistogram--多维柱状图混合类
CvSeq,CvSet--可变集合类
CvArr*--通用数组形式

1.图像目标区域提取

cvGetRectSubPix
提取规则:dst(x,y) = src(x+center.x-(width(dst)-1)X0.5,y+center.y-(height(dst)-1)X0.5)

函数对应的三个参数分别是:输入图像,提取的像素矩形,提取的像素矩形的中心。

2.图像滤波

文中选择了使用高斯滤波进行突破的平滑操作

·高斯滤波:

采用加权求均值的方法实现平滑滤波的效果。

·高斯滤波的五个重要性质:

1.旋转对称性: 滤波器再各个方向上的作用效果是一样的。
2.单值函数:高斯滤波器中目标点的像素值等于邻域像素值的加权值。
	而权值是对应点与中心点之间按距离的单调函数。
3.高斯函数具有单瓣的傅立叶变换频谱:
  因为高斯函数傅立叶变换等于高斯函数本身。图像含有高频信号和低频信号,
  通常情况下,高频信号往往是不需要的信号(噪声,细纹理),在滤波时要将它去除。
  但是图像的特征,边缘即含有高频,也有低频信号。
  而这一特征表明滤波时可以去除掉不需要的高频信号,留下有用的特征。  
4.高斯滤波器宽度由参数σ决定,且成正比,且平滑程度越好,
但是当参数值过大时又会出现过平滑现象,反之又会欠平滑,因此根据实际情况调整
5.高斯函数具有可分离性,可实现较大尺寸的高斯滤波器。

·高斯滤波器设计:

均值为0的一维高斯函数为:
在这里插入图片描述
其中σ决定了高斯滤波器的宽度。

图像的高斯滤波常用均值为0的二维离散高斯函数实现:
在这里插入图片描述
因此,设计高斯滤波器的关键在于计算高斯核,高斯核的计算可以通过二维高斯函数实现
在这里插入图片描述
在这里插入图片描述
图像的高斯滤波需要用离散的模板,连续高斯分布经过采样,量化处理后,可以得到离散的模板且模板需要做归一化处理。离散高斯卷积核的维数为H:(2k+1)X(2k+1)
在这里插入图片描述
在openCV中,高斯滤波可以通过cvSmooth实现,且在论文中,对于参数param1和param2的值均设置为5,param3和param4则为0
在这里插入图片描述
·图像二值化:
论文中使用的是OTSU阈值分割法。
在这里插入图片描述
·本节小结:

该节主要是使用opencv实现图像处理功能,包括目标区域的提取,图像滤波,图像二值化和图像膨胀

3.图像特征提取

通常图像识别中,主要提取图像的以下四类特征:

1.直观性特征。特点是容易提取,物理意义明确,如图像轮廓,边沿,区域和纹理等
2.灰度统计特征。把图像看作二维随机过程,对其进行统计分析。如图像的七个HU不变矩
3.变换域特征。可对图像进行Huohg变换,曲
前言: 开源的opencv真是一件伟大的产品,那么多个函数跟变量(具体多少还没数过)。要是结合起来综合运用几乎可以胜任任何有关图像识别和处理方面的工作。如果能更深入一点根据具体需要修改或优化里面的源码那更是如虎添翼。 花了点时间浏览了www.opencv.org.cn论坛里的所有贴子,还好不多才200多页。总体上对opencv里的一些常用函数功能作用大致有点了解,筛选一些跟元件识别有关的运用内容,但它论坛里的贴子回复的内容点到即止的居多。从网上下载了能搜到的教程跟代码全学习了解测试了一下,图像处理流程通常先开始都是要进行滤波,除燥,灰度,二值化后再轮廓识别等。 开始动手 经过多次好多次运行测试组合,终于有一次显示出意外的惊人效果,而且相当简单只是调用了几个函数而以,就可以有这样效果实在出人意料。第一个是进行元件中心点获取,也是直接调用函数再加点东西就可以得出元件的四个矩形顶点坐标,有这几个坐标就可以直接算出元件中间点所在的坐标了。如果要检测元件摆放角度是否是垂直90度,只要判断边宽的长度为最小或最大时就是垂直90度。 但这个矩形框无法测出元件具体角度。如截图: 测试视频地址:https://v.youku.com/v_show/id_XMjU5NzY5NTI0.html 不过,还有另外一个函数可以提供这个功能,调用后可以直接求出最小外接矩形和角度 如截图: 测试视频地址:https://v.youku.com/v_show/id_XMjYwMDMzMDc2.html 说明:里面的光源不行,临时用手电筒,和在光盘上插几个LED做环形灯做照明,无法做到无阴影显示。如果光源做的好,效果应该是非常精确稳定。 识别包含下面2种做法: opencv里需要的头文件跟库文件都已编译好放在和设置在当前程序目录下,就可不用安装opencv 也能直接编译。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值