1. 概述
在许多图像处理过程中,常常需要进行图像类型转换,否则对应的操作没有意义甚至会出错。在MATLAB中,各种图像类型之间的转换关系如图1所示:
在MATLAB中,要进行图像类型转换可以直接调用MATLAB函数,表1中列举了常用的图像类型转换函数。
函数名 | 函数功能 |
gray2ind | 将灰度图像转换成索引图像 |
im2bw | 通过设定阈值将真彩色、索引色、灰度色、转换成二值图像 |
ind2gray | 将索引图像转换成灰度图像 |
ind2rgb | 将索引图像转成真彩色图像 |
mat2gray | 将数值矩阵转化成灰度图像 |
rgb2gray | 将真彩色图像转换成灰度图像 |
rgb2ind | 将真彩色图像转换成索引图像 |
2. 转换示例:
1> RGB图像转换为灰度图像和索引图像
代码示例1:
close;
clear all;
clc;
%% 使用rgb2gray(I)函数
I = imread('football.jpg');
X = rgb2gray(I);
figure,
subplot(2,2,1),imshow(I);title('原RGB图像');
subplot(2,2,2),imshow(X);title('转换后的灰度图像');
%% 使用映射表 换一张图片
[A,map] = imread('trees.tif');
newmap = rgb2gray(map);
subplot(2,2,3),imshow(A,map);title('原RGB图像');
subplot(2,2,4),imshow(A,newmap);title('map转换后的灰度图像');
运行结果如下图:
2> RGB图像转换为索引图像
代码示例2:
close;
clear all;
clc;
RGB = imread('football.jpg');
[X1,map1]=rgb2ind(RGB,64); %将RGB图像转换成索引图像,颜色种数N是64种
[X2,map2]=rgb2ind(RGB,0.2); %将RGB图像转换成索引图像,颜色种数N是216种
map3= colorcube(128); %创建一个指定颜色数目的RGB颜色映射表
X3=rgb2ind(RGB,map3);
set(0,'defaultFigurePosition',[100,100,1000,500]); %修改图形图像位置的默认设置
set(0,'defaultFigureColor', [1 1 1]); %修改图形背景颜色的设置
figure;
subplot(131),imshow(X1,map1); %显示用最小方差法转换后索引图像
subplot(132),imshow(X2,map2); %显示用均匀量化法转换后索引图像
subplot(133),imshow(X3,map3); %显示用颜色近似法转换后索引图像
其运行结果如图:
从视觉上看图片没有什么差距,但是他们的map是不一样的,通过 whos map 查看
3> 索引图像转为RGB图像
代码示例3:
close all;
clear all;
clc;
[X,map]=imread('kids.tif');
RGB=ind2rgb(X,map); %将索引图像转换为真彩色图像
set(0,'defaultFigurePosition',[100,100,1000,500]); %修改图形图像位置的默认设置
set(0,'defaultFigureColor', [1 1 1]); %修改图形背景颜色的设置
figure,
subplot(121);imshow(X,map); %显示原图像
title('原索引图像');
subplot(122);imshow(RGB); %显示真彩色图像
title('RGB图像');
运行结果:
4>索引图像与灰度图像之间的转换
clc;
close all;
clear all;
%% 灰度转索引
I = imread('cameraman.tif'); %读取灰度图像信息
[X,map]=gray2ind(I,8); %实现灰度图像向索引图像的转换,N取8, N表示灰度级
set(0,'defaultFigurePosition',[100,100,1000,500]); %修改图形图像位置的默认设置
set(0,'defaultFigureColor', [1 1 1]); %修改图形背景颜色的设置
subplot(221),imshow(I);
title('原灰度图像');
subplot(222),imshow(X, map);
title('N=8转换后索引图像');
%% 索引转灰度
[X,map]=imread('kids.tif');
I = ind2gray(X,map); %再将索引图像转换为灰度图像
set(0,'defaultFigurePosition',[100,100,1000,500]); %修改图形图像位置的默认设置
set(0,'defaultFigureColor', [1 1 1]); %修改图形背景颜色的设置
subplot(223),imshow(X,map); %将索引图像显示
title('索引图像');
subplot(224),imshow(I);
title('转换后的灰度图像');
其运行效果:
其他类型之间的图像转换与示例1-4类似,合理使用表1所展示的图像转换函数即可实现图像类型的转换。
注意:数据量少的类型无法通过这里所述方法转换到数据量多的类型,即数据不能凭空捏来!当然,使用卷积等方法还是可以实现的,这种方式后会进行介绍。