彩色图转灰度图的原理
图像处理中,大部分的处理方法都需要事先把彩色图转换成灰度图才能进行相关的计算、识别。
彩色图转换灰度图的原理如下:
我们知道彩色位图是由R/G/B三个分量组成,其文件存储格式为
BITMAPFILEHEADER+BITMAPINFOHEADER,紧跟后面的可能是:
如果是24位真彩图,则每个点是由三个字节分别表示R/G/B,所以这里直接跟着图像的色彩信息;
如果是8位(256色),4位(16色),1位(单色)图,则紧跟后面的是调色板数据,一个RGBQUAD类型的数组,其长度由BITMAPINFOHEADER.biClrUsed来决定。
然后后面紧跟的才是图像数据(24位图是真实的图像数据,其他的则是调色板的索引数据)。
灰度图是指只含亮度信息,不含色彩信息的图象,就象我们平时看到的黑白照片:亮度由暗到明,变化是连续的。因此,要表示灰度图,就需要把亮度值进行量化。通常划分成0到255共256个级别,其中0最暗(全黑),255最亮(全白)。在表示颜色的方法中,除了RGB外,还有一种叫YUV的表示方法,应用也很多。电视信号中用的就是一种类似于YUV的颜色表示方法。在这种表示方法中,Y分量的物理含义就是亮度,Y分量包含了灰度图的所有信息,只用Y分量就能完全能够表示出一幅灰度图来。
什么叫灰度图?任何颜色都有红、绿、蓝三原色组成,假如原来某点的颜色为RGB(R,G,B),那么,我们可以通过下面几种方法,将其转换为灰度:
1.浮点算法:Gray=0.299R+0.587G+0.114B
2.整数方法:Gray=(R*30+G*59+B*11)/100
3.移位方法:Gray=(R*28+G*151+B*77)>>8;
4.平均值法:Gray=(R+G+B)/3;
5.仅取绿色:Gray=G;
通过上述任一种方法求得Gray后,将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图了。
从RGB到YUV空间的Y转换公式为:
Y=0.299R+0.587G+0.114B
在WINDOWS中,表示16位以上的图和以下的图有点不同;16位以下的图使用一个调色板来表示选择具体的颜色,调色板的每个单元是4个字节,其中一个透明度;而具体的像素值存储的是索引,分别是1、2、4、8位。16位以上的图直接使用像素表示颜色。(那16位的图像是怎么表示的呢??)
那么如何将彩色图转换为灰度图呢?
灰度图中有调色板,首先需要确定调色板的具体颜色取值。我们前面提到了,灰度图的三个分量相等。
当转换为8位的时候,调色板中有256个颜色,每个正好从0到255个,三个分量都相等。
当转换为4位的时候,调色板中16个颜色,等间隔平分255个颜色值,三个分量都相等。
当转换为2位的时候,调色板中4个颜色,等间隔平分255个颜色,三个分量相等。
当转换为1位的时候,调色板中两个颜色,是0和255,表示黑和白。
将彩色转换为灰度时候,按照公式计算出对应的值,该值实际上是亮度的级别;亮度从0到255;由于不同的位有不同的亮度级别,所以Y的具体取值如下:
Y=Y/(1<<(8-转换的位数));(这个不是很懂???)
所以,我们要转化成灰度图,并且存储成一幅可以看到的图像,需要做如下转换:
16位以上的图像不带调色板,只需要把图像数据按每个点的位数都转换成相同的灰度值即可
16位以下的图像,则需要修改调色板的数值,并且按照每个点所占位数修改灰度值索引即可。
<!--EndFragment-->
分享到:
相关推荐
用MATLAB实现的很方便的将灰度图转化为彩色图像的源代码。
用通过平均值法,加权平均法,最大值法三种方法,实现彩色图像的灰度化处理。
C#图像处理程序,彩色图像转换为灰度图完整源代码,与详细注释 并添加了原理
灰度和彩色图像处理,word版本 可编辑,附分析与总结 读取二进制文件lab3prob4,文件的尺寸是435*580,图像数据类型为‘uint8’,(1)读取并显示图像,colormap设置为gray;(2)重新显示(1)中图像,colormap设置...
本例子将800*600的double类型的数据先进行归一化成0-255的quint8类型的数据,然后将归一化后的数据生成一个QImage,然后将qimage放到qlabel中显示,可以切换灰度图或伪彩图
实现灰度图像的JPEG原理性编解码; 对所实现的压缩方法进行性能评价,评价指标包括但不限于:PSNR,SSIM,码率(bpp),压缩率 可对彩色图像编码,色度下采样 质量可调 熵编码可选用哈夫曼编码和算术编码
对RGB图像的灰度化原理进行了介绍,对常见的几种灰度化方法进行总结,并在代码中实现这几种方案。整个代码基于OpenCV实现,至于其他的图像格式,在取得了图像数据指针后,其他的操作方法可以借鉴。
该算法是一种使用kmeans原理对输入的彩色或灰度图像进行聚类的全自动方法,但是在这里,您无需指定聚类数或任何初始种子值即可开始迭代,该算法会自动查找聚类数和聚类中心. 这是在不知道聚类数量的情况下对图像进行...
计算机图像处理_matlab_7-车牌、彩色图像 计算机图像处理_matlab_7-车牌、彩色图像
BMP格式读取 保存 DFT FFT 直方图 色调均化 缩放 模糊 锐化 滤镜 形态学处理 曲线 裁剪 灰度图 彩色图 自动阈值 等等...除此之外还有很多其他小功能... 建议使用VS2013打开!!!核心代码在Bmp.cpp中!!! 更新...
matlab算法原理详解
3.3 全等级直方图灰度拉伸 3.3.1 灰度拉伸定义 3.3.2 灰度拉伸编程实例 3.4 直方图均衡化 3.4.1 直方图均衡化定义 3.4.2 直方图均衡化编程实例 3.5 直方图匹配 3.5.1 直方图匹配定义 3.5.2 直方图...
图像灰度化是许多数字图像处理的初始和基础工作, 本文对灰度化的基本原理作了简要阐述, 同时分别介 绍了8 位和24 位彩色位图灰度化的具体方法, 并给了实现详细代码。
当代信息社会离不开图像,而图像通常会在计算机中占用非常大的空间,图像包含的冗余数据多,传输受到...我们在行程编码压缩原理基础上编写出行程编码算法,可以实现同一图像的彩色图像、灰度图像和二值图像的算法压缩。
4.1.1彩色图像到灰度图像的转化. 14 4.2 自动阈值法. 15 4.2.1 Otsu算法确定阈值. 15 4.3全局阈值与局部阈值对比分析. 16 第五章 聚类算法彩色图像分割. 21 5.1 聚类分割算法分析. 21 5.2 ...
我优化了算法,对于彩色图像,灰度图像都适用。 以下是算法代码 # logistic encrypted for image from PIL import Image import numpy as np def logic_encrypt(im, x0, mu): xsize, ysize = im.size
该方法利用图像彩色信息计算得到的颜色不变量信息代替灰度信息作为输入,提取图像SURF特征点并进行特征点匹配,根据相似性变换原理对误匹配点进行过滤,提高变换矩阵计算的准确率,采用亮度渐变原则对重叠区域进行...
算法利用联合双边滤波原理,将Kinect镜头同一时刻采集的深度图像和彩色图像作为输入,首先,用高斯核函数计算出深度图像的空问距离权值和RGB彩色图像的灰度权值;然后,将这两个权值相乘得到联合滤波权值,并利用...
包含彩色图像的理论知识和VC具体实现的原理和代码