来源: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 转换为灰度图像 Irgb2gray 函数通过消除色调和饱和度信息,同时保留亮度,来将 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);