首页 > 解决方案 > uint8 和单个图像有什么区别?

问题描述

我已经知道uint8包含 0 到 255 (2 8 -1) 之间的强度值,并且单个包含 0 到 1 之间的值,它用于保存更大的值而不会破坏范围误差。但是,除此之外,还有其他区别吗?

imagesc((I/64)*64)imagesc((Is/64)*64), where Iisuint8Isis和有什么不一样single

标签: matlabimage-processingimage-scalingunsigned-integersingle-precision

解决方案


imagesc只是在下面调用image。至于image,如果提供整数或浮点数,它的行为会有所不同,这可以从image的文档中了解到:

如果Cdouble类型,则 RGB 三元组值[0 0 0]对应于黑色和[1 1 1]白色。

如果C整数类型,则图像使用全范围数据来确定颜色。例如,如果C是类型uint8,则[0 0 0]对应黑色,[255 255 255]对应白色。如果CData是 类型int8,则[-128 -128 -128]对应黑色,[127 127 127]对应白色。

...

数据类型之间的转换

要将索引图像数据从整数类型转换为 type double,请添加 1。例如,如果X8是 type 的索引图像数据uint8,则使用以下方法将其转换为 type double

X64 = double(X8) + 1;

要将索引图像数据从类型double转换为整数类型,请减 1 并使用round以确保所有值都是整数。例如,如果X64是 类型的索引图像数据double,则将其转换为uint8使用:

X8 = uint8(round(X64 - 1));

要将真彩色图像数据从整数类型转换为 type double,请重新缩放数据。例如,如果RGB8是 类型的真彩色图像数据uint8,则使用以下方法将其转换为双精度:

RGB64 = double(RGB8)/255;

要将真彩色图像数据从类型double转换为整数类型,请重新缩放数据并使用round以确保所有值都是整数。例如,如果RGB64是类型的图像数据double,将其转换为uint8使用:

RGB8 = uint8(round(RGB64*255));

推荐阅读