图像采集卡与图像预处理库的二次开发
刘玉霞,修春波
天津工业大学计算机技术与自动化学院,天津 (300160)
摘 要: 利用Matrox系列图像采集卡作为图像采集处理系统,详细介绍如何对图像采集卡和
高级图像处理及模式识别库进行二次开发。
关键词:图像处理 图像采集 边缘检测
目前图像处理技术已成为科技领域必不可少的手段。它的应用从空间技术到显微图像、
从军事领域到工业生产,从医学诊断到少儿游戏 与每个人的工作生活密切相关。
在工业中生产监控、印刷检测和邮件分拣系统以及高速公路车辆和车牌的一动识别管理
系统等都应用了图像处理技术。如何对图像快速有效地预处理,提取出关键有效的特征信息,
对于图像的进一步分割、匹配、识别具有重要意义,这也是图像技术能否实用化的关键技术
之一。
计算机图像处理系统可以分为三个层次:高档,中档和低档。低档的计算机图像处理系
统由微机和图像采集卡构成,其结构简单,应用广泛[1]。因此利用图像采集卡进行图像的预
处理具有广泛意义。采用图像采集卡对摄像机摄取的模拟图像信号进行数字转化,提供计算
机处理所需的数字图像信号,对现有的图像文件读取,处理,都具有实现简单,原理清晰,
通用性好等优点。采集后的图像信息量大,而且可以采用不同的格式实时i或定时保存,便
于分离不同的特征信息,给图像处理和识别提供了极大的便利。
1 系统组成
本视频图像采集处理系统由 CCD 摄像机、图像采集卡和计算机系统组成。
系统中的图像采集卡采用的是加拿大Matrox公司的Matrox Meteor系列中的标准型
Matrox Meteor II Standard,此采集卡支持NTSC/PAL/RS-170/CCIR,彩色/黑白PCI采集,7路
视频输入,4MB视频传输缓存,可选MJPEG实时压缩模块,并具有触发功能;通过采集卡
上的VIA(Video interface ASIC)可以使图像高速传输到系统主存或其他PCI设备上,最高传
输速率可达到132Mb/s。采集卡还带有RS-232串行通讯接口,可以实现摄像头的远程控制。
为了有效利用此图像采集卡,需要根据系统组成所使用的硬件环境对它进行适当配置,最基
本的配置包括制式选择、缓存分配、开发程序包指定等。本系统采用MINTRON 163LP黑白
CCD,输出选择CCIR制式,并为图像采集卡分配4Mb/s传输缓存。
图像采集卡在进行图像采集过程中经历的流程大致为:开始(初始化)—〉参数设置-
采集图像到屏幕或内存-结束(释放资源)。图像采集卡的工作流程如图1所示:
-1-
开始(初始化制定设备,申请资源)
采集图像到屏幕
(采集,停止,读取,存取)
结束(释放资源)
采集图像到内存
(采集,停止,读取,存取)
参数设置(视频采集窗口,源路,制式,数据格式等)
图1 图像采集卡的工作流程
2 软件系统组成
本图像采集系统的软件包括图像处理程序库和应用软件。利用VC进行罔像处理具有速
度快、安全性好、功能强大等优点。在VC中调用Matrox图像采集卡的MIL—LITE或MIL库
的图像处理函数,具有集成性好,信息获取直观、编程方便 优点,可以快速地实现图像预
处理,通过对特征的获取,达到图像处理和识别的最终目的。
图像处理程序库和控件库
Matrox 图像采集卡有着强大的图像处理程序库——图像处理和模式识别库(MIL)和
MIL 的子库 MIL-LITE(基本图像处理)。MIL 是一个硬件独立的 32 位图像处理库,利用了
Intel 的 MMX 的多媒体图形加速功能对图像处理程序库进行了优化,可以处理二进制、灰
度或彩色图像,它是独立于硬件平台的。为了在 VB、VC 等 RAD 开发工具中实现快速程序
开发,Matrox 公司还提供了基于 MIL 的 ActiveX 控件库 ActiveMIL 和子库 ActiveMIL-Lite,
本控件库可以实现所有 MIL 的所有功能,而且由于使用了 ActiveX 控件,所以很大程度上
降低了程序设计的难度和开发程序的时间。
软件体系结构
应用软件的结构如图 2 所示
系统1 系统2
数据缓存 采集器 数据显示
……
图2 应用软件体系结构图
Structure
应用对象
:
of application software
-2-
图像采集程序的基本思路是[7]:
1) 打开通信通道,即确定一个应用对象(Application),并对每个应用对象创建一个
或多个系统对象(System)。
2) 初始化硬件资源,即为每个系统对象分配数据缓存(Data Buffer)、数据采集器
(Digitizer)和数据显示(Display)对象。
3)启动采集过程,即将图像读入数据缓存,并将缓存赋值给数组,通过对数组的处理
实现对图像的处理,图像数据与数据显示相关联后就可以通过显示控件或窗体显示预处理后
的结果。
利用VC进行罔像处理具有速度快、安全性好、功能强大等优点。在VC中调用Matrox图
像采集卡 的MIL—LITE或MIL库的图像处理函数,具有集成性好,信息获取直观、编程方
便 优点,可以快速地实现图像预处理,通过对特征的获取,达到图像处理和识别的最终目
的。
3 应用实例
以在 VC++下实现图像的显示,二值化及边缘提取为例进行讨论。
创建程序前首先运行图像采集卡自带的光盘安装程序对程序包进行解压。获取所需的
MIL 库文件后,图像处理程序可以脱离图像采集卡单独运行。
利用 MIL 库首先必须分配一个应用对象(Application),相当于创建图像处理的控制和
执行环境。在应用对象下可以建立多个系统。每个系统可以建立多个数据缓存(Data buffer),
数字转换器(Digitizer)和数据显示(Display)。将图像文件读入数据缓存,将缓存赋值给
数组,通过对数组的处理即可实现对图像的处理。图像数据与数据显示关联后就可以通过控
件或窗体显示。
在源文件(Source Files)中加入图像采集卡的库函数,使程序可以引用功能强大的图像
处理函数。
利用 MFC 的应用程序向导生成多文档视图界面的应用程序框架,工程名为 ImaProcess。
主要程序如下。
指定 MIL 对象。
MIL_ID MilApplication, // 定义MIL_ID类型的应用对象//
MilSystem, //定义MIL_ID类型的应用对象下的系统//
MilDisplay, //定义MIL_ID类型的图像显示标识 //
MilDigitizer, // 定义MIL_ID类型的数字转换器//
MilImage; // 定义MIL_ID类型的图像数据缓存器//
显示图像
在窗体中添加显示图像按钮及图像区控件(IDC_STATIC_IMAGE)。当点击显示图像
按钮时,在图像区显示出图像。
void CImaProcessDlg::OnButtonImageGrab()
-3-
{
MdigHalt(MilDigitizer);//停止图像数字转换器的连续采集数据
MdigGrab(MilDigitizer, MilImage);// 采集数字转换器中数据输入到图像缓存中
if(MbufInquire(MilImage,M_SIZE_BIT,M_NULL)==8)//探寻图像缓存中的数据设置
MbufInquire(MilImage,M_HOST_ADDRESS,&m_pGrayDataArray);
DisplayImage(m_pGrayDataArray);//显示图像
}
void CImaDlg::DisplayImage(unsigned char *imabuffer)
{
if(imabuffer!=NULL)
{
CWnd *pDrawWnd=GetDlgItem(IDC_STATIC_IMAGE);//获取控件指针
CClientDC dc(pDrawWnd);
CRect drawRect;
pDrawWnd->GetClientRect(&drawRect);
int drawWidth=640;
int drawHeight=480;
for(int i=0;i<drawHeight;i++)
{ for(int j=0;j<drawWidth;j++)
{
(j,i,RGB(imabuffer[i*drawWidth+j],
imabuffer[i*drawWidth+j],
imabuffer[i*drawWidth+j]));
}
}
}
}
图像二值化
图像用0-255个灰度等级来表示。在窗体中加入二值化按钮。以下为实现函数。
void C CImaProcessDlg::OnButtonImageFilter()
{
UpdateData();
for(int i=0;i<400;i++) //400为图像显示区的高
{
for(int j=0;j<600;j++) //600位图像显示区的宽
if(i>120 && i<360 && j>160 && j<500)//对有效工作区滤波
{
if (m_pGrayDataArray[i*600+j]>80) //80为阈值
m_pGrayDataArray[i*600+j] = 255;
else m_pGrayDataArray[i*600+j] = 0;
-4-
}
else
m_pGrayDataArray[i*600+j] = 255;//工作区外设为白色
}
DisplayImage(m_pGrayDataArray);
}
图像边缘提取。边缘提取的目的是为了进行物体识别,简化图像处理的数据量。本
文采用了Robots算子。
void C CImaProcessDlg::OnButtonFindEdge()
{
bool m_bFindEdge=false;
m_bFindEdge=!m_bFindEdge;
if(m_bFindEdge)
{
unsigned int bits[4];
int m_DibWidth = 600;//定义图像显示区的宽度
for(int row=0;row<3999;row++)
for(int col=0;col<599;col++)
{
bits[0]=m_pGrayDataArray[row*m_DibWidth+col];
bits[1]=m_pGrayDataArray[row*m_DibWidth+col+1];
bits[2]=m_pGrayDataArray[(row+1)*m_DibWidth+col];
bits[3]=m_pGrayDataArray[(row+1)*m_DibWidth+col+1];
m_pGrayDataArray[row*m_DibWidth+col]=(unsigned
char)sqrt((bits[0]-bits[3])*(bits[0]-bits[3])+(bits[2]-bits[1])*(bits[2]-bits[1]));
if(m_pGrayDataArray[row*m_DibWidth+col]>80) //
m_pGrayDataArray[row*m_DibWidth+col]=0;
else
m_pGrayDataArray[row*m_DibWidth+col]=255;
}
DisplayImage(m_pGrayDataArray);
}
}
4 结论
利用Matrox系列图像采集卡,以VC++作为软件开发平台,可以充分利用生成友好界
面的优势和图像采集卡提供的图像处理及模式识别库(MIL),在短时间内开发出功能强大
的数据采集处理系统应用软件,可靠性高,提高了工作效率。
-5-
参考文献
1 马强,林克正,熊常芳。用VC++实现图像采集卡的二次开发。电脑学习。。
2 雷晓峰,王耀南,段峰。利用VC++开发图像采集卡与图像预处理库。计算机与应用。:44-46。
3 段峰,王耀南,雷晓峰等。机器视觉技术及其应用综述。自动化博览。。
4 郑学坚。计算机图像处理系统技术及其在农业生产中的应用。北京:清华大学出版社,1999。
The Redevelopment of Image Gathering Card and The
Imaging Library
Liu Yuxia,Xiu Chunbo
School of Computer Technology and Automaton, Tianjin Polytechnic University, Tianjin,
China (300160)
Abstract
The Matrox series image gathering card is image gathering and processing system. This paper
introduces a method to implement redevelopmen by making use of image gathering card and Matrox
Imaging Library.
Keywords: image processing, image gathering, edge detecting
作者简介:刘玉霞(1981-),女,汉,在读硕士,研究方向为现代控制技术,人工智能。
-6-
图像采集卡与图像预处理库的二次开发