matlab实现将彩色图像转换成灰色图像的方法

来源:互联网 发布:sql优化工具 编辑:程序博客网 时间:2024/04/29 22:22

本文将@wsywl与@wesleyluo两位的博客经过自己的想法重新试了一下,效果不错。

MyYuanLaiPic = imread('lena.jpg');%读取RGB格式的图像MyFirstGrayPic = rgb2gray(MyYuanLaiPic);%用已有的函数进行RGB到灰度图像的转换[rows , cols , colors] = size(MyYuanLaiPic);%得到原来图像的矩阵的参数MidGrayPic = zeros(rows , cols);%用得到的参数创建一个全零的矩阵,这个矩阵用来存储用下面的方法产生的灰度图像OldGrayPic = zeros(rows , cols);OldGrayPic = uint8(OldGrayPic);MidGrayPic = uint8(MidGrayPic);%将创建的全零矩阵转化为uint8格式,因为用上面的语句创建之后图像是double型的%uint8是指0~2^8-1 = 255数据类型for i = 1:rows     for j = 1:cols        sum = 0;        sumold = 0;        for k = 1:colors              sumold = sumold + MyYuanLaiPic(i , j , k) / 3;%进行转化的关键公式,sum每次都因为后面的数字而不能超过255                switch k                    case{1}                            m = 0.299;                    case{2}                            m = 0.587;                    case{3}                            m = 0.114;                end                sum = sum + MyYuanLaiPic(i , j , k)*m;        end        MidGrayPic(i , j) = sum;        OldGrayPic(i , j) = sumold;    endend%imwrite(MidGrayPic , 'E:/image/matlab/DarkMouseGray.png' , 'png');imwrite(MidGrayPic , 'DarkMouseGray.png' , 'png');imwrite(OldGrayPic , 'OldGray.png' , 'png');%显示原来的RGB图像figure(1);imshow(MyYuanLaiPic);%显示经过系统函数运算过的灰度图像figure(2);imshow(MyFirstGrayPic);%显示经过其他人设计的函数运算过的灰度图像figure(3);imshow(OldGrayPic);%显示自制的转化之后的灰度图像figure(4);imshow(MidGrayPic);

显示结果如下
这是原彩色图jpg格式的
这是用matlab自带的函数生成的灰度图像
这是在网上博客中搜到的算法生成的灰度图像
这是根据彩色转灰度的原理生成的灰度图像

灰度图是指只含亮度信息,不含色彩信息的图象,就象我们平时看到的黑白照片:亮度由暗到明,变化是连续的。因此,要表示灰度图,就需要把亮度值进行 量化。通常划分成0到255共256个级别,其中0最暗(全黑),255最亮(全白)。在表示颜色的方法中,除了RGB外,还有一种叫YUV的表示方法, 应用也很多。电视信号中用的就是一种类似于YUV的颜色表示方法。在这种表示方法中,Y分量的物理含义就是亮度,Y分量包含了灰度图的所有信息,只用Y分 量就能完全能够表示出一幅灰度图来。
从 RGB 到 YUV 空间的 Y 转换公式为:
Y = 0.299R+0.587G+0.114B
这是依据的原理
与图二原始灰度相比,可以看出图四恢复出的图像效果更好一些。## matlab实现将彩色图像转换成灰色图像的方法 ##

1 0
原创粉丝点击