我有一个DICOM图像,其类型是16位签名。我看到一些论文,作者经常将它转换为无符号8位。但他们没有解释他们为什么这样做。你能解释一下这项工作的好处吗?以及如何通过matlab代码实现它?
答案 0 :(得分:2)
无符号8位图像占用的内存较少,某些操作(例如中值滤波)可以更快地执行。
但是,当原始图像的动态范围超过256个灰度值时,您可能会丢失信息。
如果您确实要转换图片,可以执行convertedImage = uint8(image - min(image(:)));
,但如果您不受RAM限制,则可能需要将图片转换为加倍convertedImage = double(image)
,因为这样,您可以使用更多的数学运算,例如许多过滤方法。
答案 1 :(得分:1)
简单的答案是,它使图像占用更少的内存。这不仅有助于保留存储空间,而且最有可能加快处理时间。 另外,在uint8上运行的算法也很有可能为其他类型工作。
要在matlab中从int32转换为uint8,你必须考虑到你想要的是什么:
您的图片是否只包含仅包含256个值的值?那么你可以像乔纳斯那样convertedImage = uint8(image - min(image(:)))
说,但这会削减你的价值超出范围:
>> uint8([-1 0 1 200 255 256 257])
ans =
0 0 1 200 255 255 255
>> uint8([-1 0 1 200 255 256 257] - min([-1 0 1 200 255 256 257]))
ans =
0 1 2 201 255 255 255
如果你的图像使用了可能的int16 val的全范围,你将首先想要缩放它,因此它的值范围从0到256.