MATLAB im2double、double、mat2gray、im2uint8和uint8的区别及使用

本文详细介绍了MATLAB中图像处理常用函数im2double、mat2gray、im2uint8及uint8的功能与用法。解析了这些函数如何进行图像类型的转换与像素值的归一化处理,并通过实例代码展示了具体的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

im2double 、mat2gray与double

  1. double 就是简单地把一个变量类型转换成double类型,数值大小不变
  2. mat2gray是把一个double类的数组转换成取值范围为[0,1]的归一化double类数组。
  3. 函数im2double将输入转换成double类型。如果输入是 uint8 unit16或者是二值的logical类型,则函数im2double 将其值归一化到0~1之间
    注:
    如果输入为double类型,输出还是double类型,并不进行归一化;即先用double转换,再用im2double 转换,不会对double处理之后的图像进行归一化操作;mat2gray则会将像素值归一化处理。

im2uint8和uint8

  1. im2uint8用于将归一化到0~1之间(im2double 处理后的图像)转换为uint8类型
  2. uint8就是简单地把一个变量类型转换成uint8类型,数值大小不变
    注:
    如果对double处理之后的图像使用uint8()操作,返回值与原本的图像相同,不会出错。即im2uint8转换对应im2double 转换,数据有归一化过程;uint8对应double转换,转换过程中数值不发生变化。如果不能一一对应,则会出错。

    代码

    img=double(img);%img为图像变量
    img=uint8(img);
    img=im2double(img);
    img=im2uint8(img);
    img=mat2gray(img);

    img_re=reshape(img,size(img,1)*size(img,2),3);%将图像转换为3列的矩阵,便于查看结果。

运行结果
double转换结果
double转换

double转换后使用im2double
double转换后使用im2double

double转换之后使用mat2gray
double转换之后使用mat2gray

### MATLAB 中 `uint8` 与 `double` 类型转换 在MATLAB中,图像数据通常以不同的数值类型存储。常见的两种类型是无符号八位整数 (`uint8`) 双精度浮点数 (`double`)。 #### 数据类型的特性 - **`uint8`**: 这种数据类型用于表示范围从0到255之间的整数值,在内存占用上较为高效。 - **`double`**: 双精度浮点数可以表示更广泛的价值区间,并支持小数部分,适合进行复杂的数学运算[^2]。 #### 转换方法 为了适应不同场景下的需求,MATLAB提供了多种方式来完成这两种基本数据类型间的相互转换: ##### 使用内置函数直接转换 可以直接调用相应的构造器来进行简单而快速的类型转变: ```matlab % 创建一个随机的 uint8 图像矩阵 A_uint8 = uint8(randi([0, 255], [100, 100])); % 将其转换成 double 类型 A_double = double(A_uint8); ``` 需要注意的是,当把 `uint8` 的像素值映射至 `double` 后,默认情况下这些值会被视为介于 `[0..255]` 到 `[0..1]` 的线性比例关系。 #### 归一化操作 对于某些应用来说,可能希望进一步调整图像强度分布以便更好地满足特定算法的要求。此时可利用如下几个专门设计用来处理此类任务的功能: - **`im2double` 函数** 此命令会自动检测输入数组的数据类型并执行适当的操作使其成为标准化后的 `double` 数组形式。如果源图像是 `uint8`, 那么输出将会被缩放到 `[0...1]` 区间内;而对于已经是 `double` 或者其他非字节尺度化的格式,则不会改变原有取值范围: ```matlab B_normalized = im2double(A_uint8); % 对 A_uint8 执行归一化得到 B_normalized ``` - **`mat2gray` 函数** 该功能允许指定自定义的最大最小边界(`amin`,`amax`)来做灰度级拉伸变换。这有助于突出显示感兴趣区域内的特征差异或是消除不必要的动态范围变化影响: ```matlab C_stretched = mat2gray(A_double, [min_val max_val]); % 自定义 min_val max_val 来控制拉伸程度 ``` 通过上述介绍可以看出,MATLAB 提供了一系列便捷工具帮助用户轻松实现不同类型间的安全可靠互转及预处理工作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值