在色彩学中,人们使用 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°,绘制结果如下:
发表评论