matlab图像数据类型uint8,double关系
(一)double型的图像矩阵转化为uint8(I)类型
为了节省存储空间,matlab为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式存储的图像称作8位图像。matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)运算。
运算的时候将原图像的灰度值转换成double的作用主要是考虑计算过程中的精度的问题,double的数据是有小数点的,而uint8是0-255的整数,如果直接用uint8计算,会在计算过程中产生舍入误差,这种误差在图像的数据中是比较大的误差。
代码编写:
I = rgb2gray(imread('D:\数字图像处理\第二章学习\dog2.jpg')); %把图像变为灰度图像
f = im2double(I);
g = im2uint8(f);
figure;
subplot(1, 2, 1), imshow(f), title('double类型图像');
subplot(1, 2, 2), imshow(g), title('uint8类型图像');
代码分析:
使用im2double()将uint8转换到double类型,而且把数据大小从0-255映射到0-1区间。然后用im2uint8(),这样不仅完成数据类型转换,而且将0-1之间映射为0-255之间的数据。
运行效果如下:
实验结果:
针对“要是把运算后是double型的图像矩阵转化为uint8(I)类型,虽然可以保证显示范围,但是显示精度确实大大降低,好多细节的区域不会显示出来,”,目前代码运行结果显示细节的区域显示差别不大,细节区域基本都能显示出来,但是针对显示精度问题,可以从理论得到论证,double的数据是有小数点的,而uint8是0-255的整数,如果直接用uint8计算,会在计算过程中产生舍入误差,这种误差在图像的数据中是比较大的误差。
matlab中double转化为uint8
下面展示im2uint8()和uint8()两种方法在不同初始状态下的实现效果,分析优劣<