Matlab图像数据类型unit8与double

  • Post author:
  • Post category:其他

一、数据类型

        uint16 :无符号16bit整数,

        unit8:无符号8bit整数,

        int8:有符号8bit整数。

        double:有符号64bit浮点数。(8bit即一个字节)

二、图像数据类型

        im2double: 将uint8转换到double类型,把数据大小从0-255映射到0-1区间,即数组元素在0-1之间;

        im2uint8(): 将double转换到unit8类型,把数据大小从0-1映射到0-255区间,即数组元素在0-255之间。

三、两种数据类型

1、为什么图片以unit8的数据类型存储?

        matlab读取图片后保存的数据是uint8类型,以此方式存储的图像称作8位图像,相比较matlab默认数据类型双精度浮点double(64位,8个字节)可以节省存储空间。

2、为什么在图片计算过程中要转换为double类型?

        在运算的时候将原图像的数据转换成double类型,其作用主要是考虑计算过程中的精度的问题,double的数据是有小数点的,而uint8是0-255的整数,如果直接用uint8计算,会在计算过程中产生舍入误差,这种误差在图像的数据中是比较大的。

3、两种数据类型元素之间的区别与转换

        matlab默认double类型图片数据是位于0~1之间的,而uint8是位于0-255之间。

4、0~255范围的double图像会显示为白色

        对于0-255之间的数据,matlab处理完图像矩阵后,用imshow()显示图像或用inwrite()写入图片。如果参数数据类型是double型,输出的图像部分区域会显示白色。如果参数数据类型是unit8,输出的图像显示范围为0-255。

        这是因为imshow()显示图像时,认为double型数据位于(0,1),对于数组中大于1的元素,会将其归为1,显示为白色。

        因此,当面对0~255范围的double图像数组时,matlab会将大于1的数据都转换为255,要想正常显示,要么除以255进行归一化处理,要么将其转换成uint8型图像数组显示。


版权声明:本文为xing09268原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。