MATLAB图像处理学习——图像类型的转换

目录

1.常用的图像类型转换函数

2.实例说明

 (1)RGB图像转换为灰度图像

 (2)RGB图像转换为索引图像

 (3)灰度图像转换为索引图像

 (4)索引图像转换为灰度图像

 (5)索引图像转换为RGB图像

 (6)二值图像的转换

 (7)数值矩阵转换为灰度图像


1.常用的图像类型转换函数

函数名 函数功能
dither 图像抖动,将灰度图像变成二值图或者将真彩色图像抖动成索引色图像
gray2ind 将灰度图像转换成索引图像
grayslice 通过设定阈值将灰度图像转换成索引色图像
im2bw

通过设定亮度阈值将真彩色、索引色、灰度图像转换成二值图像

ind2gray 将索引色图像转换成灰度图像
ind2rgb 将索引色图像转换成真彩色图像
mat2gray 将数值矩阵转换成灰度图像
rgb2ind 将真彩色图像转换成索引色图像
rgb2gray 将真彩色图像转换成灰度图像

2.实例说明

(1)RGB图像转换为灰度图像

(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);

实例运行结果:

MATLAB图像处理学习——图像类型的转换_第1张图片

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图像处理学习——图像类型的转换_第2张图片

 (2)RGB图像转换为索引图像

在早期的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图像处理学习——图像类型的转换_第3张图片

 (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图像处理学习——图像类型的转换_第4张图片

 在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;右:灰度图像转换后的索引图像)

MATLAB图像处理学习——图像类型的转换_第5张图片

(4)索引图像转换为灰度图像

调用函数“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);

运行结果:

(左:原索引图像,右:转换后的灰度图像)

MATLAB图像处理学习——图像类型的转换_第6张图片

 (5)索引图像转换为RGB图像

 索引图像转换为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图像)

MATLAB图像处理学习——图像类型的转换_第7张图片

 将两个图像进行比较,两者几乎完全一致,但是实际上,两种图像的数据组成形式是不同的

索引图像是由数组X和颜色映射表map构成,图像中像素的颜色值是对应数组元素值映射到颜色映射表中map中的颜色值。RGB图像是由一个三维数组构成的

(6)二值图像的转换

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转换后的二值图像)

MATLAB图像处理学习——图像类型的转换_第8张图片

 观察这三幅图像可以发现:二值图像中只有黑白两种灰度值。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);

代码运行结果:

MATLAB图像处理学习——图像类型的转换_第9张图片

 (然然直接吓出线稿了捏...........)

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图像处理学习——图像类型的转换_第10张图片

 (7)数值矩阵转换为灰度图像

在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);

运行结果:

MATLAB图像处理学习——图像类型的转换_第11张图片

你可能感兴趣的:(图像处理,matlab,学习,计算机视觉)