图像类型、MATLAB数据类型,以及类型之间的转换(二)

来源:互联网 发布:参获取视频长度 python 编辑:程序博客网 时间:2024/06/09 05:05

上篇中我们根据需要将图像分为4种类型,其中每种图像的表示或多或少都牵扯到不同的数据类型,大致如下:

图像类型 使用到的数据类型 灰度图像 像素值为uint8,uint16,归一化double等类型 二值图像 像素值为logical类型 索引图像 像素值以及MAP矩阵元素为uint8,uint16等类型 RGB图像 像素值为uint8类型

其实无论是上边哪种类型图像,之所以用到logical,uint8,uint16以及归一化double等类型,很大的原因就在于这些图像的表示往往和具有这些数据类型的语言和工具有关系,比如MATLAB等。

MATLAB中的数据类型

MATLAB中的数据类型

在MATLAB中查看MATLAB中常用的数据类型,可以输入如下帮助语句:

help datatypes

通过上述语句可以查看到MATLAB中常用的数据类型,在此我们根据需要仅仅列出和图像(特别是灰度图像)读取、显示和处理相关的一些常用数据类型,具体如下所示:

数据类型 作用及含义 double Convert to double precision. single Convert to single precision. logical Convert numeric values to logical. uint8 Convert to unsigned 8-bit integer. uint16 Convert to unsigned 16-bit integer. uint32 Convert to unsigned 32-bit integer. uint64 Convert to unsigned 64-bit integer. int8 Convert to signed 8-bit integer. int16 Convert to signed 16-bit integer. int32 Convert to signed 32-bit integer. int64 Convert to signed 64-bit integer. cell Create cell array. struct Create or convert to structure array. inline Construct INLINE object.

通过上表对MATLAB数据类型的概括,我们可以对MATLAB中的数据类型有一些整体感性认识,具体的说明如下:

数据类型 说明 double MATLAB的默认数据类型,分为普通的double类型和归一化double类型 single 单精度,较double类型只需要较少存储空间,但精度和数值范围不如前者 logical 直译过来为逻辑类型,即仅有0或1 integer 最经常使用uint8类型,它是MATLAB中一种特殊的数据类型,可以达到存储图像时节省存储空间的作用1

如上所说,uint8类型可以达到节省存储空间的作用,对于灰度图像来说,MATLAB在读取该图像时,会存储为uint8类型;然后MATLAB的默认类型又是double类型(因为该类型精度高,范围大),所以数据类型之间存在转换的可能和必要。再讲这之前,我们还需要给double类型一些更多的注意力。

double类型的两种数值范围表示

特别需要说明的是,虽然double类型是MATLAB的默认类型,但是在不同的情况下,double类型存在两种数值范围。我们分别称为普通的double类型和归一化double类型,在一些情况下如果忽略该区别将会造成灰度图像显示失败等结果2。

double类型 数值范围说明 普通的double类型 占用64bit,可显示普通大小的所有数值 归一化double类型 数值范围为:0~1(一般0对应黑色,1对应白色)

double类型与uint8类型之间的转换

uint8类型转换为double类型

转换代码如下,其中A为uint8类型:

A =    0  100  200  255>> B=double(A)B =     0   100   200   255

由结果可知,转换效果为:数值不变,返回double类型。

double类型转换为uint8类型

转换代码如下,其中C为普通double类型,E为归一化double类型:

C =  -100     0   100   255   360>> D=uint8(C)D =    0    0  100  255  255E =         0    0.3922    0.7843    1.0000>> F=uint8(E)F =    0    0    1    1

由结果可知,普通double类型转换为uint8类型,发生截断:小于0的转换为0,大于255的转换为255,其他四舍五入转换为整数;归一化double类型转换为uint8类型,四舍五入为整数,输出数值非0即1。

double类型和uint8类型的同类型转换

无论是double类型转换为double类型,还是uint8类型转换为uint8类型,其输出不发生任何变化。

总结

通过前边的学习,我们对MATLAB中的数据类型以及常用的double类型和uint8类型的转换有了一定的了解,掌握这些数据类型的区别和转换,将有助我们有效地避免进行图像(特别是灰度图像)的读取、显示和处理时可能发生的细节性错误。

本篇对MATLAB数据类型及简单转换的说明到此为止,关于MATLAB中常用的类型转换函数以及图像读取显示函数的内容,我将在下篇博客中详述,并给出必要的实例代码。

参考文献


  1. matlab读取写入图像数据格式uint8,double ↩
  2. 谈谈matlab中的uint8和double ↩
1 0
原创粉丝点击