论文部分内容阅读
【摘要】本设计采用NI公司机器视觉开发包,搭建了用于摄像头图像采集与处理的LabVIEW程序框架,并在此框架下通过调用动态链接库方式实现了一种基于图像清晰度的评价算法。经实际测量,获得了理想的聚焦评价效果。
【关键词】LabVIEW;IMAQ Vision;图像清晰度;摄像头聚焦
1.引言
LabVIEW是美国国家仪器公司(NI)研发的基于图形界面化的编程语言——即G语言的一款程序开发软件。LabVIEW简单易用,用其进行虚拟仪器软件的开发可大大缩短开发周期,使工程技术人员把更多的精力用于所研究技术领域。
本文使用LabVIEW2012平台结合NI公司的VISION ACCQUISITION Software 2012(VAS2012)和NI VISION DEVELOPMENT MUDULE 2012(VDM2012)机器视觉软件开发包,获取了通用USB摄像头图像,通过实现一种基于图像清晰度评价函数的算法,对摄像头固定焦距情况下的聚焦效果进行了评价。该LabVIEW程序框架只需调用相应的外部动态链接库文件即可实现不同要求的基于图像处理的摄像头聚焦评价软件。
2.基于图像清晰度的聚焦评价软件设计
基于图像清晰度进行摄像头聚焦评价原理:当物体沿垂直焦平面方向移动时,聚焦图像比离焦图像含有更多的灰度变化,对应于图像处理中为边缘梯度的变化,离焦量越小图像边缘越锐利,具有更大的图像灰度梯度值[1]。其基于图像清晰度聚焦评价软件设计框图如图1所示:
图1 基于图像清晰度聚焦评价软件设计框图
2.1 图像的获取
NI公司的机器视觉开发包提供了两种图像获取子VI——高级子VI和低级子VI。使用低级子VI能够更加灵活的实现摄像设备的检索、配置、开始和关闭功能。
低级子VI获取摄像头图像的一般步骤[2]如图2所示:
图2 获取摄像头图像流程
在获取图像数据之前,需要创建内存缓冲区来接收摄像设备图像数据,利用IMAQdx Create.vi完成此功能,不使用已创建的内存缓冲区时,通过IMAQdx Dispose.vi释放分配的内存缓冲区资源。
2.2 图像的预处理
NI公司的机器视觉开发模块包含有图像预处理需要的子VI函数。图3所示程序为使用通用USB摄像头获取得到RGB彩色图像,在图像获取程序的基础上利用IMAQ Cast Image.vi和IMAQ ExtractSingleColorPlane.vi子VI转换得到对应灰度图像过程[3]。
图3 获取摄像头灰度图像程序
IMAQ Cast Image.vi能够把已有图像按指定图像类型进行转换。在图3中首先通过IMAQ Cast Image.vi将获取的RGB图像转换为HSL图像,HSL图像包含有图像的色调、饱和度和亮度信息,图像的灰度值对应于HSL图像中的亮度值,利用IMAQ ExtractSingleColorPlane.vi把图像亮度值提取出来,即获得了图像的灰度值,完成聚焦评价的图像预处理过程。
2.3 基于图像清晰度评价算法的实现
传统的基于梯度的自动聚焦算法[4]有Robert梯度算法和水平、垂直方向的灰度差分絕对值之和(SMD)算法。
Robert梯度算法使用图像区域斜方向正负45°像素点灰度差值的绝对值之和作为算子,反映了图像中斜方向灰度梯度的变化。SMD算法使用图像区域水平和垂直方向像素点差值的绝对值之和作为算子,反映图像水平和垂直方向灰度梯度的变化。
为了在一定程度上反映图像区域水平垂直方向和斜45°方向灰度梯度变化,采用SMD算子与Robert梯度算子之和作为图像清晰度评价算子。其算法公式如下:
其中,为图像算子,k为图像算子值序列。
针对LabVIEW自身对于大量运算执行时间长,内存消耗大的缺点,采用调用库函数节点(Call Library Function)调用动态链接库(Dynamic Link Library,DLL)这一方法实现图像清晰度评价算法。
图4 基于灰度梯度的图像清晰度算法程序
图4所示程序中从摄像头获取的图像经预处理后,通过IMAQ ImageToArray.vi转换为所选图像区域每个像素点的灰度值,输出为二维数组,且有多种数据类型输出端口,此处选择输出无符号8位整型数据进行梯度算子的计算。
在灰度梯度值统计过程中,聚焦点附近统计灰度梯度值小于较小数值时,模糊图像和清晰图像中符合要求的像素点数相差不大,甚至会出现模糊图像大于清晰图像的情况。为了提高评价效果,需要进行一定的阈值处理(阈值的选择因梯度函数的不同而不同),去掉较小灰度梯度值的干扰,提高图像清晰度评判结果的准确性[5]。
LabVIEW中使用CLF调用的DLL文件可在外部集成开发环境Microsoft Visual C++6.0中编写生成[6],主要函数原型及实现代码如下:
uint32_t image_process(uint32_t arrayin[],uint32_t x,uint32_t y,uint32_t threshold)
{
uint32_t i=0,j=0,k=0;
uint32_t count=0;
for(i=0;i {
for(j=0;j {
arrayin[i*y+j]=abs(arrayin[i*y+j]-arrayin[(i+1)*y+j]) +abs(arrayin[i*y+j]-arrayin[i*y+j+1])
+abs(arrayin[i*y+j]-arrayin[(i+1)*y+ j+1])
+abs(arrayin[(i+1)*y+j]-arrayin[i*y+ j+1]);
if(arrayin[i*y+j]>=threshold)count++;
}
}
return count;
}
图5 基于灰度梯度的清晰度算法程序运行界面
图6 不同聚焦程度的测试图像
图7 表1数据归一化评价曲线
图5所示测试程序显示设置阈值为160,评价区域为中间64×48大小像素区域,灰度梯度最大值为372,高于阈值160的灰度梯度值个数为2985。
3.实验结果
为验证所设计图像清晰度评价程序效果,使用带图像采集功能的光学显微镜作为测试平台。测试图像如图6所示,其中摄像头图像分辨率为800×600,显微放大40倍,从离焦到过焦位置调整间隔250m(顺序从左到右,从上到下),电路板过孔图像。
表1 不同图像高于阈值的算子值个数统计表
由于光源照射及周围光线等原因,选择使用图6各图像像素区域大小330×270(像素位置左:240上:140右:570下:410)作为聚焦评价源数据。
从图6、图7和表1可以看出,曲线具有单峰性,越靠近峰值处图像越清晰;采用不同的函数阈值(如表1所示),会得到不同的归一化评价曲线,适当选取一定阈值,以使程序更容易准确评价图像聚焦效果。
4.小结
通过LabVIEW编程软件,基于SMD算子与Robert梯度算子之和新算子的图像清晰度评价算法,设计实现了图像清晰度评价软件,并通过带图像采集功能的光学显微镜对软件程序进行了验证。结果表明,聚焦评价软件能够对扫描物体在焦平面附近沿垂直焦平面方向250m位移作出理想的分辨。在本文基础上,增加外围通信控制功能,可进一步实现摄像头对扫描物体的自动聚焦功能。
参考文献
[1]高赞,等.基于Roberts梯度的自动聚焦算法[J].红外与激光工程,2006(01):117-121.
[2]NATIONAL INSTRUMENTS.NI-IMAQdx User Manual,2007.
[3]NATIONAL INSTRUMENTS.Digital Image Proce ssing,2003.
[4]高赞,姜威与朱孔凤.基于最大梯度和阈值的自动聚焦算法[J].电子测量与仪器学报,2007(05):49-54.
[5]朱孔凤,等.一种新的图像清晰度评价函数[J].红外与激光工程,2005(04):464-468.
[6]李高升,等.LabVIEW中DLL文件的创建及其应用[J].现代电子技术,2005(05):24-25.
国家863项目“海洋可控源水下系统装备研制和理论研究”(項目编号:93120114H)。
作者简介:亓夫军(1964—),男,硕士研究生,中国海洋大学信息科学与工程学院副教授,主要研究方向:光电探测和自动控制。
【关键词】LabVIEW;IMAQ Vision;图像清晰度;摄像头聚焦
1.引言
LabVIEW是美国国家仪器公司(NI)研发的基于图形界面化的编程语言——即G语言的一款程序开发软件。LabVIEW简单易用,用其进行虚拟仪器软件的开发可大大缩短开发周期,使工程技术人员把更多的精力用于所研究技术领域。
本文使用LabVIEW2012平台结合NI公司的VISION ACCQUISITION Software 2012(VAS2012)和NI VISION DEVELOPMENT MUDULE 2012(VDM2012)机器视觉软件开发包,获取了通用USB摄像头图像,通过实现一种基于图像清晰度评价函数的算法,对摄像头固定焦距情况下的聚焦效果进行了评价。该LabVIEW程序框架只需调用相应的外部动态链接库文件即可实现不同要求的基于图像处理的摄像头聚焦评价软件。
2.基于图像清晰度的聚焦评价软件设计
基于图像清晰度进行摄像头聚焦评价原理:当物体沿垂直焦平面方向移动时,聚焦图像比离焦图像含有更多的灰度变化,对应于图像处理中为边缘梯度的变化,离焦量越小图像边缘越锐利,具有更大的图像灰度梯度值[1]。其基于图像清晰度聚焦评价软件设计框图如图1所示:
图1 基于图像清晰度聚焦评价软件设计框图
2.1 图像的获取
NI公司的机器视觉开发包提供了两种图像获取子VI——高级子VI和低级子VI。使用低级子VI能够更加灵活的实现摄像设备的检索、配置、开始和关闭功能。
低级子VI获取摄像头图像的一般步骤[2]如图2所示:
图2 获取摄像头图像流程
在获取图像数据之前,需要创建内存缓冲区来接收摄像设备图像数据,利用IMAQdx Create.vi完成此功能,不使用已创建的内存缓冲区时,通过IMAQdx Dispose.vi释放分配的内存缓冲区资源。
2.2 图像的预处理
NI公司的机器视觉开发模块包含有图像预处理需要的子VI函数。图3所示程序为使用通用USB摄像头获取得到RGB彩色图像,在图像获取程序的基础上利用IMAQ Cast Image.vi和IMAQ ExtractSingleColorPlane.vi子VI转换得到对应灰度图像过程[3]。
图3 获取摄像头灰度图像程序
IMAQ Cast Image.vi能够把已有图像按指定图像类型进行转换。在图3中首先通过IMAQ Cast Image.vi将获取的RGB图像转换为HSL图像,HSL图像包含有图像的色调、饱和度和亮度信息,图像的灰度值对应于HSL图像中的亮度值,利用IMAQ ExtractSingleColorPlane.vi把图像亮度值提取出来,即获得了图像的灰度值,完成聚焦评价的图像预处理过程。
2.3 基于图像清晰度评价算法的实现
传统的基于梯度的自动聚焦算法[4]有Robert梯度算法和水平、垂直方向的灰度差分絕对值之和(SMD)算法。
Robert梯度算法使用图像区域斜方向正负45°像素点灰度差值的绝对值之和作为算子,反映了图像中斜方向灰度梯度的变化。SMD算法使用图像区域水平和垂直方向像素点差值的绝对值之和作为算子,反映图像水平和垂直方向灰度梯度的变化。
为了在一定程度上反映图像区域水平垂直方向和斜45°方向灰度梯度变化,采用SMD算子与Robert梯度算子之和作为图像清晰度评价算子。其算法公式如下:
其中,为图像算子,k为图像算子值序列。
针对LabVIEW自身对于大量运算执行时间长,内存消耗大的缺点,采用调用库函数节点(Call Library Function)调用动态链接库(Dynamic Link Library,DLL)这一方法实现图像清晰度评价算法。
图4 基于灰度梯度的图像清晰度算法程序
图4所示程序中从摄像头获取的图像经预处理后,通过IMAQ ImageToArray.vi转换为所选图像区域每个像素点的灰度值,输出为二维数组,且有多种数据类型输出端口,此处选择输出无符号8位整型数据进行梯度算子的计算。
在灰度梯度值统计过程中,聚焦点附近统计灰度梯度值小于较小数值时,模糊图像和清晰图像中符合要求的像素点数相差不大,甚至会出现模糊图像大于清晰图像的情况。为了提高评价效果,需要进行一定的阈值处理(阈值的选择因梯度函数的不同而不同),去掉较小灰度梯度值的干扰,提高图像清晰度评判结果的准确性[5]。
LabVIEW中使用CLF调用的DLL文件可在外部集成开发环境Microsoft Visual C++6.0中编写生成[6],主要函数原型及实现代码如下:
uint32_t image_process(uint32_t arrayin[],uint32_t x,uint32_t y,uint32_t threshold)
{
uint32_t i=0,j=0,k=0;
uint32_t count=0;
for(i=0;i
for(j=0;j
arrayin[i*y+j]=abs(arrayin[i*y+j]-arrayin[(i+1)*y+j]) +abs(arrayin[i*y+j]-arrayin[i*y+j+1])
+abs(arrayin[i*y+j]-arrayin[(i+1)*y+ j+1])
+abs(arrayin[(i+1)*y+j]-arrayin[i*y+ j+1]);
if(arrayin[i*y+j]>=threshold)count++;
}
}
return count;
}
图5 基于灰度梯度的清晰度算法程序运行界面
图6 不同聚焦程度的测试图像
图7 表1数据归一化评价曲线
图5所示测试程序显示设置阈值为160,评价区域为中间64×48大小像素区域,灰度梯度最大值为372,高于阈值160的灰度梯度值个数为2985。
3.实验结果
为验证所设计图像清晰度评价程序效果,使用带图像采集功能的光学显微镜作为测试平台。测试图像如图6所示,其中摄像头图像分辨率为800×600,显微放大40倍,从离焦到过焦位置调整间隔250m(顺序从左到右,从上到下),电路板过孔图像。
表1 不同图像高于阈值的算子值个数统计表
由于光源照射及周围光线等原因,选择使用图6各图像像素区域大小330×270(像素位置左:240上:140右:570下:410)作为聚焦评价源数据。
从图6、图7和表1可以看出,曲线具有单峰性,越靠近峰值处图像越清晰;采用不同的函数阈值(如表1所示),会得到不同的归一化评价曲线,适当选取一定阈值,以使程序更容易准确评价图像聚焦效果。
4.小结
通过LabVIEW编程软件,基于SMD算子与Robert梯度算子之和新算子的图像清晰度评价算法,设计实现了图像清晰度评价软件,并通过带图像采集功能的光学显微镜对软件程序进行了验证。结果表明,聚焦评价软件能够对扫描物体在焦平面附近沿垂直焦平面方向250m位移作出理想的分辨。在本文基础上,增加外围通信控制功能,可进一步实现摄像头对扫描物体的自动聚焦功能。
参考文献
[1]高赞,等.基于Roberts梯度的自动聚焦算法[J].红外与激光工程,2006(01):117-121.
[2]NATIONAL INSTRUMENTS.NI-IMAQdx User Manual,2007.
[3]NATIONAL INSTRUMENTS.Digital Image Proce ssing,2003.
[4]高赞,姜威与朱孔凤.基于最大梯度和阈值的自动聚焦算法[J].电子测量与仪器学报,2007(05):49-54.
[5]朱孔凤,等.一种新的图像清晰度评价函数[J].红外与激光工程,2005(04):464-468.
[6]李高升,等.LabVIEW中DLL文件的创建及其应用[J].现代电子技术,2005(05):24-25.
国家863项目“海洋可控源水下系统装备研制和理论研究”(項目编号:93120114H)。
作者简介:亓夫军(1964—),男,硕士研究生,中国海洋大学信息科学与工程学院副教授,主要研究方向:光电探测和自动控制。