matlab meshc函数_MATLAB中图像的数据类型

一.几种图象的数据类型。

表中罗列了常见的数据类型及其含义:

7501ca3c003d04da2c4d8bb2866c4af4.png

输入图像,指定为数值标量、向量、矩阵或多维数组。

1.如果 I 是灰度或真彩色 (RGB) 图像,它可以是 uint8、uint16、double、logical、single或 int16。

2.如果 I为索引图像,它可以是 uint8、uint16、double 或 logical。

3.如果 I为二值图像,它必须是 logical。

二.matlab图像的存储数据类型。

imread函数把灰度图像存入了一个八位矩阵,如果是RGB图像,就存入8位RGB矩阵中。这个八位矩阵的每一个元素都是一个图片中的像素,由于这种矩阵一般占用的页面较大,这里我们用size函数来查询一幅图像的大小,例如:

>> [M,N]=size(BW)

M =
     258
N =
     350

因为我们前面的图片是灰度图,所以返回了一个M×N矩阵。

函数whos可以显示出一个矩阵的附加信息:

>> f=imread('abc.jpg');
>> whos f
  Name        Size              Bytes  Class    Attributes

  f         107x97x3            31137  uint8   

由此可见,matlab读入图像的数据是uint8的变量存储为 1 个字节(8 位)的无符号整数,而matlab中数值一般采用double型(64位)进行存储和运算,所以要先把图像转换为double格式的才能运算。

注意:二值图像在matlab中具有非常重要的意义,一幅二值图像是一个取值只有0和1的逻辑数组。所以一个取值只包含0和1的uint8类数组,在matlab中不认为是二值图像,为了解决这个问题,我们使用logical函数可以把数值数组转换拿为二值数组,因此,若A是一个由0和1构成的数值数组,则可以用如下的语句创建一个逻辑数组B:

>> B=logical(f);
>> whos f
  Name        Size               Bytes  Class     Attributes

  f         107x97x3            249096  double              

可以看到这时候的数据类型为double精度类型。若A中含有除了0和1以外的其他元素,则使用logical函数可以将所有非0的量变换为逻辑1。

三.几种数据类型的转换

1.把图像数组转换成double精度类型。

这里用到了im2double 函数,例子如下:

>> f=im2double(f);
>> whos f
  Name        Size               Bytes  Class     Attributes

  f         107x97x3            249096  double  

可见我们已经成功的完成了数据类型的转换。

2.将图象数组转换成int8类型

这里用im2int8函数:

I =reshape(uint16(linspace(0,65535,25)),[5 5])   %创建 uint16 类的数组
I =

  5×5 uint16 矩阵

       0   13653   27306   40959   54613
    2731   16384   30037   43690   57343
    5461   19114   32768   46421   60074
    8192   21845   35498   49151   62804
   10923   24576   38229   51882   65535
I2 = im2uint8(I)          %将数组转换为 uint8 类。
I2 =

  5×5 uint8 矩阵

     0    53   106   159   213
    11    64   117   170   223
    21    74   128   181   234
    32    85   138   191   244
    43    96   149   202   255

输入whos查看

>> whos I2
  Name      Size            Bytes  Class    Attributes

  I2        5x5                25  uint8        

3.将图像数组转换成unit16类型

用im2uint16函数:

I = reshape(linspace(0,1,20),[5 4])      %创建 double类的数组
I =

         0    0.2632    0.5263    0.7895
    0.0526    0.3158    0.5789    0.8421
    0.1053    0.3684    0.6316    0.8947
    0.1579    0.4211    0.6842    0.9474
    0.2105    0.4737    0.7368    1.0000
I2 = im2uint16(I)     %将数组转换为 uint16 类。
I2 = 5x4 uint16 matrix

       0   17246   34492   51738
    3449   20695   37941   55187
    6898   24144   41391   58637
   10348   27594   44840   62086
   13797   31043   48289   65535

输入whos查看

>> whos
  Name      Size            Bytes  Class     Attributes

  I         5x4               160  double              
  I2        5x4                40  uint16 

欢迎大家关注我,以后会持续更新MATLAB相关文章

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值