图像类型转换

首先我们需要知道图像类型有哪几种:二值图像,灰度图像,真彩色图像,索引色图像
四种。

一. RGB图像转换为灰度图像

需要调用 rgb2gray() 函数,调用格式为:

X =rgb2gray(I): 该函数将RGB图像I转换为灰度图像X.
%彩色转gray
I =imread('E:\matlab\bin\图像处理\图片\2.jpg');
X =rgb2gray(I);
figure,
subplot(121),imshow(I);
subplot(122),imshow(X);
newmap =rgb2gray(map):将彩色颜色映射表map转化为灰度颜色映射表。

注:如果输入的是真彩色图像,则可以是uint8或者是double类型,输出图像与输入图像类型相同。如果输入的是颜色映射表,则输入和输出都是double类型。、

对于map值,只有图像类型是索引图像,才有值,否则为空。先将彩色图像转化为索引图像,然后获取map1,然后对map1灰度,最后显示。

clear all;
RGB =imread('E:\matlab\bin\图像处理\图片\1.jpg');
[X1,map1]=rgb2ind(RGB,64);
newmap =rgb2gray(map1);
imshow(X1,newmap);

二. RGB图像转换为索引图像

在上个例子中,已经使用了将RGB图像转化为索引图像的函数rgb2ind()函数
1.[X,map] =rgb2ind(I,tol); 该函数是利用均匀量化的方法将RGB图像转换为索引图像。I为原始图像,tol的范围是从0.0至1.0,[X,map]对应生成的索引图像,map包括至少(floor(1/tol)+1)^3个颜色。
2.[X,map] =rgb2ind(I,N); 该函数是利用最小方差量化的方法,将RGB图像转化为索引图像,其中,I是原始RGB图像,[X,map]对应生成的索引图像,map包括至少N个颜色。
3.X =rgb2ind(I,map); 该函数是通过与RGB中最相近的颜色进行匹配生成颜色映射表map,将RGB图像转化为索引图像。其中,I原始RGB图像,[X,map]对应生成的索引图像,map中的颜色是与RGB图像中颜色匹配最相近的颜色。
4. […] =rgb2ind(…,dither_option); 该函数是通过参数dither_option来设置图像转换是否进行呀是谁呢抖动,dither_option取值为dither则表示抖动,从而可以达到更好的颜色效果;该参数项默认取值为nodither,表示不抖动。该格式中"…"表示根据显示任务的不同可以采用上面介绍的某种格式。
那么,代码如下,进行比较一下前三种的区别

clear all;
RGB =imread('E:\matlab\bin\图像处理\图片\1.jpg');
[X1,map1] =rgb2ind(RGB,64);%颜色总数N至少64种
[X2,map2] =rgb2ind(RGB,0.2);%颜色总数N至少216种
map3 =colorcube(128);%创建一个指定颜色数目的RGB颜色映色表
X3 =rgb2ind(RGB,map3);
figure;
subplot(131);imshow(X1,map1);%显示用最小方差法转换后的索引图像
subplot(132);imshow(X2,map2);%显示用均匀量化法转换后的索引图像
subplot(133);imshow(X3,map3);%显示用颜色近似法转换后的索引图像

显示图像

matlab imagesc 颜色灰度 matlab灰度图像转彩色_灰度图像

三. 灰度图像转换为索引图像

在MATLAB中国,灰度图像是一个二维数组矩阵,而索引图像不仅包括一个二维的数组矩阵,还包括一个M x 3的颜色映射表。所以要想将灰度图像转换成索引图像,则必须生成对应的颜色映射表.

用函数 gray2ind(); 实现图像的转化,其调用格式如下:

1.[X,map] =gray2ind(I,N): 该函数是将二值图像转换为索引图像,其中I指的是原灰度图像,n是灰度级数,默认值为64。[X,map]为对应转换后的索引图像mapd中对应的颜色值为gray(n)中的颜色值。

2.[X,map] =gray2ind(BW,n); 该函数是将二值图像BW转换为索引图像。其中BW指的二值图像,n为灰度级数,默认值为2,[X,map]为对应转换后的索引图像mapd中对应的颜色值为gray(n)中的颜色值。.二值图像实际上也是灰度图像,只是灰度级数为2.

显示的结果围为:

matlab imagesc 颜色灰度 matlab灰度图像转彩色_索引图像_02


代码如下:

I =imread('E:\matlab\bin\图像处理\图片\1.jpg');%读入RGB图像
X =rgb2gray(I);%将其转换为灰度图像
[IND,map] =gray2ind(X,8);
[IND1,map1] =gray2ind(X,2);
figure;
subplot(131);imshow(X);
subplot(132);imshow(IND,map);
subplot(133);imshow(IND1,map1);

还有另一个函数 grayslice(); 也可以将灰图像转化为索引图像,其转换的方法是通过设定阈值将灰度图像转换为索引图像,其调用的格式为:
1. I =grayslice(G,n); 该函数是将灰度图像中像素灰度均匀量化围为n个等级并转换为索引图像,其中G为灰度图像,n表示的是灰度级,I为转换后的索引图像。
2. I =grayslice(G,v); 该函数是将灰度图像按照阈值矢量v进行值域划分并转换为索引图像。v中的每一个元素都在0到1之间。jet()函数生成一个颜色映射表。
代码:

I =imread('E:\matlab\bin\图像处理\图片\1.jpg');%读入RGB图像
X1 =rgb2gray(I);%将其转换为灰度图像
X =grayslice(X1,32);
figure,imshow(X1);
figure,imshow(X,jet(32));

四. 索引图像转换为灰度图像

函数 ind2gray() 是实现索引图像转换为灰度图像。调用格式如下:

I =ind2gray(X,map):该函数将具有颜色映射表map的索引图像转换为灰度图像,取出了索引图像中的颜色,饱和度信息,保留图像的亮度信息,其中[X,map]对应索引图像,I 表示转换为灰度图像,输入图像的类型可以为double型或uint8型,但输出为double型。

显示为:

matlab imagesc 颜色灰度 matlab灰度图像转彩色_matlab_03


代码如下:

clear all;
RGB =imread('E:\matlab\bin\图像处理\图片\1.jpg');
[X,map] =rgb2ind(RGB,64);
I =ind2gray(X,map);
figure;
subplot(121);imshow(X,map);
subplot(122);imshow(I);

五. 索引图像转换为RGB图像

ind2rgb()函数实现该过程,调用格式如下:
RGB =ind2rgb(X,map);该函数将索引图像[X,map]转换为RGB图像。转换过程中形成一个三位数组,然后将索引图像的颜色映射表中的颜色值赋值给三维数组。输入图像中的类型可以是double型,uint8型或uint16型,输出为double型。

显示结果,数据组成形式不同,虽然看上去一样

matlab imagesc 颜色灰度 matlab灰度图像转彩色_图像处理_04


代码如下:

clear all;
RGB =imread('E:\matlab\bin\图像处理\图片\1.jpg');
[X,map] =rgb2ind(RGB,64); %转换为索引图像
RGB1 =ind2rgb(X,map);
figure;
subplot(121);imshow(X,map);
subplot(122);imshow(RGB1)

六. 二值图像的转换

二值图像的数据类型实际上是logical型,0代表黑色,1代表白色。将其他类型图像转换为二值图像,首先必须规定一个规则,即将哪些数据变为1,哪些数据变为0。最常用的阈值法。,确定一个阈值,小于阈值取0,大于阈值取1.。 在MATLAB中,是通过函数im2bw(),调用格式根据原图像的不同而各有差异。如果输入的不是灰度图像,则先将其转换为灰度图像,然后通过阈值法转换为二值图像。

1.将灰度图像转为二值图像

格式为: BW =im2bw(I,level) :该函数是通过设置阈值参数level,将灰度图像转换为二值图像,level取值范围为[0,1]

显示:

matlab imagesc 颜色灰度 matlab灰度图像转彩色_matlab imagesc 颜色灰度_05


代码:

close all;clear all;clc;
RGB =imread('E:\matlab\bin\图像处理\图片\1.jpg');
I =rgb2gray(RGB);
BW1 =im2bw(I,0.4);
BW2 =im2bw(I,0.6);
figure;
subplot(131);imshow(I);
subplot(132);imshow(BW1);
subplot(133);imshow(BW2);

2.将索引图像转换为二值图像

BW =im2bw(X,map,level); 该函数是通过设置阈值参数level,将索引图像转换为二值图像。其中[X,map]代表索引图像,参数level设置阈值水平,取值范围[0,1],BW为二值图像。

显示图像

matlab imagesc 颜色灰度 matlab灰度图像转彩色_matlab_06


代码:

close all;clear all;clc;
RGB =imread('E:\matlab\bin\图像处理\图片\1.jpg');
[X,map] =rgb2ind(RGB,64);
BW =im2bw(X,map,0.4);
figure;
subplot(121);imshow(X,map);
subplot(122);imshow(BW);

3.将RGB图像转换为二值图像

格式为: BW =im2bw(RGB,level) :该函数是通过设置阈值参数level,将RGB图像转换为二值图像,level取值范围为[0,1]

显示结果:

matlab imagesc 颜色灰度 matlab灰度图像转彩色_灰度图像_07


代码:

clear all;
RGB =imread('E:\matlab\bin\图像处理\图片\1.jpg');
BW =im2bw(RGB,0.4);
figure;
subplot(121);imshow(RGB);
subplot(122);imshow(BW)

七. 数值矩阵转换为灰度图像

在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.

显示结果:

matlab imagesc 颜色灰度 matlab灰度图像转彩色_图像处理_08


代码如下:

close all;clear all;clc;
X =magic(256); %利用函数magic()产生一个256x256的方阵X
I =mat2gray(X); %将数值矩阵X转换为灰度图像
figure;imshow(I);

函数magic()产生一个256x256的方阵X,该数值矩阵中的元素按规律排列,矩阵中的,每一行元素之和,每一列元素之和 ,与对角线元素之和三者相等,即
sum(X(n,:)) =sum(X(:,n)) =sum(diag(X)) (n为[1,256],函数diag()求方阵对角,sum()求和)