task3 彩色空间的转换

1.RGB颜色空间:
RGB(red,green,blue)颜色空间最常用的用途就是显示器系统,彩色阴极射线管,彩色光栅图形的显示器 都使用R、G、B数值来驱动R、G、B 电子枪发射电子,并分别激发荧光屏上的R、G、B三种颜色的荧光粉发出不同亮度的光线,并通过相加混合产生各种颜色;扫描仪也是通过吸收原稿经反射或透射而发送来 的光线中的R、G、B成分,并用它来表示原稿的颜色。RGB色彩空间称为与设备相关的色彩空间,因为不同的扫描仪扫描同一幅图像,会得到不同色彩的图像数据;不同型号的显示器显示同一幅图像,也会有不同 的色彩显示结果。显示器和扫描仪使用的RGB空间与CIE 1931 RGB真实三原色表色系统空间是不同的,后者 是与设备无关的颜色空间。btw:Photoshop的色彩选取器(Color Picker)。可以显示HSB、RGB、LAB和CMYK 色彩空间的每一种颜色的色彩值。
在计算机技术中使用最广泛的颜色空间是RGB颜色空间,它是一种与人的视觉系统结构密切相关的模型。根据人眼睛的结构,所有的颜色都可以看成三个基本颜色-红色(red)、绿色(green)和蓝色(blue)的不同组合,大部分显示器都采用这种颜色模型。对一幅三通道彩色数字图像对每个图像像素(x,y),需要指出三个矢量分量R、G、B;
根据美国国家电视制式委员会NTSC制式的标准,当白色的亮度用Y来表示是,它和红基色(R)、绿基色(G)、蓝基色(B)的关系可用如下的方程等式描述:
在这里插入图片描述
在这里插入图片描述
2.彩色图像简介:
在RGB色彩空间,图像深度与色彩的映射关系主要有真彩色、伪彩色和调配色。
真彩色是指在组成一幅彩色图像的每个像素值中,有R,G,B三个基色分量,每个基色分量直接决定显示设备的基色强度,这样产生的彩色称为真彩色,是真实的原图彩色。
伪彩色图像的每个像素值实际上是一个索引值或代码,该代码值作为色彩查找表CLUT中某一项的入口地址,根据该地址可查找出包含实际R,G,B的强度值。这种用查找映射的方法产生的色彩称为伪彩色。色彩查找表CLUT是一个事先做好的表,表项入口地址也称为索引号。彩色图像本身的像素数值和色彩查找表的索引号有一种变换关系,这种关系可以是系统定义的,也可以是用户自己定义的变换关系。使用查找得到的数值显示的彩色是真的,可又不是图像本身的颜色,因为其没有完全反映原图的彩色,所以称其为伪彩色。
调配色的获取是通过每个像素点的R,G,B分量分别作为单独的索引值进行变换,经相应的色彩查找表找出各自的基色强度,用变换后的R,G,B强度值产生色彩。
3.灰度图像简介:
灰度是描述灰度图像内容的最直接的视觉特征。它指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0,故黑白图像也称灰度图像。灰度图像矩阵元素的取值通常为[0,255],因此其数据类型一般为8位无符号整数,这就是人们通常所说的256级灰度。
4.彩色图像转化为灰度图像:

(1)、原理
对于图像由彩色图转化为灰度图有三种方法
分别为 加权法 均值法 最大值法

加权法就是 GRAY==0.3R+0.59G+0.11*B

均值法就是 GRAY==(R+G+B)/3

最大值发就是 max(R,G,B)

from matplotlib import image as mpimg
from matplotlib import pyplot as plt
import numpy as np
%matplotlib inline
src = mpimg.imread('E:\\cat/cat.jpg')
plt.imshow(src)
gray=np.array(src)
gray=gray[:,:,0]
new_color=np.array([gray,gray,gray])
new_color=np.transpose(new_color,(1,2,0))#矩阵维度交换
plt.imshow(new_color)
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述

在这里插入图片描述
4.灰度图像转换成彩色图像:
将灰度图像转换为彩色图像,称为灰度图像的伪彩色处理。
伪彩色处理技术的实现方式有很多,如:灰度分割法、灰度级-彩色变换法、滤波法等等。以下采用的是灰度级-彩色变换法,这是将来自传感器的灰度图像送入三个不同特征的R、G、B变换器,然后将三种变换器的不同输出分别送到彩色显示器进行显示的技术。
映射关系如下,其中R(x,y)、G(x,y)、B(x,y)分别表示R、G、B通道的颜色值,f(x,y)表示特定点灰度图像的灰度值,f是所选灰度图像的灰度值。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码如下:

void F_Gray2Color(CvMat* gray_mat, CvMat* color_mat)
{
   if(color_mat)
      cvZero(color_mat);
   int stype = CV_MAT_TYPE(gray_mat->type), dtype = CV_MAT_TYPE(color_mat->type);
   int rows = gray_mat->rows, cols = gray_mat->cols;
   // 判断输入的灰度图和输出的伪彩色图是否大小相同、格式是否符合要求   
   if (CV_ARE_SIZES_EQ(gray_mat, color_mat) && stype == CV_8UC1 && dtype == CV_8UC3)
   {
   	CvMat* red = cvCreateMat(rows, cols, CV_8U);      // 红色分量
      	CvMat* green = cvCreateMat(rows, cols, CV_8U);   // 绿色分量
      	CvMat* blue = cvCreateMat(rows, cols, CV_8U);    // 蓝色分量
      	CvMat* mask = cvCreateMat(rows, cols, CV_8U);   
      	cvSubRS(gray_mat, cvScalar(255), blue);          // blue = 255 - gray
     	cvCopy(gray_mat, red);                           // red = gray
      	cvCopy(gray_mat, green);                         // green = gray , if gray < 128
      	cvCmpS(green, 128, mask, CV_CMP_GE );            //
      	cvSubRS(green, cvScalar(255), green, mask);      // green = 255 - gray , if gray >= 128
      	cvConvertScale(green, green, 2.0, 0.0);          // green = 2 * green
     	// 将蓝绿红三色融合为一幅伪彩色图
      	cvMerge(blue, green, red, NULL, color_mat);
     	cvReleaseMat( &red );
      	cvReleaseMat( &green );
      	cvReleaseMat( &blue );
      	cvReleaseMat( &mask );
   }
}      	
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值