1.颜色模型定义
2.各颜色模型简介
3.颜色模型的转换
颜色模型:某个三维颜色空间中的一个可见光子集,它包含某个颜色域的所有颜色。例如,RGB颜色模型就是三维直角坐标颜色系统的一个单位正方体。颜色模型的用途是在某个颜色域内方便地指定颜色。由于每一个颜色域都是可见光的子集,所以任何一个颜色模型都无法包含所有的可见光。大多数的彩色图形显示设备一般都是使用红、绿、蓝三原色,我们的真实感图形学中的主要的颜色模型也是RGB模型,但是红、绿、蓝颜色模型用起来不太方便,它与颜色概念如色调、饱和度和亮度等没有直接的联系。颜色模型主要有RGB、HSV、YCbCr、NTSC等。
(1)RGB模型
RGB是从颜色发光的原理出发来设计的,RGB模型分成了3个颜色通道,即红(R)、绿(G)、蓝(B),RGB色彩模式使用RGB模型为图像中每一个像素的RGB分量分配一个0~255范围内的强度值。
RGB图像只使用3种颜色,就可以使它们按照不同的比例混合,在屏幕上重现16777216种颜色,每个颜色通道每种色各分为255阶亮度,在0时“灯”最弱——是关掉的,而在255时“灯”最亮。
(2)HSV模型
HSV模型是一种复合主观感觉的颜色模型。H、S、V分别指的是色调(彩)(hue)、色饱(saturation)和度与明度(value)。在这个模型中,一种颜色的参数便是由H、S、V3个分量构成的三元组。
HSV模型不同于RGB模型的单位立方体,而是对应于一个圆柱坐标系中的一个立体锥形子集。在这个锥形中,边界表示不同的色彩。份量表示颜色的种类,取值范围为01,相应的颜色从红、黄、绿、蓝绿、蓝、紫到黑变化,且它的值由绕V轴的旋转角决定,每一种颜色和它的补色之间相差180。S分量的取值范围也是01,表示所选色彩的纯度与该色彩的最大纯度的比例。相应的颜色从未饱和(灰度)向完全饱和(无白色元素)变化,当S=0.5时表示所选色彩的纯度为1/2。份量取值范围同样是0~1,从锥形顶点0变化到顶部1,相应的颜色逐渐变亮,顶点表示黑色,顶部表示色彩强度最大。
(3)YCbCr模型
YCbCr模型又称为YUV模型,是视频图像和数字图像中常用的颜色模型。在YCbCr模型中,Y为亮度,Cb和Cr共同描述图像的色调(色差),其中Cb、Cr分别为蓝色分量和红色分量相对于参考值的坐标。
YCbCr模型中的数据可以是双精度类型,但存储空间为8位无符号整型数据空间,且Y的取值范围为16~235, Cb和Cr的取值范围为16~240。在目前通用的图像压缩算法中((如JPEG算法),首要的步骤就是将图像颜色空间转换为YCbCr空间。
(4)NTSC模型
NTSC模型是一种用于电视图像的颜色模型。NTSC模型使用的是Y.I.Q颜色坐标系,其中,Y为光亮度,表示灰度信息;l为色调,Q为饱和度,均表示颜色信息。因此,该模型的主要优点就是能将灰度信息和信息区分开来。
(5)HSI颜色空间
HSI色彩空间是从人的视觉系统出发,用色调(Hue)、色饱和度(Saturation或Chroma)和亮度(Intensity或Brightness)来描述色彩的。
HSI色彩空间可以用一个圆锥空间模型来描述。这种描述HIS色彩空间的圆锥模型相当复杂,但确实能把色调、亮度和色饱和度的变化情形表现得很清楚。
通常把色调和饱和度通称为色度,用来表示颜色的类别与深浅程度。由于人的视觉对亮度的敏感程度远强于对颜色浓淡的敏感程度,为了便于色彩处理和识别,人的视觉系统经常采用HSI色彩空间,它比RGB色彩空间更符合人的视觉特性。
在图像处理和计算机视觉中大量算法都可在HSI色彩空间中方便地使用,它们可以分开处理而且是相互独立的。因此,在HSI色彩空间可以大大简化图像分析和处理的工作量。HSI色彩空间和RGB色彩空间只是同一物理量的不同表示法,因而它们之间存在着转换关系。
MATLAB中提供了一些色彩模型转换函数,下面将分别对其进行介绍。
(1)rgb2hsv函数
在MATLAB中,rgb2hsv函数用于将RGB模型转换为HSV模型。该函数的调用方法如下。
(1)HSVMAP=rgb2hsv(RGBMAP)%%表示将RGB色表转换成HSV色表。
(2) HSV=rgb2hsv(RGB)%%表示将RGB图像转换为HSV图像。
%%rgb2hsv函数将RGB模型转换到HSV模型。
clc;%clc的作用就是清屏幕
clear;%clear是删除所有的变量
close all;%close all是将所有打开的图片关掉。
I=imread('E:\我的桌面\MATLAB\练习\1.jpg');%绝对路径的
RGB=I;
HSV=rgb2hsv(RGB); %将RGB模型转换为HSV模型
subplot(1,2,1),
imshow(RGB),
title('RGB图像');
subplot(1,2,2),
imshow(HSV),
title('HSV图像');
(2) hsv2rgb函数
在MATLAB中,hsv2rgb函数用于将HSV模型转换为RGB模型。该函数的调用方法如下。
(1) RGBMAP=hsv2rgb(HSVMAP)%%表示将HSV色表转换成RGB色表。
(2)RGB=hsv2rgb(HSV)%%表示将HSV图像转换为RGB图像。
%%利用hsv2rgb函数将HSV模型转换为RGB模型。
clc;%clc的作用就是清屏幕
clear;%clear是删除所有的变量
close all;%close all是将所有打开的图片关掉。
I=imread('E:\我的桌面\MATLAB\练习\1.jpg');%绝对路径的
RGB=I;
HSV=rgb2hsv(RGB); %将HSV模型转换为RGB模型
RGB1=hsv2rgb(HSV);
subplot(1,3,1),
imshow(RGB),
title('RGB图像');
subplot(1,3,2),
imshow(HSV),
title('HSV图像');
subplot(1,3,3),
imshow(RGB1),
title('还原的图像');
(3)rgb2ntsc函数
在MATLAB中,rgb2ntsc函数用于将RGB颜色模型转换为NTSC颜色模型。该函数的调用方法如下。
( 1)YIQMAP=rgb2ntsc(RGBMAP)%%将RGB色表转换为YIQ色表。其中,RGBMAP为double类,YIQMAP为double类型。
(2) YIlQ=rgb2ntsc(RGB)%%表示将RGB图像转换为NTSC图像。其中,RGB为double、uint8或uint16类型,YIQ为double类型。
%%利用rgb2ntsc函数将RGB模型转换为NTSC模型。
clc;%clc的作用就是清屏幕
clear;%clear是删除所有的变量
close all;%close all是将所有打开的图片关掉。
I=imread('E:\我的桌面\MATLAB\练习\1.jpg');%绝对路径的
RGB=I;
YIQ=rgb2ntsc(RGB);%将RGB模型转换为NTSC模型
figure;
subplot(2,3,1);
subimage(RGB);
title('RGB图像')
subplot(2,3,2);
subimage(mat2gray(YIQ));
title('NTSC图像')
subplot(2,3,3);
subimage(mat2gray(YIQ(:, :,1)));
title('Y分量');
subplot(2,3,4);
subimage(mat2gray(YIQ(:, :,2)));
title('I分量');
subplot(2,3,5);
subimage(mat2gray(YIQ(:, :,3)));
title('Q分量')
(4)ntsc2rgb函数
在MATLAB中,ntsc2rgb函数用于将NTSC模型转换为RGB模型。该函数的调用方法如下。
( 1) RGBMAP=ntsc2rgb(YIQMAP)%%将YIQ色表转换为RGB色表。其中,YIQMAP为double类型,RGBMAP为double类型。
(2) RGB=ntsc2rgb(YIQ)%%表示将YIQ图像转换为RGB图像。其中,YIQ为double类型,RGB为double类型。
(5)rgb2ycbcr函数
在MATLAB中,rgb2ycb函数用于将RGB模型转换为YCbCr模型。该函数的调用方法如下。
(1) YCbCrMAP=rgb2ycbcr(RGBMAP)%%将RGB色表转换为YCbCr色表。
(2) YCbCr =rgb2ycbcr (RGB)%%表示将RGB图像转换为YCbCr图像。
%%利用rgb2ycbcr函数将RGB模型转换到YCbCr模型。
clc;%clc的作用就是清屏幕
clear;%clear是删除所有的变量
close all;%close all是将所有打开的图片关掉。
I=imread('E:\我的桌面\MATLAB\练习\1.jpg');%绝对路径的
RGB=I; %读入图像
YCbCr=rgb2ycbcr(RGB); %将RGB模型转换为YCbCr模型
subplot(1,2,1);
subimage(RGB);
title('原图像');
subplot(1,2,2);
subimage(YCbCr);
title('变换后的图像');
(6)ycbcr2rgb函数
在MATLAB中,ycbcr2rgb函数用于将YCbCr模型转换为RGB模型。该函数的调用方法如下。
(1)RGBMAP=ycbcr2rgb(YCbCrMAP)%%将YCbCr色表转换为RGB色表。
(2)RGB=ycbcr2rgb(YCbCr)%%将YCbCr图像转换为RGB图像。
%%利用ycbcr2rgb函数将YCbCr模型转换为RGB模型。
clc;%clc的作用就是清屏幕
clear;%clear是删除所有的变量
close all;%close all是将所有打开的图片关掉。
I=imread('E:\我的桌面\MATLAB\练习\1.jpg');%绝对路径的
RGB=I; %读入图像
YCbCr=rgb2ycbcr(RGB); %将YCbCr模型转换为RGB模型
subplot(1,3,1);
subimage(RGB);
title('原图像');
subplot(1,3,2);
subimage(YCbCr);
title('变换后的图像');
RGB2=ycbcr2rgb(YCbCr);
subplot(1,3,3);
subimage(RGB2);
title('还原的图像');