转换图像存储类
你可以转换uint8和uint16数据到双精度使用MATLAB函数,double。然而,存储类之间的转换改变了MATLAB和工具箱解释图像数据的方式。如果希望得到的数组被正确地解释为图像数据,则需要在转换数据时重新缩放或偏移数据。
为了更容易的转换存储类,使用这些工具箱函数之一:im2double, im2uint8,和im2uint16。这些函数自动处理原始数据的缩放和偏移。例如,该命令将数据范围为[0,1]的双精度RGB图像转换为数据范围为[0,255]的uint8 RGB图像。
在转换过程中丢失信息
当转换为使用较少位元表示数字的类时,通常会丢失图像中的一些信息。例如,一个uint16强度图像能够存储多达65,536个不同的灰度,但一个uint8强度图像只能存储256个不同的灰度。当你转换一个uint16强度图像到一个uint8强度图像,im2uint8量化灰度在原始图像。换句话说,原始图像中从0到127的所有值在uint8图像中变成0,从128到385的值都变成1,以此类推。然而,这种信息的丢失通常不是问题,因为256种灰度仍然超过了你的眼睛可能识别的灰度的数量。
将索引图像
将索引图像从一个存储类转换到另一个存储类并不总是可能的。在索引图像中,图像矩阵只包含进入颜色映射的索引,而不包含颜色数据本身,因此在转换过程中不可能对颜色数据进行量化。
例如,具有300种颜色的uint16或双索引图像无法转换为uint8,因为uint8数组只有256个不同的值。如果要执行此转换,必须首先使用imapprox函数减少图像中的颜色数。此函数对颜色贴图中的颜色执行量化,以减少图像中不同颜色的数量。有关更多信息,请参阅减少索引图像中的颜色。