目录
rgb2ind将 RGB 图像转换为索引图像
语法
[X,cmap] = rgb2ind(RGB,Q)
[X,cmap] = rgb2ind(RGB,tol)
X = rgb2ind(RGB,inmap)
___ = rgb2ind(___,dithering)
说明
[X,cmap] = rgb2ind(RGB,Q)
使用具有Q
种量化颜色的最小方差量化法并加入抖动,将 RGB 图像转换为索引图像X
,关联颜色图为cmap
。
[X,cmap]
= rgb2ind
(RGB,tol)
使用均匀量化法并加入抖动,将 RGB 图像转换为索引图像,容差为tol
。
X = rgb2ind
(RGB,inmap)
使用逆颜色图算法并加入抖动,将 RGB 图像转换为索引图像,指定的颜色图为inmap
。
___ = rgb2ind(___,dithering)
启用或禁用抖动。
示例
将 RGB 图像转换为索引图像
读取和显示星云的真彩色 uint8
JPEG 图像。
RGB = imread('ngc6543a.jpg');
figure
imagesc(RGB)
axis image
zoom(4)
将 RGB 转换为包含 32 种颜色的索引图像。
[IND,map] = rgb2ind(RGB,32);
figure
imagesc(IND)
colormap(map)
axis image
zoom(4)
输入参数
RGB
- RGB 图像
m×n×3 数组
RGB 图像,指定为 m×n×3 数组。
数据类型: single
| double
| uint8
| uint16
Q
- 量化颜色的数量
正整数
最小方差量化法所用的量化颜色的数量,指定为小于或等于 65536 的正整数。返回的颜色图cmap包含 Q
种或更少的颜色。
tol
- 容差
范围 [0, 1] 内的数字
均匀量化法所用的容差,指定为范围 [0, 1] 内的数字。返回的颜色图cmap包含 (floor(1/tol)+1)^3
种或更少的颜色。
inmap
- 输入颜色图
c×3 的矩阵
输入颜色图,指定为由范围 [0, 1] 内的值组成的 c×3 矩阵。inmap
的每行都是一个三元素 RGB,指定颜色图的单种颜色的红、绿和蓝分量。该颜色图最多有 65536 种颜色。
数据类型: double
dithering
- 执行抖动'dither'
(默认) |'nodither'
执行抖动,指定为 'dither'
或 'nodither'
。抖动以损失空间分辨率为代价来提高颜色分辨率。如果选择 'nodither'
,则 rgb2ind
不执行抖动。在这种情况下,函数将原始图像中的每种颜色映射到新颜色图中最接近的颜色。
输出参数
X
- 索引图像
由非负整数组成的 m×n 矩阵
索引图像,返回由非负整数组成的 m×n 矩阵。如果 map
的长度小于或等于 256,则输出图像可以属于 uint8
类。否则,输出图像可以属于 uint16
类。输出数组 X
中的值 0
对应于颜色图中的第一个颜色。
注意
图像
X
中的值是颜色图map
的索引且不应该用于数学处理(例如过滤运算)。
数据类型: uint8
| uint16
cmap
- 颜色图
c×3 的矩阵
颜色图,返回为由范围 [0, 1] 内的值组成的 c×3 矩阵。cmap
的每行都是一个三元素 RGB,指定颜色图的单种颜色的红、绿和蓝分量。该颜色图最多有 65536 种颜色。
数据类型: double
算法
-
均匀量化 - 如果您指定tol,则
rgb2ind
使用均匀量化来转换图像。均匀量化将 RGB 颜色立方体削减为较小的tol
长度的立方体。例如,如果您指定tol
为 0.1,则立方体的边缘为 RGB 立方体长度的十分之一。小立方体总数为:t = (floor(1/tol)+1)^3
每个立方体表示输出图像中的一种颜色。因此,
t
为颜色图的最大长度。rgb2ind
会删除不显示在输入图像中的任何颜色,因此实际颜色图可能小于t
。 -
最小方差量化 - 如果您指定Q,则
rgb2ind
使用最小方差量化。最小方差量化将 RGB 颜色立方体削减为不同大小的较小块(未必是立方体),具体取决于这些颜色在图像中的分布情况。如果输入图像实际使用的颜色数少于指定的数量,则输出颜色图也会变小。 -
逆颜色图 - 如果您指定输入颜色图inmap,则
rgb2ind
使用颜色图映射。逆颜色图算法可将指定颜色图量化为每个颜色分量 32 个不同色阶。然后,对于输入图像中的每个像素,查找量化的颜色图中最接近的颜色。
参考
[1] Spencer W. Thomas, "Efficient Inverse Color Map Computation", Graphics Gems II, (ed. James Arvo), Academic Press: Boston. 1991. (includes source code)