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