虽然官方函数有 im2uint8
,然而这个函数只适用于 double 类型范围在 0~1 的数组。
如果矩阵数据图像是 double 类型(0~1 之间)可直接 im2uint8,这样不仅完成数据类型转换,而且将 0~1 之间映射为了 0~255 之间的数据。但是如果图像矩阵数据是 double 类型的 0~255,直接 im2uint8 转换的话,matlab 会将大于 1 的数据都转换为 255,0~1 之间的数据才会映射到 0~255 之间整型的数据
1 | >> im = [1,2,3;4,5,6] |
需要先把数据归一化到 0~1,再用 im2uint8,才能把原图的灰度值从[0,1]映射到[0,255]
mat2gray
将数据归一化到 0~1im2uint8
将归一化后的 0~1,映射为[0,255]
1 | >> im2uint8(mat2gray(double(im))) |
总结
虽然官方函数有im2uint8
,然而这个函数只适用于 double 类型范围在 0~1 的数组。需要先把数据归一化到 0~1,再用 im2uint8,才能把原图的灰度值从 [0,1] 映射到 [0,255].
Ref
- 对数变换中,im2uint8(mat2gray(g))怎样理解? – MATLAB 中文论坛 (ilovematlab.cn)
- MATLAB mat2gray - MathWorks 中国
- MATLAB im2uint8 - MathWorks 中国