论文部分内容阅读
摘 要: 岩屑图像分析是石油地质研究的一项重要技术手段,岩屑图像灰度化是岩屑图像分析处理的初始步骤,阐述岩屑图像灰度化的基本原理,介绍将采集到的岩屑彩色图像转化为灰度图像的方法,并给出基于.NET平台的具体实现程序。
关键词: .NET平台;岩屑图像;灰度化
1 岩屑图像灰度化的必要性
岩屑图像分析对于石油勘探研究活动起着非常重要的作用,随着岩屑图像采集技术的迅猛发展,采集到的岩屑白光和荧光图像分辨率越来越高,岩屑图像占用的存储空间也越来越大,处理和传输岩屑图像需要占用大量的系统资源。因此,在岩屑图像预处理阶段,需要把采集来的岩屑彩色图像进行灰度化处理,即将彩色原始图像变换为不含颜色信息的灰度图像,每个像素仅用8位字节就可以表示,由此降低了岩屑图像所占用的存储空间,图像后续分析处理运算量大大减少,提高了后续图像分析算法速度,增强系统综合应用实效,达到实际使用的要求。
2 岩屑图像灰度化的方法
目前,在图像处理过程中,最常用的彩色图片格式有RGB、HSV和YUV三种。因为实际采集到的岩屑原始彩色图片都是RGB格式编码,所以本文仅针对RGB格式的彩色图像进行灰度化实现。
定义于RGB空间的彩色图像,其每个像素点的色彩由R、G、B三个分量共同决定(R,G,B分别表示原真彩色图中的红、绿、蓝分量),每个分量在内存所占的位数共同决定了图像深度,即每个像素点所占的字节数。以常见的24位深度彩色RGB图来说,其三个分量各占1个字节,每个分量可以取值为0~255,这样一个像素点可以有1600多万(255*255*255)的颜色变化范围。对这样一幅彩色图来说,如果进行灰度化处理,其对应的灰度图像则只有8位的图像深度,灰度变化范围为0~255,这也说明了灰度图像处理所需的计算量确实要少得多。经过这样的灰度处理,虽然丢失一些颜色等级,但是从整幅图像的整体和局部的色彩以及亮度等级分布特征来看,灰度图描述与彩色图的描述是一致的。对RGB图像进行灰度化,简单来说就是对图像的RGB三个分量进行加权平均得到最终灰度值。最常见的加权方法如下公式所示(g表示灰度化后的灰度值,R,G,B分别表示原真彩色图中的红、绿、蓝分量):
1)g=R或g=G或g=B:该方法为分量法,即用RGB三个分量的某一个分量作为该点的灰度值;
2)g=max(R+G+B):该方法为最大值法,将彩色图像中的三分量亮度的最大值作为该点的灰度值;
3)g=(R+G+B)/3:该方法为平均值法,将彩色图像中的三分量亮度求平均得到一个灰度值;
4)g=0.212671R+0.715160G+0.072169B:该方法采用了OpenCV标准开放库中所规定的灰度权值;
5)g=0.3R+0.59G+0.11B:该方法从人体生理学角度所提出的一种权值(人眼对绿色的敏感最高,对蓝色敏感最低)。
在我们承担的关于岩屑图像分析处理的科研项目中,从满足项目岩屑分析处理精度和人眼最佳的颜色敏感度要求出发,我们最终选择g=0.3R+0.59G+0.11B加权计算方法,并对该方法进行了优化。由于g=0.3R+0.59G+0.11B灰度加权平均方法在计算机实现中所采用的是浮点运算,而在该科研项目的岩屑图像处理中,实时性是非常重要的指标,这就要求实现算法时必须考虑到代码效率和运算速度,尽量避免浮点预算。因此,上述灰度计算方法可以等效为:
g=(30*R+59*G+11*B)/100。
3 岩屑图像灰度化的代码实现
考虑到系统运行效率和系统的可扩展性,笔者选择了.NET平台中的C#编程语言将采集到的岩屑白光和荧光图像进行灰度化的具体实现。
C#是微软公司针对.NET平台而专门开发的一种面向对象的编程语言,它集C++的强大功能和Visual Basic的简易性于一体,是一种性能高、面向对象、类型安全、且以Internet为中心的组件编程语言,它能使开发人员快速地为新一代Microsoft.NET平台开发出应用程序。岩屑图像灰度化的具体实现代码如下:
//彩色图像转化为灰度图像
//pictureColor为彩色图像容器
//pictureGray为灰度图像容器
//colorImage为原始图像,grayImage为转换后的灰度图像
//c为原真彩色图中的像素点
//rr,gg,bb分别为原真彩色图中的红、绿、蓝分量
//Cc为计算得出的灰度值
private void buttonChangeGray_Click(object sender, EventArgs e)
{
//点击按钮buttonChangeGray实现彩色图像向灰度图像转化
Color c = new Color();
/*取得原始彩色图片*/
Bitmap colorImage = new
Bitmap(pictureColor.Image);
Bitmap grayImage = new
Bitmap(pictureColor.Image);
int rr, gg, bb, cc;
//遍历每个像素点
for (int i = 0; i < colorImage.Width;i++)
{
for (int j = 0;j < colorImage.Height; j++)
{
c = colorImage.GetPixel(i, j);
rr = c.R;
gg = c.G;
bb = c.B;
//计算灰度值
cc = (int) (30*R+59*G+11*B)/100;
if (cc < 0)
cc = 0;
if (cc > 255)
cc = 255;
//用FromArgb函数把整形转换成颜色值
Color c1 = Color.FromArgb(cc, cc, cc);
grayImage.SetPixel(i, j, c1);
}
PictureGray.Refresh();
pictureGray.Image = grayImage;
}
}
4 结论
结合现场采集到的岩屑荧光和白光图像特点,本文研究了将岩屑彩色图像进行灰度化的具体方法,并给出了实现程序。该方法目前仅在科研项目中采用,它的实际效果还需要在现场应用中不断优化完善,以促进岩屑图像分析处理技术的提高。
参考文献:
[1]边肇祺、张学工,模式识别,北京:清华大学出版社,1999.
[2]阮秋琦,数字图像处理学,北京:电子工业出版社,2001.
[3]姚启钧,光学教程,北京:高等教育出版社,2004.
关键词: .NET平台;岩屑图像;灰度化
1 岩屑图像灰度化的必要性
岩屑图像分析对于石油勘探研究活动起着非常重要的作用,随着岩屑图像采集技术的迅猛发展,采集到的岩屑白光和荧光图像分辨率越来越高,岩屑图像占用的存储空间也越来越大,处理和传输岩屑图像需要占用大量的系统资源。因此,在岩屑图像预处理阶段,需要把采集来的岩屑彩色图像进行灰度化处理,即将彩色原始图像变换为不含颜色信息的灰度图像,每个像素仅用8位字节就可以表示,由此降低了岩屑图像所占用的存储空间,图像后续分析处理运算量大大减少,提高了后续图像分析算法速度,增强系统综合应用实效,达到实际使用的要求。
2 岩屑图像灰度化的方法
目前,在图像处理过程中,最常用的彩色图片格式有RGB、HSV和YUV三种。因为实际采集到的岩屑原始彩色图片都是RGB格式编码,所以本文仅针对RGB格式的彩色图像进行灰度化实现。
定义于RGB空间的彩色图像,其每个像素点的色彩由R、G、B三个分量共同决定(R,G,B分别表示原真彩色图中的红、绿、蓝分量),每个分量在内存所占的位数共同决定了图像深度,即每个像素点所占的字节数。以常见的24位深度彩色RGB图来说,其三个分量各占1个字节,每个分量可以取值为0~255,这样一个像素点可以有1600多万(255*255*255)的颜色变化范围。对这样一幅彩色图来说,如果进行灰度化处理,其对应的灰度图像则只有8位的图像深度,灰度变化范围为0~255,这也说明了灰度图像处理所需的计算量确实要少得多。经过这样的灰度处理,虽然丢失一些颜色等级,但是从整幅图像的整体和局部的色彩以及亮度等级分布特征来看,灰度图描述与彩色图的描述是一致的。对RGB图像进行灰度化,简单来说就是对图像的RGB三个分量进行加权平均得到最终灰度值。最常见的加权方法如下公式所示(g表示灰度化后的灰度值,R,G,B分别表示原真彩色图中的红、绿、蓝分量):
1)g=R或g=G或g=B:该方法为分量法,即用RGB三个分量的某一个分量作为该点的灰度值;
2)g=max(R+G+B):该方法为最大值法,将彩色图像中的三分量亮度的最大值作为该点的灰度值;
3)g=(R+G+B)/3:该方法为平均值法,将彩色图像中的三分量亮度求平均得到一个灰度值;
4)g=0.212671R+0.715160G+0.072169B:该方法采用了OpenCV标准开放库中所规定的灰度权值;
5)g=0.3R+0.59G+0.11B:该方法从人体生理学角度所提出的一种权值(人眼对绿色的敏感最高,对蓝色敏感最低)。
在我们承担的关于岩屑图像分析处理的科研项目中,从满足项目岩屑分析处理精度和人眼最佳的颜色敏感度要求出发,我们最终选择g=0.3R+0.59G+0.11B加权计算方法,并对该方法进行了优化。由于g=0.3R+0.59G+0.11B灰度加权平均方法在计算机实现中所采用的是浮点运算,而在该科研项目的岩屑图像处理中,实时性是非常重要的指标,这就要求实现算法时必须考虑到代码效率和运算速度,尽量避免浮点预算。因此,上述灰度计算方法可以等效为:
g=(30*R+59*G+11*B)/100。
3 岩屑图像灰度化的代码实现
考虑到系统运行效率和系统的可扩展性,笔者选择了.NET平台中的C#编程语言将采集到的岩屑白光和荧光图像进行灰度化的具体实现。
C#是微软公司针对.NET平台而专门开发的一种面向对象的编程语言,它集C++的强大功能和Visual Basic的简易性于一体,是一种性能高、面向对象、类型安全、且以Internet为中心的组件编程语言,它能使开发人员快速地为新一代Microsoft.NET平台开发出应用程序。岩屑图像灰度化的具体实现代码如下:
//彩色图像转化为灰度图像
//pictureColor为彩色图像容器
//pictureGray为灰度图像容器
//colorImage为原始图像,grayImage为转换后的灰度图像
//c为原真彩色图中的像素点
//rr,gg,bb分别为原真彩色图中的红、绿、蓝分量
//Cc为计算得出的灰度值
private void buttonChangeGray_Click(object sender, EventArgs e)
{
//点击按钮buttonChangeGray实现彩色图像向灰度图像转化
Color c = new Color();
/*取得原始彩色图片*/
Bitmap colorImage = new
Bitmap(pictureColor.Image);
Bitmap grayImage = new
Bitmap(pictureColor.Image);
int rr, gg, bb, cc;
//遍历每个像素点
for (int i = 0; i < colorImage.Width;i++)
{
for (int j = 0;j < colorImage.Height; j++)
{
c = colorImage.GetPixel(i, j);
rr = c.R;
gg = c.G;
bb = c.B;
//计算灰度值
cc = (int) (30*R+59*G+11*B)/100;
if (cc < 0)
cc = 0;
if (cc > 255)
cc = 255;
//用FromArgb函数把整形转换成颜色值
Color c1 = Color.FromArgb(cc, cc, cc);
grayImage.SetPixel(i, j, c1);
}
PictureGray.Refresh();
pictureGray.Image = grayImage;
}
}
4 结论
结合现场采集到的岩屑荧光和白光图像特点,本文研究了将岩屑彩色图像进行灰度化的具体方法,并给出了实现程序。该方法目前仅在科研项目中采用,它的实际效果还需要在现场应用中不断优化完善,以促进岩屑图像分析处理技术的提高。
参考文献:
[1]边肇祺、张学工,模式识别,北京:清华大学出版社,1999.
[2]阮秋琦,数字图像处理学,北京:电子工业出版社,2001.
[3]姚启钧,光学教程,北京:高等教育出版社,2004.