数字图像处理与机器视觉:Visual C++与Matlab实现(第2版)
上QQ阅读APP看书,第一时间看更新

1.3 MATLAB的图像转换

1.图像存储格式的互相转换

有时必须将图像存储格式加以转换才能使用某些图像处理函数。例如,当使用某些MATLAB内置的滤镜时,需要将索引图像转换为RGB图像或者灰度图像,MATLAB才会将图像滤镜应用于图像数据本身,而不是索引图像中的颜色索引值表(这将产生无意义的结果)。

MATLAB提供了一系列存储格式转换函数,如表1.11所示。它们的名字都很便于记忆,例如ind2gray可以将索引图像转化为灰度图像。

表1.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'

针对这种情况,除了使用1.1.4小节介绍的强制类型转换方法外,还可利用图像处理工具箱中的内置图像数据类型转换函数。内置转换函数的优势在于它们可以帮助处理数据偏移量和归一化变换,从而简化了使用者的编程工作。

一些常用的图像类型转换函数如表1.12所示。

表1.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]), 准备写入文件