图像处理算法系列 第一章 灰度图
2013-04-08 21:34
295 查看
本人水平有限,从最简单的图像处理算法写起,希望能和大家共同提高。
这一章主要写灰度图的相关知识。
Gray Scale Image 或是Grey Scale Image,又称灰阶图。把白色与黑色之间按对数关系分为若干等级,称为灰度。灰
度分为256阶。用灰度表示的图像称作灰度图。
什么叫灰度图?任何颜色都有红、绿、蓝三原色组成,假如原来某点的颜色为RGB(R,G,B),那么,我们可以通过下面几种方法,将其转换为灰度:
1.浮点算法:Gray=R*0.3+G*0.59+B*0.11
2.整数方法:Gray=(R*30+G*59+B*11)/100
3.移位方法:Gray =(R*76+G*151+B*28)>>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)就是灰度图了。
维基百科:
在计算机领域中,灰度(Gray scale)数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑白两种颜色,灰度图像在黑色与白色之间还有许多级的颜色深度。但是,在数字图像领域之外,“黑白图像”也表示“灰度图像”,例如灰度的照片通常叫做“黑白照片”。在一些关于数字图像的文章中单色图像等同于灰度图像,在另外一些文章中又等同于黑白图像。
http://zh.wikipedia.org/wiki/%E7%81%B0%E5%BA%A6%E5%9B%BE%E5%83%8F
首先,申请灰度图的空间,空间大小为 width * height * sizeof(char), 如果使用一个char来表示颜色的,即0-255.
然后,通过上面的公式进行计算,代码部分如下:
公式一:Gray=R*0.3+G*0.59+B*0.11;
公式二:Gray =(R*76+G*151+B*28)>>8;
只是把上面的那句话替换掉。
系统的方法应该有一些并行计算的内容,在很多情况下效果应该都比这个测试的结果要好一点,应该是我自己的机器开东西太多的原因,导致另外一个核比较慢,所以这里效率才比较低。
效果呢?
肉眼上没有太大差距
这一章主要写灰度图的相关知识。
一 灰度图定义
参考百度百科http://baike.baidu.com/view/1184366.htmGray Scale Image 或是Grey Scale Image,又称灰阶图。把白色与黑色之间按对数关系分为若干等级,称为灰度。灰
度分为256阶。用灰度表示的图像称作灰度图。
什么叫灰度图?任何颜色都有红、绿、蓝三原色组成,假如原来某点的颜色为RGB(R,G,B),那么,我们可以通过下面几种方法,将其转换为灰度:
1.浮点算法:Gray=R*0.3+G*0.59+B*0.11
2.整数方法:Gray=(R*30+G*59+B*11)/100
3.移位方法:Gray =(R*76+G*151+B*28)>>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)就是灰度图了。
维基百科:
在计算机领域中,灰度(Gray scale)数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑白两种颜色,灰度图像在黑色与白色之间还有许多级的颜色深度。但是,在数字图像领域之外,“黑白图像”也表示“灰度图像”,例如灰度的照片通常叫做“黑白照片”。在一些关于数字图像的文章中单色图像等同于灰度图像,在另外一些文章中又等同于黑白图像。
http://zh.wikipedia.org/wiki/%E7%81%B0%E5%BA%A6%E5%9B%BE%E5%83%8F
二 灰度的计算
既然我们知道了灰度图的定义,那么我们怎么计算灰度图呢?首先,申请灰度图的空间,空间大小为 width * height * sizeof(char), 如果使用一个char来表示颜色的,即0-255.
out.create(input.cols,input.rows,CV_8UC1);
然后,通过上面的公式进行计算,代码部分如下:
公式一:Gray=R*0.3+G*0.59+B*0.11;
int i,j; uchar* p; uchar* q; uchar R,G,B; for( i = 0; i < nRows; ++i) { p = input.ptr<uchar>(i); q = out.ptr<uchar>(i); for ( j = 0; j < nCols; ++j) { B = p[j * nChannels]; G = p[j * nChannels + 1]; R = p[j * nChannels + 2]; q[j] = 0.299 * R + 0.587 * G + 0.114*B; } }
公式二:Gray =(R*76+G*151+B*28)>>8;
只是把上面的那句话替换掉。
三 效果和效率
先看一下效率,原始方法和乘法基本一致,位移的效率要快一倍,所以在大型实时系统中,用位移代替乘法和除法就是一种很好的优化方法。系统的方法应该有一些并行计算的内容,在很多情况下效果应该都比这个测试的结果要好一点,应该是我自己的机器开东西太多的原因,导致另外一个核比较慢,所以这里效率才比较低。
效果呢?
系统方法 | 乘法 | 移位 |
相关文章推荐
- 数字图像处理领域的二十四个典型算法及vc实现、第一章
- 数字图像处理领域的二十四个典型算法及vc实现、第一章
- 数字图像处理领域的二十四个典型算法及vc实现、第一章
- SSE图像算法优化系列十七:多个图像处理中常用函数的SSE实现。
- 数字图像处理领域的二十四个典型算法及vc实现、第一章
- 图像处理算法系列 第六章 图像形态变化 膨胀 腐蚀 开运算 闭运算
- 图像处理系列:一、梯度L0范数正则化的运动模糊核估计算法
- 数字图像处理领域的二十四个典型算法及vc实现、第一章
- 图像处理基础知识系列之四:最大似然和EM(期望最大化)算法简单梳理
- 图像处理算法系列 第五章 图像合成
- 图像处理基础知识系列之一:边界跟踪之内边界跟踪算法解释
- 数字图像处理领域的二十四个典型算法及vc实现、第一章
- 数字图像处理领域的二十四个典型算法及vc实现、第一章
- 图像处理算法系列 第四章 直方图
- 图像处理算法
- 图像处理基本算法 形状特征
- 图像处理基本算法-形态学
- 【图像处理】关于车辆检测算法的总结与改进探讨
- 图像处理之基础---彩色转灰度算法优化rgb to yuv
- 基于OPENCV的视频图像处理算法和应用