目录
1.常用的图像类型转换函数
2.实例说明
(1)RGB图像转换为灰度图像
(2)RGB图像转换为索引图像
(3)灰度图像转换为索引图像
(4)索引图像转换为灰度图像
(5)索引图像转换为RGB图像
(6)二值图像的转换
(7)数值矩阵转换为灰度图像
函数名 | 函数功能 |
dither | 图像抖动,将灰度图像变成二值图或者将真彩色图像抖动成索引色图像 |
gray2ind | 将灰度图像转换成索引图像 |
grayslice | 通过设定阈值将灰度图像转换成索引色图像 |
im2bw | 通过设定亮度阈值将真彩色、索引色、灰度图像转换成二值图像 |
ind2gray | 将索引色图像转换成灰度图像 |
ind2rgb | 将索引色图像转换成真彩色图像 |
mat2gray | 将数值矩阵转换成灰度图像 |
rgb2ind | 将真彩色图像转换成索引色图像 |
rgb2gray | 将真彩色图像转换成灰度图像 |
(RGB图像:三通道图像)
需要用到函数“rgb2gray”,调用格式如下:
X=rgb2gray(I):该函数是将RGB图像I转换为灰度图像X
实例代码(将RGB图像转换为灰度图像):
close all;clear all;clc;
I=imread('D:\resource_photo\1.jpg');
X=rgb2gray(I);
figure;
subplot(121),imshow(I);
subplot(122),imshow(X);
实例运行结果:
RGB图像转灰度图像还有一种方法,就是使用函数“rgb2gray”将彩色颜色映射表map转换为灰度颜色映射表,使用方法如下:
newmap=rgb2gray(map): map代表原图像的颜色映射表,newmap代表转换后的图像颜色映射表。
实例代码(将RGB图像的颜色映射表转换为灰度图像的颜色映射表):
close all;clear all;clc;
[X,map]=imread('D:\resource_photo\1.tif');
newmap=rgb2gray(map);
figure,imshow(X,map);
figure,imshow(X,newmap);
运行结果:
在早期的MATLAB版本中有大致4种转换方法,即直接法、均匀量化法、最小方法量化法和颜色表示近似法。
[X,map]=rgb2ind(I,tol):该函数是利用均匀量化的方法将RGB图像转换为索引图像。其中,I是原RGB图像,tol的范围是从0.0~1.0,[X,map]对应生成的索引图像,map包含至少(floor(1/tol)+1)^3个颜色。
[X,map]=rgb2ind(I,N):该函数是利用最小方差量化的方法,将RGB图像转换为索引图像。其中I是原RGB图像,[X,map]对应生成的索引图像,map中包含至少N个颜色。
X=rgb2ind(I,map):该函数是通过与RGB中最相似的颜色进行匹配生成颜色映射表map,将RGB图像转换为索引色图像的。
[...]=rgb2ind(...,dither_option):该函数是通过参数dither_option来设置图像转换是否进行颜色抖动,dither_option取值为dither表示抖动,取值为nodither表示不抖动。该格式中“...”表示根据显示任务的不同可以采用上面介绍的某种格式
实例代码(RGB图像转换为索引图像):
close all;clear all;clc;
RGB=imread('D:\resource_photo\0.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);
运行结果:
(图1:最小方差法转换后索引图像版、图2:均匀量化法转换后索引图像、图3:颜色近似法转换后图像)
在MATLAB中,灰度图像是一个二维数组矩阵,而索引图像不仅包括一个二维的数组矩阵,还包括一个M*3的颜色映射表。所以要想将灰度图像转换为索引图像,则必须生成对应的颜色映射表。
需要使用函数“gray2ind()”,调用方法如下:
[X,map]=gray2ind(I,n):该函数是将灰度图像I转换为索引图像。其中I是原灰度图像,n是灰度级数,默认值为64,[X,map]对应转换后的索引图像。
[X,map]=gray2ind(BW,n):该函数是将二值图像BW转换为索引图像。其中I指的是二值图像,n是灰度级数,默认值为2,[X,map]对应转换后的索引图像,map中对应的颜色值为颜色图gray()中的颜色值。
(说明,二值图像即像素值非0即1,没有中间值,通常0表示黑色,1表示白色)
实例代码:
close all;clear all;clc;
I=imread('D:\resource_photo\1(1).tif');
[X,map]=gray2ind(I,8);
figure,imshow(I);
figure,imshow(X,map);
代码运行结果:
在MATLAB中,将灰度图像转换为索引图像,除了用函数gray2ind以外,还可以使用grayslice(),其转换方法是通过设定阈值将灰度图像转换为索引色图像,其调用格式如下:
I=grayslice(G,n):该函数是将灰度图像中像素灰度均匀量化为n个等级并转换为索引色图像。其中G表示灰度图像,n表示灰度级,I表示转换后的索引图像。
I=grayslice(G,v):该函数是将灰度图像按照阈值矢量v进行值域划分并转换为索引色图像。其中v中每一个元素都在0和1之间。
实例代码(利用阈值法将灰度图像转换为索引图像):
close all;clear all;clc;
I=imread('D:\resource_photo\1(1).tif');
X=grayslice(I,32);
figure,imshow(I);
figure,imshow(X,jet(32));
运行结果:
(左:原灰度图像I;右:灰度图像转换后的索引图像)
调用函数“ind2gray()”实现,调用格式如下:
I=ind2gray(X,map):该函数是将具有颜色映射表map的索引图像转换为灰度图像,去除了索引图像中的颜色、饱和度信息,保留了图像的亮度信息。其中[X,map]对应索引图像,I表示转换后的灰度图像。(输入图像可以是double型或者uint8型,但输出为double型)。
实例代码(将索引图像转换为灰度图像):
close all;clear all;clc;
[X,map]=imread('D:\resource_photo\1(3).tif');
I=ind2gray(X,map);
figure,imshow(X,map);
figure,imshow(I);
运行结果:
(左:原索引图像,右:转换后的灰度图像)
索引图像转换为RGB图像可以用函数“ind2rgb()”,调用格式为下:
RGB=ind2rgb(X,map):该函数是将索引图像[X,map]转换为RGB图像,其中[X,map]指向索引图像,RGB指向转换后的真彩色图像。转换过程中形成一个三维数组,然后将索引图像的颜色映射表中的颜色赋值给三维数组。(输入图像的数据类型可以是double型、uint8型或者uint16型,输出为double型)
实例代码(将索引图像转换为真彩色图像):
close all;clear all;clc;
[X,map]=imread('D:\resource_photo\1(3).tif');
RGB=ind2rgb(X,map);
figure,imshow(X,map);
figure,imshow(RGB);
运行结果:
(左:索引图像,右:转换后的RGB图像)
将两个图像进行比较,两者几乎完全一致,但是实际上,两种图像的数据组成形式是不同的。
索引图像是由数组X和颜色映射表map构成,图像中像素的颜色值是对应数组元素值映射到颜色映射表中map中的颜色值。RGB图像是由一个三维数组构成的。
1.将灰度图像转换为二值图像
函数及调用方法:
BW=im2bw(I,level):该函数是通过设置阈值参数level,将灰度图像转换为二值图像。其中I为灰度图像,level为设置的阈值参数,取值范围为[0,1],BW是转换后的二值图像。
实例代码(灰度图像转换为二值图像):
close all;clear all;clc;
I=imread('D:\resource_photo\1(1).tif');
BW1=im2bw(I,0.4);
BW2=im2bw(I,0.6);
figure;
subplot(131),imshow(I);
subplot(132),imshow(BW1);
subplot(133),imshow(BW2);
代码运行结果:
(图1:原灰度值图像,图2:level=0.4转换后的二值图像,图3:level=0.6转换后的二值图像)
观察这三幅图像可以发现:二值图像中只有黑白两种灰度值。level值较小时,会出现背景区域与目标区域混淆;level值较大时,则会丢失部分目标信息。
2.将索引图像转换为二值图像
BW=im2bw(X,map,level):该函数通过设置阈值参数level,将索引色图像转换为二值图像。其中[X,map]代表索引图像。
实例代码(索引图像转换为二值图像):
close all;clear all;clc;
[X,map]=imread('D:\resource_photo\1.tif');
BW=im2bw(X,map,0.4);
figure,imshow(X,map);
figure,imshow(BW);
代码运行结果:
(然然直接吓出线稿了捏...........)
3.将RGB图像转换为二值图像
BW=im2bw(I,level):RGB图像转换为二值图像。其中I为原RGB图像。
实例代码(RGB图像转换为二值图像):
close all;clear all;clc;
I=imread('D:\resource_photo\1.jpg');
BW=im2bw(I,0.4);
figure,imshow(I);
figure,imshow(BW);
运行结果:
在MATLAB中,一个数据矩阵就相当于一幅数字图像。
所用函数,调用方法如下:
I=mat2gray(X,[xmin,xmax]):该函数是按照指定的取值区间[xmin,xmax]将数据矩阵X转换为灰度图像I。xmin对应灰度值0,即黑色,xmax对应灰度值1,即白色。数据矩阵中小于xmin的取值为0,大于xmax的取值为1。如果不指定区间[xmin,xmax],即默认情况下,将数据矩阵X最大值设置为xmax,最小值设置为xmin。
实例代码(数值矩阵转换为灰度图像):
close all;clear all;clc;
X=magic(256);
I=mat2gray(X);
figure,imshow(I);
运行结果: