来源:matlab帮助文档
RGB图像转索引图像
[X,cmap]=rgb2ind(RGB,Q)
[X,cmap]=rgb2ind(RGB,tol)
X=rgb2ind(RGB,inmap)
RGB图像转灰度图像
I = rgb2gray(RGB)
newmap = rgb2gray(map)
RGB图像值转亮度值
lightness = rgb2lightness(rgb)
索引图象转RGB图像
RGB = ind2rgb(X,map)
索引图象转灰度图像
I = ind2gray(X,cmap)
灰度图像转索引图像
[X,cmap] = gray2ind(I,c)
[X,cmap] = gray2ind(BW,c)
灰度图像转二值图像
BW=im2bw(G,c);
数值矩阵转灰度图像
I=mat2gray(X,[xmin,xmax])
一、 RGB图像转换
1.1 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)启用或禁用抖动。
例
读取和显示星云的真彩色uint8JPEG图像。
RGB=imread('ngc6543a.jpg');
figure
imagesc(RGB)
axisimage
zoom(4)
将RGB转换为包含32种颜色的索引图像。
[IND,map]=rgb2ind(RGB,32);
figure
imagesc(IND)
colormap(map)
axisimage
zoom(4)
输入参数
RGB图像:m×n×3数组
数据类型:single|double|uint8|uint16
Q-量化颜色的数量:正整数
最小方差量化法所用的量化颜色的数量,指定为小于或等于65536的正整数。返回的颜色图cmap包含Q种或更少的颜色。
最小方差量化将RGB颜色立方体削减为不同大小的较小块(未必是立方体),具体取决于这些颜色在图像中的分布情况。如果输入图像实际使用的颜色数少于指定的数量,则输出颜色图也会变小。
tol-容差:范围[0,1]内的数字
均匀量化法所用的容差,指定为范围[0,1]内的数字。返回的颜色图cmap包含(floor(1/tol)+1)^3种或更少的颜色。
均匀量化将RGB颜色立方体削减为较小的tol长度的立方体。例如,如果您指定tol为0.1,则立方体的边缘为RGB立方体长度的十分之一。小立方体总数为:
t=(floor(1/tol)+1)^3
每个立方体表示输出图像中的一种颜色。因此,t为颜色图的最大长度。rgb2ind会删除不显示在输入图像中的任何颜色,因此实际颜色图可能小于t。
inmap-输入颜色图:c×3的矩阵
输入颜色图,指定为由范围[0,1]内的值组成的c×3矩阵。inmap的每行都是一个三元素RGB,指定颜色图的单种颜色的红、绿和蓝分量。该颜色图最多有65536种颜色。
逆颜色图算法可将指定颜色图量化为每个颜色分量32个不同色阶。然后,对于输入图像中的每个像素,查找量化的颜色图中最接近的颜色。
数据类型:double
dithering-执行抖动:'dither'(默认)|'nodither'
执行抖动,指定为'dither'或'nodither'。抖动以损失空间分辨率为代价来提高颜色分辨率。有关详细信息,请参阅dither。
如果选择'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
1.2 rgb2gray
将 RGB 图像或颜色图转换为灰度图
语法
I = rgb2gray(RGB)
newmap = rgb2gray(map)
说明
I = rgb2gray(RGB)
将真彩色图像 RGB
转换为灰度图像 I
。rgb2gray
函数通过消除色调和饱和度信息,同时保留亮度,来将 RGB 图像转换为灰度图。如果已安装 Parallel Computing Toolbox™,则 rgb2gray
可以在 GPU 上执行此转换。
newmap = rgb2gray(map)
返回等同于 map
的灰度颜色图。
示例
读取并显示 RGB 图像,然后将其转换为灰度图。
读取示例文件 peppers.png 并显示 RGB 图像。
RGB = imread('peppers.png');
imshow(RGB)
将 RGB 图像转换为灰度图像并显示图像。
I = rgb2gray(RGB);
figure
imshow(I)
将 RGB 颜色图转换为灰度颜色图
读取具有 RGB 颜色图的索引图像。然后将颜色图转换为灰度。
读取示例文件 corn.tif
,该文件为具有 RGB 颜色图的索引图像。
[X,map] = imread('corn.tif');
显示图像。
imshow(X,map)
将 RGB 颜色图转换为灰度颜色图并重新显示图像。
newmap = rgb2gray(map);
imshow(X,newmap)
输入参数
RGB - 真彩色图像:m×n×3 矩阵
真彩色图像,指定为 m×n×3 矩阵。
如果已安装 Parallel Computing Toolbox,则 RGB
也可以是 gpuArray。
数据类型: single
| double
| uint8
| uint16
map-颜色图:c×3 数值矩阵
颜色图,指定为由范围 [0, 1] 内的值组成的 c×3 数值矩阵。map
的每行都是一个三元素 RGB,指定颜色图的单种颜色的红、绿和蓝分量。
如果已安装 Parallel Computing Toolbox,则 map
也可以是 gpuArray。
数据类型: double
输出参数
I-灰度图片:m×n 矩阵
灰度图像,以 m×n 矩阵形式返回。
如果已安装 Parallel Computing Toolbox,则 I
也可以是 gpuArray。
newmap
- 灰度颜色图:c×3 数值矩阵
灰度颜色图,返回为由范围 [0, 1] 内的值组成的 c×3 数值矩阵。newmap
的三列是相同的,因此 map
的每行都指定一个强度值。
如果已安装 Parallel Computing Toolbox,则 newmap
也可以是 gpuArray。
数据类型: double
算法
rgb2gray
通过计算 R、G 和 B 分量的加权和,将 RGB 值转换为灰度值:
0.2989 * R + 0.5870 * G + 0.1140 * B
这些权重与 rgb2ntsc
函数用于计算 Y 分量的权重相同。
在舍入到小数点后 3 位之后,rgb2gray
中用来计算灰度值的系数与 Rec.ITU-R BT.601-7 中用来计算亮度 (E'y) 的系数相同。
Rec.ITU-R BT.601-7 使用以下公式计算 E'y:
0.299 * R + 0.587 * G + 0.114 * B
1.3 rgb2lightness
将RGB颜色值转化为亮度值
语法
lightness = rgb2lightness(rgb)
说明
example
lightness = rgb2lightness(rgb)将rgb颜色值转换为亮度值,不包括颜色组件。亮度与CIE 1976 L*a*b*颜色空间中的L*分量相同。
示例
rgb = imread('peppers.png');
lightness = rgb2lightness(rgb);
figure
imshow(rgb)
title('Input RGB Image')
figure
imshow(lightness,[])
title('Lightness Component of Image')
colorbar
输入参数
rgb — RGB color values
m-by-n-by-3
image array
RGB颜色值,指定为m×n×3图像数组。输入的rgb必须在sRGB颜色空间中,参考白点为D65。
数据类型: single | double | uint8 | uint16
输出参数
lightness —
Converted lightness values
m-by-n image
array
转换后的亮度值,以m-by-n图像数组的形式返回。如果输入数据类型为double,则输出数据类型为double。否则,输出数据类型为single。
数据类型: single | double
二、 索引图象转换
2.1 ind2rgb
将索引图像转换为 RGB 图像
语法
RGB = ind2rgb(X,map)
说明
RGB =
ind2rgb(X,map)
将索引图像 X
和对应的颜色图 map
转换为 RGB(真彩色)格式。
示例
将索引图像转换成 RGB
读取索引图像示例文件 corn.tif
中的第一幅图像。
[X,cmap] = imread('corn.tif');
索引图像 X
是 uint8
类型的 415×312 数组。颜色图 cmap
是 double
类型的 256×3 矩阵,因此索引图像中有 256 种颜色。显示图像。
imshow(X,cmap)
将索引图像转换为 RGB 图像。结果为一个 double
类型的 415×312×3 数组。
RGB = ind2rgb(X,cmap);
检查 RGB 图像的值是否在 [0, 1] 范围内。
disp(['Range of RGB image is [',num2str(min(RGB(:))),', ',num2str(max(RGB(:))),'].'])
Range of RGB image is [0.0078431, 0.97647].
输入参数
X
- 索引图像:m×n 整数矩阵
索引图像,指定为 m×n 整数矩阵。
如果将 X
指定为整数数据类型的数组,则值 0 对应于颜色图 map
中的第一种颜色。对于包含 c 种颜色的颜色图,图像 X
的值会被裁剪到范围 [0, c-1] 内。
如果将 X
指定为 single
或 double
数据类型的数组,则值 1 对应于颜色图中的第一种颜色。对于包含 c 种颜色的颜色图,图像 X
的值会被裁剪到范围 [1, c] 内。
数据类型: single
| double
| uint8
| uint16
map
- 颜色图;c×3 的矩阵
与索引图像 X
相关联的颜色图,指定为由范围 [0, 1] 内的值组成的 c×3 矩阵。map
的每行都是一个三元素 RGB,指定颜色图的单种颜色的红、绿和蓝分量。
数据类型: double
输出参数
RGB
-
RGB 图像:m×n×3 矩阵
RGB 图像,返回为由范围 [0, 1] 内的值组成的 m×n×3 矩阵。
数据类型: double
2.2 ind2gray
将索引图像转换为灰度图像在页面中全部折叠
语法
I = ind2gray(X,cmap)
说明
I =
ind2gray(X,cmap)
将带有colormap cmap的索引图像X转换为灰度图像,I.ind2gray函数在保持亮度的同时从输入图像中删除色调和饱和度信息。
示例
将索引图像转换为灰度
将索引图像加载到工作区。
[X, map] = imread('trees.tif');
使用ind2gray将图像转换为灰度。
I = ind2gray(X,map);
显示索引图像和转换后的灰度图像。
imshow(X,map)
title('Indexed Image')
figure
imshow(I)
title('Converted Grayscale Image')
输入参数
X
— Indexed image:数组
索引图像,指定为任意大小和维度的数字数组。
数据类型: single
| double
| uint8
| uint16
cmap
— Color map:c×3数组
与索引图像X关联的颜色映射,指定为c×3数字数组,其中c是颜色数。
数据类型: double
输出参数
I
— Grayscale image
numeric array
灰度图像,指定为数字数组。和X一样的尺寸,维度和等级。
三、 灰度图像转换
3.1 gray2ind
将灰度或二值图像转换为索引图像
语法
[X,cmap] = gray2ind(I,c)
[X,cmap] = gray2ind(BW,c)
说明
[X,cmap]
= gray2ind(I,c)
将灰度图像I转换为索引图像X,其中colormap cmap使用c颜色。
[X,cmap]
= gray2ind(BW,c)
将二值图像BW转换为索引图像
示例
将灰度图像转换为索引图像
将灰度图像读入工作区。
I = imread('cameraman.tif');
使用gray2ind将图像转换为索引图像。此示例创建一个索引为16的索引图像。
[X, map] = gray2ind(I, 16);
imshow(X, map);
输入参数
I
— 灰度图像:矩阵
灰度图像,指定为任何维度的数字数组。
数据类型: single
| double
| int16
| uint8
| uint16
BW
— 二值图像:矩阵
二值图像,指定为任意维的矩阵。
数据类型: logical
c
— 颜色图
colormap颜色数,指定为介于1和65536之间的正整数。
如果输入的图像是灰度,则c的默认值为64。
如果输入的图像是二进制的,那么c的默认值是2。
输出参数
X
—索引图像:由非负整数组成的 m×n 矩阵
索引图像,返回由非负整数组成的 m×n 矩阵。如果 map
的长度小于或等于 256,则输出图像可以属于 uint8
类。否则,输出图像可以属于 uint16
类。
数据类型: uint8
| uint16
cmap
—
颜色图:cx3矩阵
与索引图像X关联的颜色映射,以cx3矩阵的形式返回。生成的颜色贴图相当于灰色(c)。
数据类型: double
3.2 im2bw
灰度图像转二值图像
BW=im2bw(G,c);
四、数值矩阵
4.1 mat2gray
数值矩阵转灰度图像
I=mat2gray(X,[xmin,xmax])
例
X=magic(256);
G=mat2gray(X);