MATLAB中的数据类与图像类型

今天主要讲的是在MATLAB下,怎么实现数据类、图像类型之间的转换。首先我们需要先了解一下数据类和图像类型。

数据类:

在MATLAB中,关于数据类型一共包括了10项,分别包含了8项数值数据类、1项字符类、1项逻辑数据类,如下表所示。其中,所有的数值计算都可用double类来进行。


数据集图像reshape 数据集图像分类matlab_matlab数据类

图像类型:

在MATLAB工具箱中,它支持亮度、二值、索引、RGB图像四种图像类型。大多数单色图像的处理运算是通过二值图像和亮度图像来进行的,彩色图像当做索引图像或RGB图像来处理,由于彩色图像处理较为复杂,所以本次将不讨论RGB图像和索引图像,后期再做说明。

1.亮度图像:

一幅亮度图像是一个数据矩阵,其归一化的取值表示亮度。若亮度图像的像素都是uint8类或uint16类,则它们的整数值范围分别是[0,255]和[0,65535]。若图像数据是double类的,则像素取值就是浮点数。规定双精度型归一化亮度图像的取值范围是[0,1]。

2.二值图像:

二值图像是一种只有逻辑数字0和1的逻辑数组。在MATLAB中,因为并不把只含有0和1的数值数组认为是二值数组,所以需要使用logical函数把数值数组转化为二值数组。

比方说:若A是一个由0和1构成的数值数组,则使用

>> B = logical(A) %创建一个逻辑数组B

还有一种情况就是A中除了0和1之外还有其他元素,则使用logical函数可以将所有非零的量变换为逻辑1,而将所有的数值0变换成逻辑0。

使用函数islogical,测试一个数组是否是逻辑数组:

>> islogical ( c ) %若c是逻辑数组,函数返回1,否则返回0.

数据集图像reshape 数据集图像分类matlab_matlab数据类_02

数据类与图像类型间的转化

数据类间的转化

>> B = data_class_name(A) %data_class_name可以为表1‘数据类’中的任何一项。

比方:A是一个uint8类的数组,则命令:

>>B = double(A)

将产生一个双精度数组B。

其中需要注意的是:如果将一个精度范围大的类转换为精度范围小的类,比如将double类转换为uint8类,若double类的数组在区间[0,255]之外存在其他的值,则会自动将大于255的值转换为255,小于0的值转换为0。所以一般精度范围大的数组转换为精度范围小的数组,需要将原来的数组进行一定的缩放,使其取值尽量在精度小的范围内。

图像类和类型间的转换

im2uint8函数:可以检测出输入的数据类,并进行所有必要的缩放,以便使工具箱能将这些数据识别为有效的图像数据。

比如,一个double类2*2的图像f,它可以是中间计算的结果:

执行转换:

>> g = im2uint8(f)

数据集图像reshape 数据集图像分类matlab_数据集图像reshape_03

im2uint8函数:可以将所有小于0的值设置为0,将输入中所有大于1的值设置为255,再将所有其他值乘以255,并将得到的结果四舍五入得到最接近的整数,从而完成转换。

数据集图像reshape 数据集图像分类matlab_图像类型_04


注:彩色图像的转化这里不做讨论,后期再做说明。

mat2gray函数:将double类的任意数组转换成取值范围为[0,1]的归一化double类数组
>> g = mat2gray(f) %将f转换为[0,1]之间的double类的数组,生成g
>> gb = im2bw(g,TV) %将g数组使用阈值TV将其转换为二值图像,生成gb
**islogical函数:**将一个逻辑数组的事实存储为一个变量。
>> gbv = islogical(gb)
**im2double函数:**将一个逻辑数组转换为一个值为0和1的double类数值数组。
>> gbd = im2double(gb)

注:若gb是一个uint8类的数值数组,对其使用im2double结果与其是一个逻辑数组得到的结果是不一致的。

数据集图像reshape 数据集图像分类matlab_matlab数据类_05

注:MATLAB支持嵌套语句,上述的所有操作可写成:

>> gbd = im2double(im2bw(mat2gray(F),0.5))

下期将实现数组的索引功能,以及介绍怎么实现一些标准数组。

:MATLAB支持嵌套语句,上述的所有操作可写成:

>> gbd = im2double(im2bw(mat2gray(F),0.5))