2021123

2021/12/3

matlab图像类型转换 uint8 、double、im2double、im2uint8、mat2gray

  1. matlab图像保存说明
      matlab中读取图片后保存的数据是uint8类型(8位无符号整数,即1个字节),以此方式存储的图像称作8位图像,好处相比较默认matlab数据类型双精度浮点double(64位,8个字节),自然可以节省很大一部分存储空间。
    详细来说imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中。例如,彩色图像像素大小是400*300( 高 * 宽 ),则保存的数据矩阵为400×300×3,其中每个颜色通道值是处于0~255之间。
      但是虽然matlab中读入图像的数据类型是uint8,而在图像矩阵运算的时候,使用的数据类型却是double类型 。一是为了保证精度,二是因为如果不转换,在对uint8进行加减时会产生溢出,(1个字节无符号整型最大只能存储数据为255,对图片的操作所以很容易溢出。)
    ————————————————
    原文链接:https://blog.csdn.net/fx677588/article/details/53301740

1.
img = imread('./1.jpg');
  I1  = double(img);
  I2  = im2double(I2); % I2数据依然是0~255,并不是0~1,即I1=I2
  %%   
  %%  函数im2double将输入转换成double类型。如果输入是uint8、unit16 或者是二值的logical类型,则函数im2double 将其值归一化到0~1之间,当然就是double类型的了。如果输入本身就是double类型,输出还是double类型,并不进行映射
2.
img = imread('./1.jpg');
  I1  = double(img);
  I2  = im2double(img); 
  I2  = I1/255;
  1. imshow()显示图像
imshow()显示图像时对double型是认为在0~1范围内,即大于1时都是显示为白色;
imshow显示uint8型时是0~255范围。
对double类型的图像显示的时候,要么归一化到0~1之间,要么将double类型的0~255数据转为uint8类型
1. 图像是double类型(0~1之间)可直接im2uint8,不仅完成数据类型转换,而且将0~1之间映射为了0~255之间的数据。
2. 图像矩阵数据是double类型的0~255,直接im2uint8转换的话,matlab会将大于1的数据都转换为2550~1之间的数据才会映射到0~255之间整型的数据

3.mat2gray()和im2double()区别
这两个如果都是对uint8数据操作,区别就在于前者是归一化操作,归一化后也在0~1之间,自然结果也是double类型,后者是将数据从0-255映射到0-1(即所有数都/255)。例如:

归一化:
I − m i n ( I ) m a x ( I ) − m i n ( I ) \frac{I - min (I)}{max(I) - min (I)} max(I)min(I)Imin(I)

3.
I  = uint8([1,1,2,3]);
I1 = mat2gray(I);  % 归一化,I1结果是double型[0,0,0.5,1]
I2 = im2double(I); % 映射化,I2结果是double型[0.0039,0.0039,0.0078,0.0118]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值