图像类型的转换
在许多图像处理过程中,常常需要图像的类型进行转换,否则对应的操作没有意义甚至出错。在MATLAB中,各种图像类型之间的转换关系如下图所示。
在MATLAB中,将RGB图像转换为灰度图像,需要调用函数rgb2gray( ),其调用格式如下:
X=rgb2gray(I):该函数是将RGB图像I转换为灰度图像X,其中I表示RGB图像,X表示转换后的灰度图像。
在MATLAB中,将真彩色图像转换成为索引图像直接调用函数rgb2ind ( )。在早期的MATLAB版本中有大致四种转换方法:直接法、均匀量化法、最小方差量化法和颜色表近似法,最新的MATLAB版本(如MATLAB R2010a)中只有后三种转换方法。除此之外,在函数rgb2ind ( )还可以输入参数项dither_option,其表示是否使用抖动。
在MATLAB中,灰度图像是一个二维数组矩阵,而索引图像不仅包括一个二维的数组矩阵,还包括一个M×3的颜色映射表。所以要想将灰度图像转换成为索引图像,则必须生成对应的颜色映射表。在MATLAB中可以直接调用函数gray2ind( )来实现图像转换。其调用格式如下:
[X,map]=gray2ind(I,n):该函数是将灰度图像I转换为索引图像,其中I指的是原灰度图像,n是灰度级数,默认值为64,[X,map]对应转换后的索引图像,map中对应的颜色值为颜色图gray(n)中的颜色值。
[X,map]=gray2ind(BW,n):该函数是将二值图像BW转换为索引图像,其中I指的是二值图像,n是灰度级数,默认值为2,[X,map]对应转换后的索引图像,map中对应的颜色值为颜色图gray(n)中的颜色值。二值图像实际上也是灰度图像,只是其灰度级为2 而已。
利用函数gray2ind( )可以将灰度图像转换为索引图像,同样,索引图像也是可以转换成为灰度图像的,在MATLAB中直接调用函数ind2gray( )即可实现,其调用格式如下:
I=ind2gray(X,map):该函数是将具有颜色映射表map的索引图像转换为灰度图像,去除了索引图像中的颜色、饱和度信息,保留了图像的亮度信息。其中[X,map]对应索引图像,I表示转换后的灰度图像。输入图像的数据类型可以是double型或uint8型,但输出为double型。
在MATLAB中,利用函数rgb2ind( )可以将RGB图像转换为索引色图像,同样索引图像也可以转换为RGB图像,利用函数ind2rgb( )即可实现,其调用格式如下:
RGB=ind2rgb(X,map):该函数是将索引图像[X,map]转换为RGB图像,其中[X,map]指向索引图像,RGB指向转换后的真彩色图像。转换过程中形成一个三维数组,然后将索引图像的颜色映射表中的颜色值赋值给三维数组。输入图像的数据类型可以是double型、uint8型或uint16型,输出为double型。
在MATLAB中,二值图像中的数据类型实际上是logical型,’0’代表黑色、’1’代表白色,所以二值图像实际上是一幅“黑白”图像。那么,将其他图像转换为二值图像,首先必须规定一个规则:将其他数组中什么数据变为’1’,什么数据变为’0’。常用的方法是“阈值法”,它是确定一个阈值,小于阈值就取为’0’,其他的全部取为’1’。在MATLAB中实现这一功能的函数为im2bw( ),其调用格式根据转换的原图像不同而各有差异。如果输入不是灰度图像,先将其转换为灰度图像,然后通过阈值法转换为二值图像。
在MATLAB中,一个数据矩阵就相当于一幅数字图像,只是在数字图像中对应的数组元素必须在一定的取值范围,因此,只要将对应数据矩阵中的元素按一定规律进行转换,就可以将矩阵转换为图像了。在MATLAB中可以利用函数mat2gray( ),将一个数据矩阵转换为一幅灰度图像,其调用格式为:
I=mat2gray(X,[ xmin, xmax]):该函数是按照指定的取值区间[xmin,xmax]将数据矩阵X转换为灰度图像I,xmin对应灰度值0,即黑色,xmax对应灰度值1,即白色。数据矩阵中小于xmin的值取为0,大于xmax的值取为1。如果不指定取值区间[xmin, xmax],即缺省情况下,将数据矩阵X中最小值设为xmin,最大值设为xmax。