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