基于opencv识别二值图像特定连通图形的算法介绍

本文主要介绍一些涉及到的编程思想。

至于源代码,这个程序功能本身并没有什么现实意义,而且由于程序几乎没有调用外部接口,全是独立实现,程序复杂冗长,也与当今编程方法相背,所以不再展示。

 

 

这是程序运行的效果:

将两个正方形的描边颜色去掉就是原图。

基于opencv识别二值图像特定连通图形的算法介绍_第1张图片

 

提取图像特征

在进行图像识别工作的时候,最重要的就是找到要识别的目标区别于其它图形的特征。而且该特征对于识别目标具有稳定性.

其中比较重要的就是要满足旋转不变性

提取特征的方案

目前涉及的问题主要是二值图像中的识别问题,所以要识别的图形可以转化为对应的边缘,而区别不同的图形也是使用对应的边缘。因此大部分问题的考虑是从一个图形的质心入手的。

对每个图形内的封闭图形,计算出图形的重心,并在边缘上选取距离重心特定距离的像素点。

提取的基本特征为选取距离重心最近的点A和最远的点B,分别计算OA和OB向量的点积模的比值,根据精度需要的不同,还可继续选取到重心的“中间距离”,即最远和最近的平均,得到点C,并同样计算点积,以此类推可逐渐扩展。选取的所有特定距离的点构成的点集之间的向量运算结果,将点积结果统一除以最近距离的平方进行归一化。从而每个特征数值构成了特征空间中的一个点。

 

对识别程序进行训练

首先需要准备大量的待识别图形的样本图像,将图形特征转化为特征空间中的点后,就可以很方便地使用聚类算法进行聚类分析,从而将特征空间中的特定区域标定为目标图形的特征区域。

具体聚类方案

一个特定图形在特征空间的分布不一个是一块区域,可能是若干分离的区域。特征空间中点的整合过程的截止用密度来进行标定。被圈定的点集具有一个对应的密度(维度范围的面积和点集中点的数量的比值),当一个新的点加入的时候,若导致点群的密度变化率超过阈值,则判断聚类失败,这同样是在使用训练结果的时候,判断是个未知图形是否为待识别目标的原则。用这样的规则 ,在最近点优先的原则下,将所有点进行聚类,即可得到用于识别目标的特征空间。

 

 

你可能感兴趣的:(基于opencv识别二值图像特定连通图形的算法介绍)