一种基于像素的曲线数字化方法
摘要:曲线扫描图的数字化应用广泛,如测井资料处理,以及爆炸力学研究中对文献的曲线图形进行数字化工作等。本文介绍一种利用扫描图的像素信息,通过Matlab和C#语言,对曲线图形进行数字化的方法。该方法主要包括图像预处理操作,对图像的解析输出,数字化等步骤。该方法和Origin,DigXY等曲线图像数字化软件相比,具有高自由度定制,利于二次开发等优点。
关键词:曲线图形 图像处理 数字化 Matlab C#语言
中图分类号:P631.81 文献标识码:A 文章编号:1007-9416(2014)05-0125-02
1 引言
在工程设计过程中,设计人员需要查阅和使用工程曲线中的数据,但是部分工程曲线难以用计算公式方法算出数据,需要借助图像处理技术获得数据。在爆炸力学的研究过程中,需要把研究结果与文献中类似结果进行对比分析,这就需要将文献中数据图形数字化,从图形中获得所需数据信息,从而可以高效精准的进行对比分析处理。基于以上两种情况,提出基于像素的曲线数字化方法具有较大的现实意义。
2 曲线图形数字化原理
在计算机中存储的图片,可以由RGB颜色表示的二维矩阵数据表示。矩阵的行列对应图形的坐标位置,颜色信息为矩阵的值,黑色位置处的矩阵值为(0,0,0),白色位置处的值为(255,255,255)。根据曲线图形的特点(线条的颜色和非线条空白处颜色对比很大),可以获得曲线的平面位置信息,再进行数值比例换算,可以重构曲线。
3 曲线数字化设计与实现
3.1 Matlab对扫描图进行预处理
当得到扫描图后,需要对图片进行一定的预处理才能方便之后的图像识别。用Matlab改变原点像素点RGB颜色,X轴最大值像素点RGB颜色和Y轴最大值像素点RGB颜色,分别标定为一种特定的颜色,如(55,55,55)(66,66,66)(77,77,77)。这样,在之后的程序处理时,就能根据这个特定的颜色值找到对应的三个关键点,以此为基础进行曲线识别。关于如何改变像素点RGB颜色的方法,首先用Matlab预览工具取得需要改变的像素点的坐标,然后用Matlab代码改变该坐标像素点的值。
为了在之后的C#处理数据流程里更好的识别曲线,需要记录曲线的颜色范围。以像素点方式观察曲线时,会观察出曲线里有深浅不同的颜色值,比如曲线是蓝色线条画的,那么线条的中心位置是浅蓝色,边缘可能是较深蓝色构成的线条,整体线条的颜色值会在一定的区间里,比如(90,90,90)~(100,100,100)。需要用人工的观察方式取得这种颜色范围值。记录曲线颜色范围的目的是区分出曲线和非曲线的区域,从而可以通过颜色范围值对曲线进行识别。用此方法的优点是:可以用像素颜色的方式避免工程图纸里其他颜色的污染,而缺点是:使用的是非自动化的方式,在效率上会有一定的影响。
3.2 Matlab导出三个颜色通道的矩阵文件
我们需要处理包含彩图的扫描图,所以需要用RGB颜色来描述每一个像素点。当由Matlab读取图像文件后,可以由函数命令把一个图片文件导出为三个通道(R通道、G通道和B通道)CSV文件。如一个JPG图像尺寸为1410*814,则这个图像就有1410*814=1147740个像素点。每一个CSV文件里分别包含图像的红色通道信息,绿色通道信息和蓝色通道信息。每一个CSV文件以二维像素点矩阵的形式呈现如图1,二维矩阵的数字代表RGB的值,取值范围为0~255。
3.3 C#分析处理二维矩阵文件
3.3.1 计算曲线里像素点的Y轴位置值
在得到三个CSV文件后,可以由C#读入并进行数据处理。读入的数据由二维矩阵表示,每一个矩阵位置里的值由RGB表示。找到特定RGB颜色的原点位置,以此位置为基准,向右逐像素点移动处理X轴上每一个像素点对应的Y轴的值。当移动到X轴的一个像素点时,再向上移动查找位于曲线范围的颜色值。一般情况下会找到位于曲线范围里的多个像素点,计算出中心像素点相对于X轴的距离,以此作为Y轴的位置值。比如有三个像素点位于曲线像素颜色范围内,第一个像素点位置y1=12(从这个像素点到X轴的像素偏移值),第二个像素点位置y2=13,第三个像素点位置y3=14,那么中心点的偏移位置值为yCenter=(y1+y2+y3)/3=13。
// 读入三个通道文件
3.3.2 对Y轴位置值进行比例换算
在得到X轴上每一个像素点对应的Y轴位置值后,需要把相对的偏移位置值换算为曲线里具体的值。根据特定RGB值找到Y轴最大值坐标位置,计算出最大值到原点的距离,即最大值对应的总的像素点个数,之后计算出每一个像素点对应的实际值,为Y轴最大值/总的像素点个数。再计算出X轴上每一个像素点对应的Y轴具体的值,如3.3.1中的yCenter的值为13,那么对应的Y轴具体值为13 * (Y轴最大值/总的像素点个数)。
3.3.3 对X轴像素值进行比例换算
在把Y轴位置值换算完成后,需要对X轴的像素值进行比例换算。同理,根据特定RGB值找到X轴最大值坐标位置,计算出最大值到原点的距离,为总像素点个数。之后计算出每一个像素点对应的实际值,为X轴最大值/总像素点个数。由公式可以每一个像素点的值是由等差数列递增,如第一个像素点的值为1.3秒,第二个像素点的值为2.6秒,那么第三个像素点的值为3.9秒。
3.3.4 标准化单位处理
再对X轴和Y轴进行了比例换算后,需要对X轴的单位进行标准化处理。需要处理为以0,1,2为标准刻度的对应数据,如3.3.3里三个像素的单位是由最大值和实际像素点换算出的小数,这里需要把值处理为1、2、3的形式,即获得第一秒对应的Y值,第二秒对应的Y值等。如现在知道0秒和1.3秒对应的Y值,需要计算出1秒对应的Y值。根据观察的实际情况,两个像素对应的Y值呈现递增或递减的变化趋势,根据这个特点,可以按比例计算出标准X轴单位对应的Y值。如Y0=0(0秒对应的值为0),Y1.3=5(1.3秒对应的值为5),Y1.0= Y1.3*(1/(1.3-0))=5*((1/(1.3))=3.85。
3.3.5 针对精度进行插值处理
在获得了标准单位对应的Y值后,可以根据实际情况进行插值处理。目前仅使用了平均插值的方式处理。最后可以得到以每秒为单位的X-Y轴曲线数据,每一个数据代表每一秒对应的值。结果如下(如图2所示)。
4 结语
该曲线数字化方法通过Matlab和C#成功实现。即使对于没有X和Y轴的曲线图像,也可以通过人工方式增加X和Y轴,之后可以顺利处理。该实现方法和Origin,DigXY等曲线图像数字化软件相比,在预处理环节可以增加更多的有利于识别的预处理,以此可以处理Origin或DigXY难以识别处理的图纸。该方法关键是提供了一种基于像素识别曲线的总体思路和算法,希望对各专业人员具有抛砖引玉的作用,各专业人员可以根据自己对软件的熟悉程度选择使用处理软件。由于该方法识别的精度受限于图像精度(图像分辨率),在以后的研究中,希望能在预处理环节里能提高图像的分辨率。
参考文献
[1]马兴义,杨立群,林敏等.MATLAB6应用开发指南[M].北京:机械工业出版社,2002.
[2](译者)齐立波,黄俊伟等.[美]Karli Watson,Jacob Vibe Hammer,JonD.Reid,Morgan Skinner,C#入门经典(第6)[M].北京:清华大学出版社,2014.1.1.
[3]路远涛,杨东梅.应用DigXY实现测井曲线的图形数字化[J].西部探矿工程,2011.
[4]杨运洲.测井曲线数字化软件的设计[J].江汉石油职工大学学报,2006.