作者:kiss爱倪 | 来源:互联网 | 2024-11-09 20:18
在图像处理领域,不同颜色空间的操作是常见的需求。为了将各种颜色空间的坐标转换至[0,1]范围内,了解常用颜色空间的具体坐标范围至关重要。本文详细解析了多种颜色空间的坐标范围,并提供了相应的转换方法和应用场景,帮助读者更好地理解和应用这些颜色空间。
在一些图象处理的程序中,我们经常要在不同的颜色空间操作,而且经常要把各颜色空间的坐标转化到 [0,1] 之间,这就需要知道一些常用颜色空间的坐标范围。
虽然可以通过颜色空间转化的公式推导这些范围,但是不同的颜色空间转换的程序之间总是有细微的差别。
本文记录了 MATLAB 2011b 中用 makecform, applycform 进行转换得到 LAB, LUV, xyY 空间的坐标范围。
代码如下:
1 R = 0:255;
2
3 cxyz = makecform('srgb2xyz');
4 cs = {'lab', 'uvl', 'xyl'};
5 c = {makecform('xyz2lab'), makecform('xyz2uvl'), makecform('xyz2xyl')};
6 max1 = ones(3,3)*(-Inf); min1 = ones(3,3)*Inf;
7
8 for i = 1:length(c)
9 fprintf('%s ...\n', cs{i});
10 for r = R
11 if mod(r, 8) == 0, fprintf('r=%d...\n',r);end
12 [g b] = meshgrid(R,R);
13 rgb = ([r*ones(2^16,1) g(:) b(:)])/255;
14 xyz = applycform(rgb, cxyz);
15 dest = applycform(xyz, c{i});
16 tmpmax = max(dest); tmpmin = min(dest);
17 max1(i,:) = max(max1(i,:), tmpmax);
18 min1(i,:) = min(min1(i,:), tmpmin);
19 end
20 end
21 for i = 1:length(cs)
22 fprintf('\n%s:\n', cs{i});
23 for j = 1:3
24 fprintf('%d: [%.2f, %.2f]\n', j,min1(i,j), max1(i,j));
25 end
26 end
打印结果如下:
lab:
1: [0.00, 100.00]
2: [-79.25, 93.55]
3: [-112.04, 93.40]
uvl:
1: [0.00, 0.46]
2: [0.00, 0.38]
3: [0.00, 1.00]
xyl:
1: [0.00, 0.65]
2: [0.00, 0.60]
3: [0.00, 1.00]