在图像处理中,经常会出现这图像显示为纯黑或者纯白的情况,这其实是数据类型转换时出错导致的。
所涉及到的函数主要包括以下几个
图像文件经过 imread 函数读取后,获取到的图像数据类型为 uint8 ,这是一种无符号整型数据。取值范围为 0 到 255 之间的整数。
matlab 中的 uint8 函数能够将任意的 double 类型的数据转换为 uint8 类型,即规整到 0 到 255 之间。对于 0 到 255 之间的 double 数值,直接转型,不改变数值;对于小于 0 或 大于 255 的部分进行截断处理,就近处理成 0 或 255 。
与 uint8 不同,im2uint8 在对 double 类型数据转型时,是将 0 到 1 之间的 double 数值,转换到 0 到 255 之间,而对于小于 0 或 大于1 的部分 就近处理成 0 或 255 。
double 是 matlab 默认的数据类型,即双精度浮点数据,允许小数点的和负数存在。使用 double 转型时,数值一般不会改变,仅改变数据类型。
当输入的数据为 double 类型时,im2double 不会对数据做处理。
当输入数据为 uint8 类型时,im2double 会将数据 转换到 0 到 1 之间。
当数据类型为 double 时,数据首先被规整到 0 到 1 之间,溢出的部分就近处理为 0 或 1 。其中 0 对应灰度级中的全黑,1 对应全白。所以当输入的 double 数据未得到正确的处理,取值均超过了 1 时,就会显示为全白。
当数据类型为 uint8 时,数据首先被规整到 0 到 255 之间,溢出的部分就近处理为 0 或 255 。其中 0 对应灰度级中的全黑,255 对应全白。所以当输入的 uint8 数据未得到正确的处理,取值均在 0 到 1 之间时,就会显示为全黑。
原文:https://www.cnblogs.com/gshang/p/14749435.html