、几种图像的数据类型
一
表中罗列了常见的数据类型及其含义:
输入图像,指定为数值标量、向量、矩阵或多维数组。
①
如果 I 是灰度或真彩色 (RGB) 图像,它可以是 uint8、uint16、double、logical、single或 int16。
②
如果 I为索引图像,它可以是 uint8、uint16、double 或 logical。
③
如果 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.将图x数组转换成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绘图中对各种属性的控制方法(一)
MATLAB绘图中对各种属性的控制方法(二)
MATLAB中图像的初步处理
更多MATLAB学习资源请加入QQ群:953314432
扫码关注我们
更多精彩等着你
出品:Asoul水云天课堂工作室