漏磁图像的改进灰度级—彩色变换法
彭丽莎1, 王珅1, 刘欢2, 黄松岭1, 赵伟1    
1. 清华大学 电机系, 电力系统国家重点实验室, 北京 100084;
2. 中国矿业大学(北京) 机电与信息工程学院, 北京 100083
摘要:漏磁图像的伪彩色图比灰度图具有更好的辨识效果。该文在2种传统的伪彩色编码方法的基础上, 提出了一种改进的灰度级—彩色变换法。首先根据漏磁特点确定变换的初步分段线性表达式, 再利用最大类间方差法对灰度值进行聚类划分, 计算出表达式各段的节点值, 最终得到变换后的伪彩色图像。该方法根据实际的灰度值数据确定变换的具体表达式, 具有良好的自适应性。通过实验对比, 该方法得到的图像清晰且颜色鲜明, 更有利于漏磁特征识别。
关键词漏磁图像    伪彩色图像    灰度级-彩色变换法    最大类间方差法    
Improved gray-color transform method for MFL images
PENG Lisha1, WANG Shen1, LIU Huan2, HUANG Songling1, ZHAO Wei1    
1. State Key Laboratory of Power Systems, Department of Electrical Engineering, Tsinghua University, Beijing 100084, China;
2. School of Mechanical Electronic and Information Engineering, China University of Mining and Technology (Beijing), Beijing 100083, China
Abstract:Magnetic flux leakage (MFL) systems using pseudocolor images give better identification than grayscale images. This study combines two traditional pseudocolor coding methods into an improved gray-color transform method. Firstly, the initial transform piecewise linear expression is determined from the magnetic flux leakage characteristics. Then, the Ostu method for grey value clustering is used to get the expression node values. The transformed pseudocolor images are then obtained using the improved expression. This method based on the actual gray value to get the specific expression has good adaptability. Real tests show that this method gives clearer, more vivid images, which give better MFL characteristics identification.
Key words: magnetic flux leakage image    pseudocolor image    gray-color transform method    Otsu method    

目前的漏磁图像多采用的是灰度图,通过对灰度图进行图像增强处理来得到较为清晰和直观的漏磁特征显示。但是人的肉眼只能区分几十种不同的灰色,却可以分辨出几百种不同的彩色[1],因此将伪彩色处理应用于漏磁图像显示中,可以使一些在灰度图中难以察觉的微小差别突显出来,从而提高对图像的细节分辨能力。

伪彩色处理是指通过将灰度图像中各成分经过某种转换或映射得到不同的彩色,从而得到与原灰度图相对应的伪彩色图。伪彩色处理的方法有很多种。文[2]采用频率滤波法,将原图像空间中的灰度图转换到频域中进行彩色变换,从而得到伪彩色图,处理后的图像仅与原图的空间频率成分有关,而不能与原灰度值形成直接对应关系。文[3]采用的密度分割法是空间域变换法中的一种,是将灰度值分割为几个区域,并分别为其分配对应的彩色,该方法工作量大且分配的彩色数有限。此外还有连续颜色编码法和互补色编码法[4,5],其算法复杂,需要专门的软件实现。灰度级—彩色变换法[6]是目前空间域中较为常用的一种方法,但彩色变换函数表达式固定,适应性不强。

本文在传统的灰度级—彩色变换法基础上,对常用的热金属编码和彩虹编码这2种方法进行对比分析,提出了一种改进的灰度级—彩色变换方法。根据漏磁数据的自身特点确定变换函数的初步表达式,再采用最大类间方差法来进行数值的聚类划分,得到最终的伪彩色变换表达式,实现漏磁图像的伪彩色显示。该方法得到的变换表达式对实际的漏磁图像有良好的自适应性,弥补了传统的灰度级—彩色变换法的不足。实验表明该方法处理后的图像色彩鲜明、清晰,具有良好的显示效果。

1 灰度级—彩色变换法

灰度级—彩色变换法是伪彩色处理中常用的一种变换方法,其原理是将原灰度图中的各灰度值送入不同变换规则的R、 G、 B变换器中,分别对其进行编码,产生RGB彩色空间的3个分量,再将R、 G、 B三基色按照不同分量的相应比例合成对应的彩色,其生成过程如图1所示。其中, f(x,y)表示在图像中坐标(x,y)处像素点的灰度值,R(x,y)、 G(x,y)、 B(x,y)分别表示该处的红、绿、蓝三色的分量值。该方法对连续的灰度值可以产生连续的彩色。

图1 灰度级-伪彩色变换原理

在灰度级—彩色变换法中R、 G、 B变换器常用的编码方法有线性和非线性编码这2种,线性编码较为简单但适应性较差,非线性编码表现力较强但计算较为复杂。为了综合两者的优点,可以采用分段线性的伪彩色编码方法,常用的是热金属编码和彩虹编码[7,8,9]

1.1 热金属编码

热金属编码是目标图像观测常用的一种编码方法,它根据金属温度的变化将图像颜色主要分为蓝色(代表低温物体)、 红色(代表中温物体)和黄色(代表高温物体)这3个部分,各部分之间实现线性的颜色过渡,按照热金属编码进行颜色显示比较符合人们的视觉习惯。

在热金属编码方法中R、 G、 B变换器的变换函数表达式分别为


$\begin{array}{l} R(x,y) = \left\{ \begin{array}{l} 0,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 0 \le f < 64;\\ 255(f(x,y) - 64)/64,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 64 \le f < 128;\\ 255, {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 128 \le f < 256; \end{array} \right.\\ G(x,y) = \left\{ \begin{array}{l} 0,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 0 \le f < 128;\\ 255(f(x,y) - 64)/64,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 128 \le f < 224;\\ 255, {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 224 \le f < 256; \end{array} \right.\\ B(x,y) = \left\{ \begin{array}{l} 255, {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 0 \le f < 64;\\ 255(128 - f(x,y))/64,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 64 \le f < 128;\\ 0,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 128 \le f < 256; \end{array} \right. \end{array}$


将漏磁图像中的各灰度值按照热金属编码中各变换表达式进行变换,即可得到相应的彩色值。

1.2 彩虹编码

彩虹编码是观察测量图像常用的一种编码方法,根据彩虹的颜色变化将图像主要分为红色、绿色和蓝色这3部分,各部分之间同样实现线性的颜色过渡,变换后得到的颜色鲜艳、色彩丰富且层次较多。

在彩虹编码方法中R、 G、 B三种变换器的变换函数表达式分别为


$\begin{array}{l} R(x,y) = \left\{ \begin{array}{l} 0,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 0 \le f < 96;\\ 255(f(x,y) - 96)/64,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 96 \le f < 160;\\ 255, {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 160 \le f < 256; \end{array} \right.\\ G(x,y) = \left\{ \begin{array}{l} 0,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 0 \le f < 32;\\ 255(f(x,y) - 32)/64,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 32 \le f < 96;\\ 255, {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 96 \le f < 160;\\ 255(192 - f(x,y))/32,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 160 \le f < 192;\\ 255(f(x,y) - 192)/64,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 192 \le f < 256; \end{array} \right.\\ B(x,y) = \left\{ \begin{array}{l} 255, {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 0 \le f < 96;\\ 255(128 - f(x,y))/64,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 96 \le f < 128;\\ 0,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 128 \le f < 192;\\ 255(f(x,y) - 192)/64,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 192 \le f < 256. \end{array} \right. \end{array}$


将漏磁图像中的各灰度值按照彩虹编码中各变换表达式进行变换,即可得到相应的彩色值。

2 改进的灰度级—彩色变换法

热金属编码和彩虹编码都是传统的变换方法,各变换器的变换函数表达式是确定的,适应性较差。随着测量环境、设备和对象的改变,得到的漏磁数据和产生的灰度图都会有所不同,若都采用同样的编码方法,显然难以满足实际的显示需求。因此,本文提出了一种分段线性编码,首先根据需要确定各基色变换器的分段线性函数的初步表达式,再使用聚类算法根据实际的灰度值数据确定各段的节点具体值,最终形成改进的分段线性编码,从而实现伪彩色图显示。

2.1 初步变换函数表达式的确定

缺陷漏磁特征在灰度图中表现为高于或低于正常灰度值,在伪彩色图中可以分别用红色或蓝色来显示,而将正常部分的灰度值用绿色来显示,在交界处则用相邻2种颜色的线性变化进行颜色过渡。用l0 、 l1、 l2、 l3、 l4和l5 表示分段线性区域的各段节点值。在灰度值较高的部分,将红基色分量由0逐渐升高至最大值255; 而当灰度值高于某一数值后,可完全采用红色RGB(255,0,0)表示。变换器TR(f(x,y))的变换函数如下:


$R(x,y) = \left\{ \begin{array}{l} 0,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 0 \le f < {l_3};\\ 255(f(x,y) - {l_3})/\left( {{l_4} - {l_3}} \right),{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {l_3} \le f < {l_4};\\ 255,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {l_4} \le f < {l_5}; \end{array} \right.$


一般在检测到的漏磁数据中缺陷数据为少数,图像中与正常数值所对应的部分用绿色表示,位于灰度值中间的区域,因此图像中大部分数据在这个区域内,故伪彩色图希望达到的目的便是用绿色显示正常区域。不过该部分的数据仍有些许波动,因此需要将绿色区域的范围设置得比红色和蓝色区域的范围更大一些。变换器TG(f(x,y))的变换函数如下:


$G(x,y) = \left\{ \begin{array}{l} 0,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 0 \le f < {l_1};\\ 255(f(x,y) - {l_1})/\left( {{l_2} - {l_1}} \right),{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {l_1} \le f < {l_2};\\ 255,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {l_2} \le f < {l_3};\\ 255({l_4} - f(x,y))/\left( {{l_4} - {l_3}} \right),{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {l_3} \le f < {l_4};\\ 0,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {l_4} \le f < {l_5} \end{array} \right.$


缺陷中灰度值较低的部分用蓝色表示,其表现的方法同红色部分相似,因此在灰度值低于某一数值后,可完全用蓝色RGB(0,0,255)表示; 而向绿色过渡的部分,蓝基色分量逐渐降低直至为0。变换器TB(f(x,y))的变换函数如下:


$B(x,y) = \left\{ \begin{array}{l} 255,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} 0 \le f < {l_1};\\ 255({l_2} - f(x,y))/\left( {{l_2} - {l_1}} \right),{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {l_1} \le f < {l_2};\\ 0,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {l_2} \le f < {l_5}. \end{array} \right.$


分段线性区域的各段节点值中l0=0,l5=256,可以采用最大类间方差法确定其他节点的具体数值,以实现各区域的聚类划分。

2.2 区域的划分原理

聚类算法是研究分类问题的一种统计分析算法,将数据按照一定的规则划分成不同的区域[10,11],常用的聚类算法有划分法、层次法、基于密度法和基于模型法等。由于漏磁数据中正常数据(改进的伪彩色图中用绿色显示的部分)所占比重最大,远多于缺陷数据,因此,首先将这一部分的灰度值通过聚类算法划分出来,然后再对剩下2部分的灰度值分别进行二值聚类,将整个灰度段划分成5部分,分别对应为[l0,l1)、 [l1,l2)、 [l2,l3)、 [l3,l4)、 [l4,l5),从而完成分段线性编码。

本文采用最大类间方差法来实现数值的聚类,该算法是由Otsu提出的一种自适应的聚类方法[12],其基本原理是通过选择最佳的划分阈值,使划分得到的各区域之间的距离达到最大。

2.3 算法的实现

首先令ni表示图像中灰度值为i的像素个数,那么总像素数可表示为

$N = \sum\limits_{i = 0}^{255} {{n_i}} ,$


灰度值i出现的概率为

${P_i} = {\textstyle{{{n_i}} \over N}},$


可以计算出图像的平均灰度值为


${I_{av}} = \sum\limits_{i = 0}^{255} {i{P_i}} = \sum\limits_{i = 0}^{255} {i{\textstyle{{{n_i}} \over {{N_i}}}}} ,$


将灰度值划分成[0,Iav-k)、 [Iav-k,Iav+ k]和(Iav+ k,256)这3部分,分别用区域A、 B和C表示,其中k取0到min(Iav,256-Iav)之间的某值。灰度值位于各区域的概率分别为


$\begin{array}{l} {\omega _A} = \sum\limits_{i = 0}^{{I_{av}} - k - 1} {{P_i}} ,\\ {\omega _B} = \sum\limits_{{I_{av}} - k}^{{I_{av}} + k} {{P_i}} ,\\ {\omega _C} = \sum\limits_{{I_{av}} + k + 1}^{255} {{P_i}} . \end{array}$


各区域的平均灰度值μA、 μB、 μC和总平均灰度值μ分别为


$\begin{array}{l} {\mu _A} = {\textstyle{1 \over {{\omega _A}}}}\sum\limits_{i = 0}^{{I_{av}} - k - 1} {i{P_i}} ,\\ {\mu _B} = {\textstyle{1 \over {{\omega _B}}}}\sum\limits_{{I_{av}} - k}^{{I_{av}} + k} {i{P_i}} ,\\ {\mu _C} = {\textstyle{1 \over {{\omega _C}}}}\sum\limits_{{I_{av}} + k + 1}^{255} {i{P_i}} ,\\ \mu = {\omega _A}{\mu _A} + {\omega _B}{\mu _B} + {\omega _C}{\mu _C}. \end{array}$


因此3区域的类间方差为


${\sigma ^2} = {\omega _A}{\left( {{\mu _A} - \mu } \right)^2} + {\omega _B}{\left( {{\mu _B} - \mu } \right)^2} + {\omega _C}{\left( {{\mu _C} - \mu } \right)^2}.$


使类间方差最大的划分意味着错分的概率最小,k在0到min(Iav,256-Iav)区间内取值,计算得到使类间方差最大的k,那么区域B的划分区间为[Iav-k,Iav+ k]。

然后再分别对区域A和C进行二值聚类,同样采用最大类间方差法。以区域A为例,将其划分成[0,m)和[m,Iav-k)这2部分,分别用区域D和E表示。其中m为0到(Iav-k)之间的值。同样可以计算灰度值位于各区间内的概率分别为


$\begin{array}{l} {\omega _D} = \sum\limits_{i = 0}^{m - 1} {{P_i}} ,\\ {\omega _E} = \sum\limits_m^{{I_{av}} - k - 1} {{P_i}} . \end{array}$


区域D和E的平均灰度μD和μE分别为


$\begin{array}{l} {\mu _D} = {\textstyle{1 \over {{\omega _D}}}}\sum\limits_{i = 0}^{m - 1} {i{P_i}} ,\\ {\mu _E} = {\textstyle{1 \over {{\omega _E}}}}\sum\limits_m^{{I_{av}} - k - 1} {i{P_i}} , \end{array}$


则类间方差为

σ2DDA)2EEA)2.

在0到(Iav-k)之间选取使得类间方差最大的m值,从而实现区域A内部的二值聚类划分,接下来按照同样的方法在(Iav+k)到256之间选取合适的n值,实现区域C内部的划分。那么,最终得到的阈值则为分段线性编码中的各区域端点值,即 l1=m,l2=Iav-k,l3=Iav+k,l4=n。

3 实验结果与分析

基于节2的原理和算法, 对人工制作的缺陷管道试样进行实验。实验中共制作了8个内壁矩形缺陷试样(壁厚14.3 mm), 各缺陷的尺寸如表1所示。对缺陷管道试样进行漏磁检测并得到实验数据。再将得到的实验灰度图数据按照上述的聚类算法进行区域划分, 计算出各区域端点值为l0=0, l1=62, l2=108, l3=198, l4=236, l5=256。由此可以确定R、 G、 B变换器对应的变换函数。

表1 内壁矩形缺陷尺寸列表
缺陷编号 长×宽×深
1 28.6 mm×100.1 mm×4.3 mm
2 28.6 mm×100.1 mm×8.6 mm
3 7.2 mm×7.2 mm×3.6 mm
4 7.2 mm×7.2 mm×7.2 mm
5 11.4 mm×11.4 mm×7.2 mm
6 42.9 mm×42.9 mm×2.9 mm
7 42.9 mm×42.9 mm×4.3 mm
8 42.9 mm×42.9 mm×8.6 mm

按照改进后的分段线性编码进行伪彩色变换后, 得到伪彩色与各灰度值之间的分段线性对应关系,进而对漏磁数据的灰度图进行伪彩色绘制, 得到各种缺陷试样的伪彩色图像如图2所示。

图2 改进的分段线性编码显示的伪彩色图

图2中可以看出, 本文方法得到的伪彩色图像颜色鲜明, 对于缺陷和正常部分有明显的区分, 而且对于微小缺陷也能达到较好的识别效果。由于本文方法的区域划分是将实际漏磁数据的灰度值采用最大类间方差法计算得到的, 其划分的具体数值会随着实验数据的不同而改变, 因此具有很好的自适应性, 这一点是传统的热金属编码和彩虹编码方法所不具备的。

为了能够更好地对采用本文方法后的漏磁图像进行观察, 将试样中的大缺陷(如缺陷2)和小缺陷(如缺陷3)的原始灰度图, 采用热金属编码、彩虹编码和本文方法得到的伪彩色图进行局部放大对比, 分别如图3—4所示。

图3 某大矩形缺陷的各种漏磁图像
图4 某小矩形缺陷的漏磁图像

图3—4可以看出本文方法产生的伪彩色图像对于小缺陷的显示更加明显, 对于大缺陷的显示也可以很好地与周围的正常数据区域进行区分, 能够清晰地分辨出管道缺陷特征的位置, 具有比热金属编码和彩虹编码方法更好的显示效果。这一方面是由于本文方法根据漏磁数据的特点将数据主要划分为红、绿和蓝这3个区域, 这3种颜色对比鲜明, 可以收获较好的视觉效果;另一方面是由于本文方法可以根据实际数据自动进行区域的划分, 针对不同的漏磁数据, 其划分结果也有所不同, 自适应性强。因此, 采用本文方法可以更好地对漏磁图像进行显示。

4 结 论

本文基于最大类间方差法的聚类划分, 对灰度级—彩色变换法进行了改进。从改进前后的对比图中可以看出, 改进方法得到的漏磁图像颜色鲜明, 缺陷漏磁场边界清晰, 且具有较强的自适应能力, 为后续的漏磁特征定位和缺陷识别打下了良好的基础。

参考文献
[1] QU Jingyu, DU Ying. Pseudo-color coding based on visual model and perceptual space control [C]//2011 International Conference on Control, Automation and Systems Engineering (CASE). Singapore: IEEE, 2011: 1-4.
[2] GUO Shijian, SUN Gang, CHEN Zengping, et al. A new pseudo-coloring coding method for DPX image [C]//2013 Fourth International Conference on Digital Manufacturing & Automation (ICDMA). Qingdao, China: IEEE, 2013: 54-57.
[3] Zare M, Ampour M, Farrokhi IR. A heuristic method for gray images pseudo coloring with histogram and RGB layers [C]//2011 IEEE 3rd International Conference on Communication Software and Networks (ICCSN). Xi'an, China: IEEE, 2011: 524-527.
[4] DAI Jianbiao, ZHOU Shaoxiang. Computer-aided pseudo coloring coding of gray images: complementary color-coding technique [J]. Proceedings of SPIE: Electronic Imaging and Multimedia Systems, 1996, 2896: 181-191.
[5] LI Wei. Continuous pseudo-color coding of thermal image display [J]. Journal of Beijing Institute of Technology, 1997, 6(1): 37-42.
[6] Levkowitz H, Herman G T. Color scales for image data [J], IEEE Computer Graphics & Application, 1992, 12(1): 72-80.
[7] ZHOU Xiaodong, ZHANG Chunhua, LI Song. A perceptive uniform pseudo-color coding method of SAR images [C]//2006 International Conference on Radar, 2006. CIE'06. Shanghai, China: IEEE, 2006: 1-4.
[8] 李晓冰. 自适应热金属码红外测量图像伪彩色编码方法 [J]. 激光与红外, 2012, 42(6): 659-662.LI Xiaobing. Adaptive pseudo-color coding method for hot metalcode based on infrared image [J]. Laser & Infrared, 2012, 42(6): 659-662. (in Chinese)
[9] 李桂芝, 贾峰, 闫海鲲. 红外测量图像自适应彩虹码伪彩色编码方法 [J]. 长春理工大学学报(自然科学版), 2011, 34(4): 36-39, 32.LI Guizhi, JIA Feng, YAN Haikun. Adaptive pseudo-color coding method base on rainbow-code for infrared measurement image [J]. Journal of Changchun University of Science and Technology (Natural Science Edition), 2011, 34(4): 36-39, 32. (in Chinese)
[10] 潘鸿飞, 梁栋, 陈军宁, 等. 基于特征模型的形状识别与聚类算法 [J]. 清华大学学报(自然科学版), 2010, 50(12): 2007-2011.PAN Hongfei, LIANG Dong, CHEN Junning, et al. Shape recognition and clustering algorithm based on a feature model [J]. Journal of Tsinghua University (Science and Technology), 2010, 50(12): 2007-2011.(in Chinese)
[11] 公茂果, 王爽, 马萌, 等. 复杂分布数据的二阶段聚类算法 [J]. 软件学报, 2011, 22(11): 2760-2772.GONG MaoGuo, WANG Shuang, MA Meng, et al. Two-phase clustering algorithm for complex distributed data [J]. Journal of Software, 2011, 22(11): 2760-2772.(in Chinese)
[12] Otsu N. A threshold selection method from gray-level histograms [J]. IEEE Transactions on Systems, Man, and Cybernetics, 1979, 9(1): 62-66.