在色彩学中,人们使用 n 维空间中的坐标表示颜色,所有表示颜色的坐标组成的集合称为颜色空间。常见的颜色空间有 RGB、YUV、HSV 等。

目录

1. RGB 颜色空间

2. HSV 颜色空间

        使用 Matlab 绘制颜色空间的大致思路是:在一定范围内生成若干个点,使用 scatter3 函数在 3 维空间中绘制散点,然后根据坐标计算对应的颜色,每个点填充各自的颜色,最终绘制出颜色空间。

1. RGB 颜色空间

        RGB 颜色空间使用红色 (Red)、绿色 (Green)、蓝色 (Blue) 三个分量描述颜色,用实数表示 R、G、B 分量的取值范围为 [0, 1]。RGB 颜色空间常用于图像显示。

clc,clear

N = 50; % 计算点数

s = 72; % 标记大小

% 使用meshgrid函数生成二维网格

[X,Y] = meshgrid(linspace(0,1,N));

for z = linspace(0,1,N)

Z = ones(size(X)).*z; % 遍历每个z值,生成竖坐标

c = [X(:),Y(:),Z(:)]; % 标记颜色,依次为R,G,B分量

scatter3(X(:),Y(:),Z(:),s,c,'filled');

hold on

end

axis square

计算点数取 50,绘制结果如下:

2. HSV 颜色空间

        HSV 颜色空间使用色调 (Hue)、饱和度 (Saturation) 和明度 (Value) 三个分量描述颜色。三个分量的取值范围为:0° ≤ H ≤ 360°,0 ≤ S ≤ 1,0 ≤ V ≤ 1. HSV 颜色空间常用于图像处理。

        Matlab 自带 hsv2rgb 函数,可以很方便地进行 HSV 与 RGB 颜色转换。在调用 scatter3 函数前,根据 HSV 分量值,计算 RGB 分量值。

clc, clear

N = 100; % 计算点数

s = 72; % 标记大小

% 使用meshgrid函数生成二维网格

[H,S] = meshgrid(linspace(0,2*pi,N),linspace(0,1,N));

for v = linspace(0,1,N)

V = ones(size(H)).*v; % 遍历每个v值,生成竖坐标

c = hsv2rgb([H(:)/2/pi,v*S(:),V(:)]); % 标记颜色,依次为H,S,V分量

X = S.*cos(H)*v;

Y = S.*sin(H)*v;

scatter3(X(:),Y(:),V(:),s,c,'filled');

hold on

end

axis square

view(45,30)

计算点数取 100,色度范围分别取 0 ~ 360°, 0 ~ 288°,绘制结果如下:

查看原文