一、 概述
利用工业数码相机拍摄照片,获取模拟图像,再通过图像采集卡,对图像进行离散化 后传送给计算机,计算机将得到的数字图像按一定的图像文件格式保存;然后调用该图像处理系统对图像处理分析,根据需要提取的特征值,最后对得到的特征数值进行数据重构分析,获取精度公差结果。
二、 该软件的构件关系
本软件的设计是以VB6.0为客户,MATLAB6.5与AUTOCAD为服务器来共同完成的。利用VB的可视化设计构建人机对话界面,利用MATLAB的图形处理功能和强大的编程功能完成软件核心处理,而后利用AUTOCAD的图形标注和测量功能完成图像数据的获得。
对AutoCAD对象控制[1]:acaddoc.sendcommand "符合Autocad 的指令" ;该命令可以向AutoCAD发出指令调用且执行该指令。
对MATLAB的对象控制[2]:在将MATLAB作为服务器利用ActiveX技术进行调用时,在操作系统的注册表中只有以下三个函数可以用。
1) matlab.execute “ MATLAB格式的程序”;该句用于执行MATLAB的命令
2) matlab.getfullmatrix(“a”, “base”, “mreal”,“mimag”);该句用于执行从MATLAB中读出距阵的数值,放在数组a中,mreal为距阵的实部,mimag为距阵的虚部。
3) matlab.putfullmatrix(“a”, “base”, “mreal”,“mimag”);该句用于执行把外部的数组读入到MATLAB中距阵的数值,放在距阵a中,mreal为距阵的实部,mimag为距阵的虚部。
在VB中应用符合MATLAB与AutoCAD的命令,首先必须建立VB与MATLAB,VB与AutoCAD之间的联系。这是通过在VB中书写公用变量声名的方式来实现的。
其核心程序为:
Public matlab As Object ;全局变量声名
Public acaddoc As Object
Public mdspace As Object
Public acadapp As Object
Public acadutil As Object
On Error Resume Next ;对于matlab的打开、声明和错误处理
Set matlab = GetObject( "matlab.application"
If Err Then
Err.Clear
Set matlab = CreateObject("matlab.application"
If Err Then
MsgBox "软件不能打开MATLAB,请重试!"
Exit Sub
End If
End If
以下是autocad的引用,对AutoCAD的打开、声明和错误处理
On Error Resume Next
Set acadapp = GetObject(, "autocad.application"
If Error Then
Err.Clear
Set acadapp = CreateObject("autocad.application"
If Err Then
MsgBox "无法引导AUTOCAD,请检查是否已安装了AUTOCAD2000."
End If
End If
Set acaddoc = acadapp.activedocument ;设置autocad的具体工作情况
Set mdspace = acaddoc.modelspace
Set acadutil = acaddoc.utility
acadapp.Visible = False
三、 软件的核心算法
1、灰度图像的算法
边缘是指其周围象素灰度有阶跃变化或者屋顶变化的那些要素的集合[4]。求解二维实函数的梯度后选择合适的阈值提取边缘的方法称为梯度阈值法。这种微分算法运算简单,但抗干扰能力差。经典的边缘检测方法是考察图像的每个像素的某个领域内灰度的变化,利用边缘邻近一阶或二阶导数变化规律,用简单的方法检测边缘,该方法常被称为边缘检测局部算子。
Roberts算子的基本原理:
对数字图像的灰度函数为Z=f(x,y),x和y分别为像素的坐标。若在坐标点(x,y)处有边缘,则利用f(x,y)在x与y方向上的变化率可以算出其变化最快的方向,即梯度方向。
若考虑数字图像的离散域,可以直接用图像的一阶差分代替图像函数的偏导数,二维离散图像函数在x方向与y方向的一阶差分分别定义为f(x+1,y)-f(x,1)与f(x,y+1)-f(x,y)。
2、二值图像的算法
二值图像中所有的像素只能从0和1这两个值中取值,因此,在MATLAB中,二值图像用一个由0和1组成的二维矩阵来表示。它们分别代表着关闭和打开,关闭表示该像素处于背景,而打开表示该像素处于前景。以这种方式来进行操作图像更容易识别出图像的结构特征。
四、 该软件的操作方法
首先是,原照片图像的获取工作。可以是彩色照片也可以是黑白照,它们都是模拟图像,如果想要对其进行处理就必须先将其转换为数字图像。其次,是图像的预处理。用户可以通过该软件进行各种图像格式的剪裁、翻转、比例调整、滤波,二值图像的腐蚀处理、膨胀处理、直方图的均衡化等等。再次,是灰度图像的处理。用户可以根据自己的需要通过比较各种算子的处理结果来确定所获取的图像,及而是对灰度果图像的处理结果进行图像的拟合重构分析。如果用户对灰度图像的处理结果不满意,可以通过二值图像操作菜单栏进行二值图像的相关操作;在这里用户可以进行,二值图像的骨架化处理,其精度可以高达一个象素级。接下来,用户将进行的是图像几何尺寸的重构和公差的计算显示。在此处,用户可以通过点击菜单栏相应的内容获取,其点击的顺序是从上向下依次序点击。最后,在相关信息菜单栏用户可以通过点击获取已打开的图片信息,圆度公差表以及该软件的版权声明信息。
五、 一个简单的实例
1.该软件的安装
单击setup.exe,依照一般软件的安装方式就可以完成安装。初始密码为:111111。图1 安装界面
图2 初始界面
2.该软件的操作
依照该软件的相关菜单就可以完成操作。其顺序为:图像的预处理,灰度处理(或二值处理),数据重构,公差获得。
以一个茶杯的照片为例:茶杯直径为35mm;其点阵1024×768像素图3 原始图像图4 灰度图像剪裁(488×488像素)图5 该照片的灰度直方图
图6 灰度算子获取轮廓边界图7 圆形的重构
结果分析:外包络圆直径为像素492;内包络圆直径为像素486;该茶杯的圆度公差为6个像素,即0.05mm。该结果与实测结果基本吻合。
3.注意事项
该软件要求用户系统中必须安装MATLAB和AUTOCAD;如果没用安装其中的任何一个,本软件将提示用户不可正常工作的原因。
六、 结束语
通过以上分析,文中已经清晰地构建出了该软件的系统模型。文中同时给出了核心部分程序的基本算法以及三个软件的调用申请指令;这对于图形图像软件的开发者来说,具有较好的参考价值。实践表明,本软件运行结果真实、有效,具有很强的实用性。
参考文献
[1] 胡海青等 著.Autocad的设计与二次开发[M].北京:化学工业出版社,2001,3.
[2] 王晓丹,吴崇明 编著.基于MATLAB的系统分析与设计——图像处理[M].西安:西安电子科技大学出版社,2004,5.
[3] 张兆礼,赵春晖,梅晓丹. 现代图像处理技术及Matlab 实现[M]. 北京:人民邮电出版社, 2001,5.
[4] 张杰.一种实用的二值图像细化算法[J]. 计算机应用及软件,1998,(12):28-32.