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

Posted 长弓同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);

实例运行结果:

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

运行结果:

 (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:颜色近似法转换后图像)

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

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

运行结果:

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

 (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图像)

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

索引图像是由数组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转换后的二值图像)

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

运行结果:

 (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图像处理学习——图像类型的转换的主要内容,如果未能解决你的问题,请参考以下文章

数字图像处理 MATLAB 为啥把图像类型转换为 double

9. matlab图像处理基础——JPEG压缩+类型转换

9. matlab图像处理基础——JPEG压缩+类型转换

matlab中ftt2转换后的数据是啥类型的

matlab图像处理为啥要double和uint8转换

matlab 为啥要进行数据类型转换?