基于C++语言平台的干涉条纹检测方法与流程

文档序号:16791765发布日期:2019-02-01 19:39阅读:1104来源:国知局
基于C++语言平台的干涉条纹检测方法与流程

本发明涉及涉及光学干涉图像检测领域,具体涉及基于c++语言平台的干涉条纹检测方法。



背景技术:

在光学干涉图像检测领域中,光学面型复原技术、条纹级次标定、条纹提取技术都包含于干涉图像检测领域当中。对于干涉条纹图像的检测,传统技术方案为相移法,相移法的缺点是对图像要求度比较高,并且需要在每次记录图像时保证相同的、准确的位移量和稳定的光照强度,然而现在的设备大多数并不能满足这样苛刻的要求。

opencv(opensourcecomputervisionlibrary)是一个基于(开源)发行的跨平台计算机视觉库,可以运行在linux、windows和macos操作系统上。它轻量级而且高效——由一系列c函数和少量c++类构成,同时提供了python、ruby、matlab等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

opencv库中有很多基本的函数,这些函数能够简化c++语言的算法,使得图像处理算法更加容易实现。



技术实现要素:

有鉴于此,本发明的目的在于提供一种基于c++语言平台的干涉条纹检测方法,解决现有干涉图像移相法需要高分辨率、低噪音的问题。

为实现上述目的,本发明采用如下技术方案:

一种基于c++语言平台的干涉条纹检测方法,包括以下步骤:

步骤s1:采用opencv库函数读取待检测的干涉条纹图像;

步骤s2:通过对比度增强技术提升待检测的干涉条纹图像可读性,得到处理后的干涉条纹图像;

步骤s3:对处理后的干涉条纹图像进行自适应二值化处理,将条纹进行区域划分,得到二值化干涉条纹图像;

步骤s4:对得到的二值化干涉条纹图像进行空洞填充处理,得到填充后的干涉条纹图像;

步骤s5:通过zhang氏骨架提取算法和rosen骨架提取算法结合,将填充的干涉条纹图像转换为干涉条纹骨架图像,提炼填充后的干涉条纹图像的有效信息;

步骤s6:基于干涉条纹骨架图像的特点分别进行去毛刺处理与断点连接处理,得到干净的干涉条纹骨架图像;

步骤s7:将干净的干涉条纹骨架图像重新进行级次标定,并加以颜色区别,完成对干涉条纹图像的检测。

进一步的,所述步骤s1采用cv::imread函数读取待检测的干涉条纹图像。

进一步的,所述对比度增强技术具体为:

根据equalizehist函数处理将图像进行直方图均衡化,提高干涉条纹图像的对比度,直方图均衡化的基础如下:

其中ps(s)表示随机变量s的概率密度函数,;pr(r)表示随机变量r的概率密度函数;采用r和s采用的准则为:

式中g为图像的灰度值分布,如8位图像分布对应的g为256,ri为原图像概率分布密度,表示对x进行向下取整,通过(3)式求出的值就是新的ps(s)概率密度分。

进一步的,所述空洞填充处理采用阈值孔洞填充算法。

进一步的,所述步骤s6具体为:

步骤s61:将填充后的干涉条纹图像简化为局部毛刺图进行分析;

步骤s62:根据毛刺的特性,采用c++程序寻找毛刺与骨架的连接点、毛刺边缘点,及找到毛刺的坐标,并用8领域寻点法从毛刺边缘点开始遍历到连接点为止,将所有点保存到vector类的point数组当中,并将这些点的灰度值置为1,去除毛刺;

步骤s63:通过去毛刺处理后,将所有断点进行选定,通过匹配算法进行断点两两连接。

进一步的,所述步骤s7具体为:

步骤s71:将干净的干涉条纹骨架图的边界点作为特征点,利用opencv库与c++语言相结合,编写bwlabel函数,用于对干涉条纹骨架简单的从左至右的进行排序;

步骤s72:通过bwlabel函数处理的结果,对干涉条纹的级次标定。

本发明与现有技术相比具有以下有益效果:

1.本发明基于c++语言提供一种基于数字图像处理算法实现对低分辨率、噪声的干涉条纹图像的检测,克服了现有干涉图像移相法需要高分辨率、低噪音的问题

2、本发明对干涉条纹图像进行二值化时,采用滤波差分法,并对不同条纹粗细的地方采用不同窗口大小进行均值滤波减少条纹粗细对二值化的影响。

3、本发明可以对条纹进行正确且快速标定。

附图说明

图1是本发明待检测的干涉条纹原图像。

图2是本发明一实施例中直方图均衡化算法处理的图像结果。

图3是本发明一实施例中自适应二值化算法处理的图像结果。

图4是本发明一实施例中空洞填充算法处理的图像结果。

图5是本发明一实施例中用zhang氏和rosen骨架提取处理的结果图。

图6是本发明一实施例中用去毛刺与断点连接处理的结果图。

图7是本发明一实施例中对干涉条纹骨架进行标定。

图8是本发明一实施例中最终将干涉条纹进行颜色划分。

图9是本发明一实施例中干涉条纹检测算法实现流程图。

图10是本发明一实施例中干涉条纹滤波图。

图11是本发明一实施例中阈值填充孔洞算法效果图。

图12是本发明一实施例中毛刺简化图。

具体实施方式

下面结合附图及实施例对本发明做进一步说明。

请参照图1,本发明提供一种基于c++语言平台的干涉条纹检测方法,包括以下步骤:

步骤s1:cv::imread函数将读取包含噪声的干涉条纹图像,根据《高等光学》的理论,包含噪声干涉条纹的光强分布可以表示为:

g(x,y)=i1(x,y)+i2(x,y)cos(φ)+i3(x,y)(1)

其中g(x,y)为包含噪声的干涉图像光强分布,i1(x,y)为干涉条纹的直流项,i2(x,y)为强度调制项,φ为简化的相位信息,i3(x,y)为图像噪声信息,该处的干涉条纹光强分布决定了第三步采用的滤波算法,该步骤读取的如图1所示;

步骤s2:根据equalizehist函数处理将图像进行直方图均衡化,提高干涉条纹图像的对比度,直方图均衡化的基础如下:

其中ps(s)表示随机变量s的概率密度函数,;pr(r)表示随机变量r的概率密度函数;采用r和s采用的准则为:

式中g为图像的灰度值分布,如8位图像分布对应的g为256,ri为原图像概率分布密度,表示对x进行向下取整,通过(3)式求出的值就是新的ps(s)概率密度分布。求出的新概率密度分布也就是新8位灰度图像,该步骤直方图均衡化的结果如图2所示。

步骤s3:对图2进行自适应窗口滤波处理,该滤波处理模块的最大作用在于,降低图像中的椒盐、高斯噪声。自适应窗口模块的作用是基于干涉条纹的粗细不同采用不同大小的窗口去进行二值化处理,本实施例采用的方案是在粗、大条纹处采用大窗口,在细、小条纹处采用小窗口进行均值滤波处理。

窗口k大小定义如下:

(4)式中k为窗口大小,x、y表示图像中某点的横纵坐标,i,j表示整个图像的分辨率。本发明对于粗、大的干涉条纹采用大窗口均值滤波处理、细小的干涉条纹采用小窗口进行均值滤波处理,达到对不同形态的条纹都能准确的获取二值化图像。

通过利用自适应窗口模块对干涉条纹图像进行两次均值滤波分别得到一次滤波图、二次滤波图,将两次滤波图像进行差分处理。

滤波差分处理的理论基础如下所示:

其中,f为原图像,w为滤波器模板,δ为差分处理。本实施例将含有噪声的干涉条纹图像进行两次均值滤波处理,并将两次滤波的结果进行差分处理,得到结果。基于该理论干涉条纹滤波多次滤波的效果图10所示:

根据图10可以看到二次滤波的对比度逐渐下降,将一次滤波和二次滤波进行差分处理,利用差分图对干涉条纹图像进行阈值二值化处理。将差分值大于零的点灰度值重新置为255,并且将差分值小于零的点灰度值重新置为0,公式如下:

该处的差分处理是基于(1)式中的干涉条纹特性,干涉条纹的光强分布为余弦函数的形式,对两次均值滤波差分的结果保留了干涉条纹的特性。最后得到干涉条纹二值化f2(x,y)如图3所示。

步骤s4:根据图三中的干涉条纹信息,采用阈值孔洞填充算法,基于图像的特征不采用漫水填充算法,是由于漫水填充算法对图像处理的盲目性较大。而本实施例采用的阈值填充孔洞算法能够有效控制填充孔洞的大小,以达到最好的图像填充效果。

阈值填充孔洞算法理论:i表示原图像,ic表示原图像的补集,f表示边界上的点取反,内部的点全部置1的图,表示f图经过b结构元膨胀处理表示ic作为模板对f进行测地膨胀后的结果,h表示填补后的效果图,步骤如图11(a)~(f)所示:

具体步骤如下:对需要处理的图像先进行边界处理,边界处理函数如下:

(7)中i(x,y)表示一副二值图像,f(x,y)表示一副标记图像。根据公式(5)可以得到图11(c),同时取原图像的补集ic可以得到图11(b),利用标记图像f进行3*3se(结构元)的侵蚀得到图11(d),将侵蚀图11(d)与图11(b)取交集得到图11(e),此处需要多次进行腐蚀操作,直到图11(e)不会改变为止,根据图11(e)取反,得到孔洞填充图像,随后根据图11(f)减去图11(a)得到孔的大小,根据孔的大小确定是否需要填充。根据以上理论,本发明基于opencv3库得以实现效果如图4所示。

步骤s5:基于zhang氏骨架提取算法与rosen骨架提取算法,将图4中的干涉条纹图像提取出对应的骨架如图5所示。

步骤s6:对干涉条纹骨架图进行分析,可以看出骨架图上有毛刺和断点两种缺陷。根据之前的自适应窗口滤波的原理,可以得出结论:毛刺的产生起源于滤波窗口不够大的原因,而断点产生的原因是滤波窗口不够小的原因。

将含有毛刺的干涉条纹骨架图像可以简化为图12所示的局部毛刺图进行分析,局部毛刺的特点在于毛刺与骨架相连、且毛刺居于图像的中心。通过毛刺特性,利用c++程序先寻找毛刺与骨架的连接点、毛刺边缘点,及找到图12中灰点的坐标,并用8领域寻点法从毛刺边缘点开始遍历到连接点为止,将所有点保存到vector类的point数组当中,并将这些点的灰度值置为1;

通过去毛刺处理后,将所有断点进行选定,通过匹配算法进行断点两两连接。匹配算法详细说明如下:第一,扫描图像排除边界点,通过断点特征,选取真正的断点。第二,选取一个断点作为基点,计算该点与其他所有断点的连线。第三,将该点的曲率计算得出与其他断点连线的斜率作比较,将最为接近值的点作为断点匹配点。第四,其余断点也通过相同方案连接。最后通过去毛刺、断点连接处理得到图6。

步骤s7:将干涉条纹骨架图的边界点作为特征点,利用opencv库与c++语言相结合,编写bwlabel函数,该函数的目的在于对干涉条纹骨架简单的从左至右的进行排序。该函数的编写过程类似于第四步的孔洞填充算法,选取图像的顶层作为基准,将每个干涉条纹的点进行独立筛选并将其分别保存到vector类point的存储空间内。通过bwlabel函数处理的结果,对干涉条纹的级次标定,选取的方案如下:第一,顺时针将特征点进行排序。第二,把将相邻、同一级次的第一个特征点作为第一级次特征点。第三,将该特征点的条纹的灰度值全部标定为1,然后根据干涉条纹的特征对剩下的条纹进行标定。根据上述方案的算法实现结果如图8所示。

以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1