2.3 Matlab的图像转换
1.图像存储格式的互相转换
有时必须将图像存储格式加以转换才能使用某些图像处理函数。例如,当使用某些Matlab内置的滤镜时,需要将索引图像转换为RGB图像或者灰度图像,Matlab才会将图像滤镜应用于图像数据本身,而不是索引图像中的颜色索引值表(这将产生无意义的结果)。
Matlab 提供了一系列存储格式转换函数,如表 2.11 所示。它们的名字都很便于记忆,例如ind2gray可以将索引图像转化为灰度图像。
表2.11 图像格式转换函数
续表
也可以使用一些矩阵操作函数实现某些格式转换。例如,下面的语句可以将一幅灰度图像转换为RGB图像。
RGBIMAGE = CAT(3, GRAY, GRAY, GRAY);
2.图像数据类型转换
Matlab图像处理工具箱中支持的默认图像数据类型是uint8,使用imread函数读图像文件一般都为uint8类型。然而,很多数学函数如sin 等并不支持double以外的类型,例如当试图对 uint8类型直接使用sin函数进行操作时,Matlab会提示如下的错误信息。
I = imread(‘coins.png’); %读入一幅unit8图像
sin(I);
??? Undefined function or method 'sin' for input arguments of type 'uint8'
针对这种情况,除了使用2.1.4小节介绍的强制类型转换方法外,还可利用图像处理工具箱中的内置图像数据类型转换函数。内置转换函数的优势在于它们可以帮助处理数据偏移量和归一化变换,从而简化了我们的编程工作。
一些常用的图像类型转换函数如表2.12所示。
表2.12 图像数据类型转换函数
可以在使用Matlab数学函数前将图像转换为double类型,而在准备将图像写入文件时再将其转换为uint8类型,如下所示。
I_d = im2double(I_uint8); %将uint8图像转换为double类型,灰度范围也相应从[0,255]归一化至[0,
1]
Iout_d = sin(I_d); %进行数学计算
Iout_uint8= im2uint8(Iout_d); %转换回uint8(灰度范围也重新扩展到[0,255]), 准备写入文件