函数名 | 函数功能 |
---|---|
dither | 图像抖动,将灰度图变成二值图或将真彩色图像抖动成索引色图像 |
gray2ind | 将灰度图像转换成索引图像 |
grayslice | 通过设定阈值将灰度图像转换成索引色图像 |
im2bw | 通过设定亮度阈值将真彩色,索引色,灰度图转化成二值图像 |
ind2gray | 将索引图像转化成灰度图像 |
ind2rgb | 将索引图像转化成真彩色图像 |
mat2gray | 将数值矩阵转换成灰度图像 |
rgb2gray | 将真彩色图像转化为灰度图像 |
rgb2ind | 将真彩色图像转化为索引色图像 |
RGB图像转换为灰度图像
在MATLAB中,将RGB图像转换为灰度图像,需要调用函数rgb2gray( ),其调用格式如下:
- X=rgb2gray(I):该函数是将RGB图像I转换为灰度图像X,其中I表示RGB图像,X表示转换后的灰度图像。
I = imread('test1.jpg'); %读取文件格式为.jpg
X = rgb2gray(I); %将RGB图像转化为灰度图像
figure,
subplot(121),imshow(I);
subplot(122),imshow(X);
运行结果如下:
RGB图像转换为索引图像
在MATLAB中,将真彩色图像转换成为索引图像直接调用函数rgb2ind ( ),在函数rgb2ind ( )还可以输入参数项dither_option,其表示是否使用抖动,其调用格式如下:
[X,map] = rgb2ind(I,tol)
:该函数利用均匀量化方法将RGB图像转换为索引图像,I为原RGB图像,容差为tol,map包含至少个颜色
[X,map] = rgb2ind(I,N)
:使用具有Q
种量化颜色的最小方差量化法并加入抖动,将 RGB 图像转换为索引图像X
,关联颜色图为map,map中至少包含N个图像。X= rgb2ind(I,map):
该函数通过与RGB中最相近的颜色进行匹配生成颜色映射的表map,将RGB图像转换为索引色图像。其中I为原RGB图像,map中的颜色是与RGB图像中颜色匹配最相近的颜色。[...]= rgb2ind(...,dither_option):
启用或禁用抖动。其中dither表示抖动,从而达到更好的颜色效果;nodither表示不抖动。
>> RGB = imread('test1.jpg');
>> [X1,map1]=rgb2ind(RGB,64);
>> [X2,map2]=rgb2ind(RGB,0.2);
>> map3=colorcube(128);
>> X3=rgb2ind(RGB,map3);
>> figure;
>> subplot(131);imshow(X1,map1);
>> subplot(132);imshow(X2,map2);
>> subplot(133);imshow(X3,map3);
运行结果如下:
灰度图像转化为索引图像
在MATLAB中,灰度图像是一个二维数组矩阵,而索引图像不仅包括一个二维的数组矩阵,还包括一个M×3的颜色映射表。所以要想将灰度图像转换成为索引图像,则必须生成对应的颜色映射表。在MATLAB中可以直接调用函数gray2ind( )来实现图像转换。其调用格式如下:
- [X,map]=gray2ind(I,n):该函数是将灰度图像I转换为索引图像,其中I指的是原灰度图像,n是灰度级数,默认值为64,[X,map]对应转换后的索引图像,map中对应的颜色值为颜色图gray(n)中的颜色值。
- [X,map]=gray2ind(BW,n):该函数是将二值图像BW转换为索引图像,其中I指的是二值图像,n是灰度级数,默认值为2,[X,map]对应转换后的索引图像,map中对应的颜色值为颜色图gray(n)中的颜色值。二值图像实际上也是灰度图像,只是其灰度级为2 而已
>> I=imread('test.tif');
>> [X,map]=gray2ind(I,128);
>> figure,imshow(I);
>> figure,imshow(X,map);
运行结果如下:
索引图像转换为灰度图像
利用函数gray2ind( )可以将灰度图像转换为索引图像,同样,索引图像也是可以转换成为灰度图像的,在MATLAB中直接调用函数ind2gray( )即可实现,其调用格式如下:
- I=ind2gray(X,map):该函数是将具有颜色映射表map的索引图像转换为灰度图像,去除了索引图像中的颜色、饱和度信息,保留了图像的亮度信息。其中[X,map]对应索引图像,I表示转换后的灰度图像。输入图像的数据类型可以是double型或uint8型,但输出为double型。
[X,map]=imread('test.tif'); %读取图像信息
I=ind2gray(X,map); %将索引图像转换为灰度图像
figure,imshow(X,map); %显示索引图像
figure,imshow(I); %显示灰度图像
索引图像转换为RGB图像
在MATLAB中,利用函数rgb2ind( )可以将RGB图像转换为索引色图像,同样索引图像也可以转换为RGB图像,利用函数ind2rgb( )即可实现,其调用格式如下:
- RGB=ind2rgb(X,map):该函数是将索引图像[X,map]转换为RGB图像,其中[X,map]指向索引图像,RGB指向转换后的真彩色图像。转换过程中形成一个三维数组,然后将索引图像的颜色映射表中的颜色值赋值给三维数组。输入图像的数据类型可以是double型、uint8型或uint16型,输出为double型。
>>[X,map]=imread('k.tif');
RGB=ind2rgb(X,map);
figure,imshow(X,map);
figure,imshow(RGB);
二值图像的转换
在MATLAB中,二值图像中的数据类型实际上是logical型,’0’代表黑色、’1’代表白色,所以二值图像实际上是一幅“黑白”图像。那么,将其他图像转换为二值图像,首先必须规定一个规则:将其他数组中什么数据变为’1’,什么数据变为’0’。常用的方法是“阈值法”,它是确定一个阈值,小于阈值就取为’0’,其他的全部取为’1’。在MATLAB中实现这一功能的函数为im2bw( ),其调用格式根据转换的原图像不同而各有差异。如果输入不是灰度图像,先将其转换为灰度图像,然后通过阈值法转换为二值图像。
- 灰度图像转换为二值图像
- 索引图像转换为二值图像
- RGB图像转换为二值图像
数值矩阵转换为灰度图像
在MATLAB中,一个数据矩阵就相当于一幅数字图像,只是在数字图像中对应的数组元素必须在一定的取值范围,因此,只要将对应数据矩阵中的元素按一定规律进行转换,就可以将矩阵转换为图像了。在MATLAB中可以利用函数mat2gray( ),将一个数据矩阵转换为一幅灰度图像,其调用格式为:
- I=mat2gray(X,[ xmin, xmax]):该函数是按照指定的取值区间[xmin,xmax]将数据矩阵X转换为灰度图像I,xmin对应灰度值0,即黑色,xmax对应灰度值1,即白色。数据矩阵中小于xmin的值取为0,大于xmax的值取为1。如果不指定取值区间[xmin, xmax],即缺省情况下,将数据矩阵X中最小值设为xmin,最大值设为xmax。
>> X=magic(256);
>> I=mat2gray(X);
>> figure,imshow(I);
运行结果如下: