彩色图像的灰度化处理.docx
《彩色图像的灰度化处理.docx》由会员分享,可在线阅读,更多相关《彩色图像的灰度化处理.docx(9页珍藏版)》请在冰豆网上搜索。
![彩色图像的灰度化处理.docx](https://file1.bdocx.com/fileroot1/2023-1/21/98029300-5dfe-4483-b993-e2ddf3de59c7/98029300-5dfe-4483-b993-e2ddf3de59c71.gif)
彩色图像的灰度化处理
第1章绪论
1.1数字图像
数字图像,又称数码图像或数位图像,是二维图像用有限数字数值像素的表示。
数字图像是由模拟图像数字化得到的、以像素为基本元素的、可以用计算机或数字电路存储和处理的图像。
像素(或像元,Pixel)是数字图像的基本元素,像素是在模拟图像数字化时对连续空间进行离散化得到的。
每个像素具有整数行(高)和列(宽)位置坐标,同时每个像素都具有整数灰度值或颜色值。
通常,像素在计算机中保存为二维整数数阻的光栅图像,这些值经常用压缩格式进行传输和储存。
数字图像可以许多不同的输入设备和技术生成,例如数码相机、扫描仪、坐标测量机、seismographicprofiling、airborneradar等等,也可以从任意的非图像数据合成得到,例如数学函数或者三维几何模型,三维几何模型是计算机图形学的一个主要分支。
数字图像处理领域就是研究它们的变换算法。
1.2设计平台
本次设计采用的平台是MATLAB7.0。
MATLAB编程语言被业界称为第四代计算机语言,它允许按照数学推导的习惯编写程序。
MATLAB7.0的工作环境包括当前工作窗口、命令历史记录窗口、命令控制窗口、图形处理窗口、当前路径选择菜单、程序编辑器、变量查看器、模型编辑器、GUI编辑器以及丰富的函数库和MATLAB附带的大量M文件。
MATLAB是由美国MathWorks公司生产的一个为科学和工程计算专门设计的交互式大型软件,是一个可以完成各种计算和数据处理的、可视化的、强大的计算工具。
它集图示和精确计算于一身,在应用数学、物理、化工、机电工程、医药、金融和其他需要进行复杂计算的领域得到了广泛应用。
MATLAB作为一种科学计算的高级语言之所以受欢迎,就是因为它有丰富的函数资源和工具箱资源,编程人员可以根据自己的需要选择函数,而无需再去编写大量繁琐的程序代码,从而减轻了编程人员的工作负担,被称为第四代编程语言。
在MATLAB设计环境中,图像处理工具箱提供一套全方位的参照标准算法和图形工具,用于进行图像处理、分析、可视化和算法开发。
可用其对有噪声图像或退化图像进行去噪声或还原、增强图像以获得更高清晰度、提取特征、分析形状和纹理以及对两个图像进行匹配。
工具箱中大部分函数均以开放式MATLAB语言编写。
这意味着可以检查算法、修改源代码和创建自定义函数。
图像处理工具箱在生物测定学、遥感、监控、基因表达、显微镜技术、半导体测试、图像传感器设计、颜色科学及材料科学等领域为工程师和科学家提供支持。
它也促进了图像处理技术的教学。
1.3发展前景
在计算机领域中,灰度数字图像是每个像素只有一个采样颜色的图像。
这类图像通常显示为从最暗的黑色到最亮的白色的灰度,尽管理论上这个采样可以是任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。
灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色;灰度图像在黑色与白色之间还有许多级的颜色深度。
但是,在数字图像领域之外,“黑白图像”也表示“灰度图像”,例如灰度的照片通常叫做“黑白照片”。
在一些关于数字图像的文章中单色图像等同于灰度图像,在另外一些文章中又等同于黑白图像。
彩色图像的灰度化技术在现代科技中应用越来越广泛,例如人脸目标的检测与匹配以及运动物体目标的监测等等,在系统预处理阶段,都要把采集来的彩色图像进行灰度化处理,这样既可以提高后续算法速度,而且可以提高系统综合应用实效,达到更为理想的要求。
因此研究图像灰度化技术具有重要意义。
第2章设计原理
将彩色图转化成为灰度图的过程称为图像的灰度化处理。
彩色图像中的每个像素的颜色有R、G、B三个分量决定,而每个分量有255个中值可取,这样一个像素点可以有1600多万(255*255*255)的颜色的变化范围。
而灰度图像是R、G、B三个分量相同的一种特殊的彩色图像,其中一个像素点的变化范围为255种,所以在数字图像处理中一般先将各种格式的图像转变成灰度图像以使后续的图像的计算量变得少一些。
灰度图像的描述与彩色图像一样仍然反映了整幅图像的整体和局部的色度和亮度等级的分布和特征。
在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫做灰度值。
因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。
本设计采用三种方法对图像进行灰度化处理。
a)加权平均法
根据重要性及其它指标,将三个分量以不同的权值进行加权平均。
由于人眼对绿色的敏感最高,对蓝色敏感最低,因此,对RGB三分量进行加权平均能得到较合理的灰度图像。
b)平均值法
求出每个像素点的R、G、B三个分量的平均值,然后将彩色图像中的这个平均值赋予给这个像素的三个分量。
c)最大值法
将彩色图像中的三分量亮度的最大值作为灰度图的灰度值。
本课程设计分别采用了以上三种设计方案,即加权平均法、平均值法和最大值法。
在MATLAB中,通过编程实现了彩色图像的灰度化处理。
第3章仿真
3.1源代码
首先,打开MATLAB软件,新建M文件。
M文件是包括MATLAB代码的文件。
然后,进行代码编写。
本次课程设计的源代码如下:
MyYuanLaiPic=imread('F:
/334/0.jpg');%读取RGB格式的图像
MyFirstGrayPic=rgb2gray(MyYuanLaiPic);%用已有的函数进行RGB到灰度图像的转换
[rows,cols,colors]=size(MyYuanLaiPic);%得到原来图像的矩阵的参数
SecGrayPic=zeros(rows,cols);%用得到的参数创建一个全零的矩阵,这个矩阵用来存储用下面的方法产生的灰度图像
SecGrayPic=uint8(SecGrayPic);%将创建的全零矩阵转化为uint8格式,因为用上面的语句创建之后图像是double型的
ThirdGrayPic=zeros(rows,cols);
ThirdGrayPic=uint8(ThirdGrayPic);
fori=1:
rows
forj=1:
cols
sum1=0;
sum2=0;
fork=1:
colors
sum1=sum1+MyYuanLaiPic(i,j,k)/3;%用均值法进行RGB到灰度图像的转换
sum2=sum2+max(MyYuanLaiPic(i,j,k));%用最大值法进行RGB到灰度图像转换
end
SecGrayPic(i,j)=sum1;%将得到的加权平均值作为对应像素点的灰度值
ThirdGrayPic(i,j)=sum2;%将得到的简单平均值作为对应像素点的灰度值
end
end
imwrite(SecGrayPic,'F:
/334/1.bmp','bmp');%将转换后图像以bmp格式写入文件1.bmp
imwrite(ThirdGrayPic,'F:
/334/2.bmp','bmp');%将转换后图像以bmp格式写入文件2.bmp
figure
(1);%显示第1幅图像
imshow(MyYuanLaiPic);%显示原来的RGB图像
title('原图');
figure
(2);%显示第2幅图像
imshow(MyFirstGrayPic);%显示经过系统函数运算过的灰度图
title('图1');
figure(3);%显示第3幅图像
imshow(SecGrayPic);%显示均值法转化之后的灰度图像
title('图2');
figure(4);%显示第4幅图像
imshow(ThirdGrayPic);%显示最大值法转化之后的灰度图像
title('图3');
3.2代码分析
该程序采用三种方法实现彩色图像的灰度化。
程序首先读取一RGB格式的图象,然后调用已有的函数rgb2gray()来实现彩色图像灰度化,此为方法一;继而,调用size函数读取原图像图像的尺寸,并以该尺寸构建一个全零矩阵来存储用下面的方法产生的灰度图像。
由于在此之前的语句创建之后图像为双精度型,因而我们采用uint8()将其转化成无符号整型。
然后对原图像中的像素逐点处理,首先采用的是均值法,即将每个像素点上的R,G,B分量取其平均,将处理后均值作为该像素点的灰度值输出,对应代码中
MyYuanLaiPic(i,j,k)/3语句,在对所有像素点处理完毕后即可实现彩色图像的灰度化处理,此为方法二;最后我还采用了取最大值法,即调用max()函数读取像素点上RGB分量中的最大值作为该点灰度值输出,从而实现彩色图像的灰度化处理。
第4章彩色图像的灰度化处理
本设计采用的三种方法,都实现了对彩色图像的灰度化处理。
下面分别对其作具体分析。
4.1加权平均法
根据重要性及其它指标,将R、G、B三个分量以不同的权值进行加权平均。
由于人眼对绿色的敏感度最高,对蓝色敏感度最低。
因此,在MATLAB中我们可以按下式系统函数对RGB三分量进行加权平均能得到较合理的灰度图像。
(4-1)
程序首先读取一个RGB格式的图象,然后调用已有的函数rgb2gray()来实现彩色图像灰度化。
4.2平均值法
将彩色图像中的R、G、B三个分量的亮度求简单的平均值,将得到均值作为灰度值输出而得到灰度图。
其表达式见下式:
(4-2)
用size函数读取原图像图像的尺寸,并以该尺寸构建一个全零矩阵来存储用下面的方法产生的灰度图像。
由于在此之前的语句创建之后图像为双精度型,因而我们采用uint8()将其转化成无符号整型。
然后对原图像中的像素逐点处理,首先采用的是均值法,即将每个像素点上的R,G,B分量取其平均,将处理后均值作为该像素点的灰度值输出,对应代码中MyYuanLaiPic(i,j,k)/3语句,在对所有像素点处理完毕后即可实现彩色图像的灰度化处理。
4.3最大值法
将彩色图像中的R、G、B三个分量中亮度的最大值作为灰度图的灰度值。
其表达式见下式:
(4-3)
调用max()函数读取像素点上RGB分量中的最大值作为该点灰度值输出,从而实现彩色图像的灰度化处理。
稍作比较即可发现,以三种方法得到的处理结果并不完全相同,这是由于不同的处理方法对于灰度值的选取不同,考虑库函数rgb2gray(),其转化是依据亮度方程f(i,j)=0.30R(i,j)+0.59G(i,j)+0.11B(i,j))来实现的,即依据人眼对不同颜色的敏感度不同,对RGB分量以不同系数的加权平均,得到较为合理的灰度化结果。
而采用方法二处理是对RGB三个分量取简单的平均,从而得到对应灰度值,而方法三则是直接取用RGB分量中最大值作为灰度值输出。
第5章结果分析
运行程序代码,可得到如下运行结果,对应如上三种方法,可分别得到如图5.1,5.2和5.3。
图5.1采用加权平均法的灰度图
图5.2采用均值法的灰度图
图5.3采用最大值法的灰度图
对图5.1,图5.2,图5.3比较即可发现,以三种方法得到的处理结果并不完全相同,这是由于不同的处理方法对于灰度值的选取不同,考虑库函数rgb2gray(),其转化是依据亮度方程f(i,j)=0.30R(i,j)+0.59G(i,j)+0.11B(i,j))来实现的,即依据人眼对不同颜色的敏感度不同,对RGB分量以不同系数的加权平均,得到较为合理的灰度化结果。
而采用方法二处理是对RGB三个分量取简单的平均,从而得到对应灰度值,而方法三则是直接取用RGB分量中最大值作为灰度值输出。
结论
本次课程设计要求我们根据已经学习过的数字图像处理知识,运用MATLAB中的M文件进行彩色图像灰度化的仿真设计。
在老师的指导下,我进一步熟悉了MATLAB仿真平台使用方法,并且加深了对彩色图像处理的相关知识的了解,然后在查阅了大量的书籍后,设计出了三种彩色图像灰度化的方案,并顺利实现了仿真。
在本次课程设计过程中,由于对MATLAB中库函数不太熟悉,在一开始的设计过程过程中碰到了很多钉子,但是在老师耐心的指导与同学的帮助下都一一克服了。
在一次次的纠错过程中与不断的摸索下,我终于设计出了彩色图像灰度化的实现代码,并且运行出了正确的结果。
通过这次的课程设计,我深深的感受到了自身的不足。
进行课程设计不但需要多方面的知识,同时还要考验一个人的独立动脑能力和动手能力,这在课本上学不到的。
另外,这还要求我们具有一定的自学能力,在面对多次错误时要能冷静,并且还要有坚定的意志力。
在这次课程设计中,我得到的不仅仅是知识的补充,更多的是问题分析能力的提高,虽然只有短短一周时间,却给了我比平常更多的磨练,也让我在巩固书本知识的同时学到了更多的东西。
在这次的课程设计中,我看到了理论与实际相结合的重要性,同样,我还感受到了将理论实现于现实的重大喜悦,当代码最终成功运行并出现正确的仿真结果时,那种巨大的成就感是无法用言语来形容的。
在实际中,仅仅拥有理论知识是远远不够的,如果不能把理论赋予实践,再丰富的理论知识也只能是“纸上谈兵”,只有将理论与实践相结合,才能结出智慧的果实。
课程设计是对我们综合能力的检测,是培养我们的专业素养以及学习兴趣的很好的途径,学习把理论付诸于实现,能够让我们更加清楚的看到我们努力的结果。
虽然本次课程设计已经结束了,但是我不会忘记从中收到的感受与启发,相信在以后的学习中,我将更加认真努力,争取从知识以及动手能力方面都能更上一层楼!
参考文献
[1]张汗灵.MATLAB在图像处理中的应用[M].北京:
清华大学出版社,2008:
1-134.
[2]王家文.MATLAB6.5图形图像处理[M].北京:
国防工业出版社,2008:
14-56.
[3]杨枝灵,王开.VisualC++数字图像获取处理及实践应用[M].北京:
人民邮电出版社,2003:
56-145.
[4]苏彦华.VisualC++数字图像识别技术典型案例[M].北京:
人民邮电出版社,2004:
45-123.
[5]何斌.VisualC++数字图像处理[M].北京:
人民邮电出版社,2002:
1-23.