基于ARM9的便携式内窥镜系统设计与实现
调用Cam_Init()实现摄像头接口以及摄像头模块的初始化,为本驱动程序的主要部分。在正确执行这个函数后,摄像头就可以正常工作,开始采集数据。
摄像头接口的初始化包括五个方面:①设置寄存器CIGCTRL软件重启;②设置寄存器CISRCFMT确定输入源格式;③设置寄存器CIWDOFST溢出标识位复位并使能窗口偏移;④设置寄存器CIGCTRL,反转CAMVSYNC极性与摄像头保持一致;⑤设置YCBCR开始地址寄存器。
Cam_Init()函数如下:
BOOL Cam_Init()
{
CamGpioInit();//camera IO初始化
CAM_IF_Reset();//camera接口初始化
CamClockOn(TRUE);//设置camera时钟
Camera_Module_Reset();//camera模块重启
Camera_Initialize();//通过I2C总线设置
//camera模块的寄存器
s2440IOP->rGPGCON =~(0x324);
s2440IOP->rGPGCON |=(0x124);
if(image_size==1)
{
CamInit(QCIF_XSIZE,QCIF_YSIZE,QCIF_XSIZE,
QCIF_YSIZE,0,0,COPIFRAMEBUFFER_B,
COPIFRAMEBUFFER_A);
//设置输出图像格式、起始位置
}
else
{
CamInit(CIF_XSIZE,CIF_YSIZE,QCIF_XSIZE,
QCIF_YSIZE,0,0,COPIFRAMEBUFFER_B,
COPIFRAMEBUFFER_A);
}
RETAILMSG(1,(_T(“CamInit().. donern”)));
return TRUE;
}
在摄像头驱动设计中,对OV7660寄存器组的设置至关重要。通过函数void Wr_CamIIC(U32 slvAddr,U32 addr,U8 data)对OV7660寄存器组进行写操作,其中slvAddr为OV公司的SCCB总线写地址(默认值为0x42),addr为寄存器偏移地址,data为设置值。具体参数设置请参考OmniVision公司提供的OV7660 Setting文献。
2.2.3 嵌入式系统模块
嵌入式系统模块预装系统为Windows CE.net 4.2,驱动程序形式为流接口驱动,基本框架是dll动态链接库,使用Embedded Visual C++ 4.0或者Platform Builder 4.2编译。推荐使用EVC(Embedded Visual C++),因为EVC速度比较快。在便携式内窥镜系统中该模块主要功能为接收camera图像信号,并通过触摸屏同步显示图像。为实现该功能,要利用EVC编程,通过USB同步下载至嵌入式系统,实现对视频图像信号的处理,主要包括图像处理去噪、特征提取、缺陷尺寸估计、腐蚀缺陷成像等。其结构示意图如图5。
3 试验验证
用本系统装置检测零件内部孔径为φ5.2mm的孔,在孔的边缘有一微小裂纹。图6为图像信号在采集到嵌入式系统后未经过图像处理的视频截图,图7为采集到嵌入式系统后经过图像处理的视频截图。
由图7可见,处理后的图像清晰,裂纹明显,较好地实现了原定目标。试验证明该系统完全可以用于仪器装备内表面微小缺陷的检测判定。
本文主要针对目前通用工业内窥镜存在的体积大、重量重、不便于外场检测的缺点,在基于ARM9嵌入式系统的基础上,设计实现了便携式内窥镜系统。系统在检测零件上做了试验,结果表明该装置系统在彻底解决通用工业内窥镜缺点的基础上,还具有高清晰、高保真的特点,完全可以用于仪器装备内表面微小缺陷的检测判定。
评论