主题 | 文章 |
---|---|
Matlab数据类型 | 此篇 |
emmmm,本来手写笔记但是怕写完就扔了,看也不方便,所以记录电子版
字节数 | 类型 | 取值 |
---|---|---|
8 | double(默认) | − 1 0 308 ∼ 1 0 308 -10^{308} \sim 10^{308} −10308∼10308 |
4 | single uint32 int32 |
− 1 0 38 ∼ 1 0 38 -10^{38} \sim 10^{38} −1038∼1038 [ 0 , 4294967295 ] [0,4294967295] [0,4294967295] [ − 2147483648 , 2147483647 ] [-2147483648,2147483647] [−2147483648,2147483647] |
2 | uint16 int16 char |
[ 0 , 65535 ] [0,65535] [0,65535] [ − 32768 , 32767 ] [-32768,32767] [−32768,32767] 字 符 字符 字符 |
1 | uint8 int8 logical |
[ 0 , 255 ] [0,255] [0,255] [ − 128 , 127 ] [-128,127] [−128,127] 0 / 1 0/1 0/1 |
直接利用数据类型名
>> a = [-1 0 100 255 256];
>> whos a
Name Size Bytes Class Attributes
a 1x5 40 double
>> b = uint8(a)
b =
1×5 uint8 行向量
0 0 100 255 255
>> whos b
Name Size Bytes Class Attributes
b 1x5 5 uint8
其他的一些转换也是如此,即格式为期望数据 = 期望类型(原始数据)
。当原始数据大于期望数据上限时候,期望数据直接取上限;反之直接取下限。所以在转换之前可用max(a(:))
或min(a(:))
来检查原始数据的上下限,否则可能会造成数据的失真。
利用特定转换函数
im2...
函数名 | 输出类型 | 输入类型 |
---|---|---|
im2uint8 |
uint8 | GrayscaleImg uint8,int16,single,double TruecolorImg uint8,int16,single,double BinaryImg logical IndexedImg uint8,uint16,double GPU加速 gpuArray 不支持 |
im2uint16 |
uint16 | logical,uint8,uint16,int16,single,double,gpuArray 不支持 (可以具体看看官网文件) |
mat2gray |
[0,1]的double | 全都支持,归一化用用 |
im2double |
double | logical,uint8,uint16,int16,single,double,gpuArray 不支持 |
im2bw |
logical | uint8,uint16,int16,single,double 不支持 可以是logical,但是没意义 |
关于double/single
规则会和前面有挺大的区别,分im2double
和mat2gray
两种情况:
uint8
转换为double
,可以从下面看到转换只是将每个uint8
数除以255
uint16
转换过来就是除以65535
logical
转换由于本来就在[0,1]
范围内,不会变gpuArray
转换只是把数据搬到了GPU,所以转换和前面数据类型相似>> a = uint8([0 100;128 200]);
>> b = im2double(a)
b =
0 0.3922
0.5020 0.7843
>> c=gpuArray(a)
c =
2×2 uint8 gpuArray matrix
0 100
128 200
>> im2double(c)
ans =
0 0.3922
0.5020 0.7843
double/single
情况im2double:
维持原来的数据大小mat2gray:
转换为[0,1]的double类型,取矩阵中max/min
分别为1/0
,中间数按比例转换>> a = double([0 100;128 200]);
>> b = im2double(a)
b =
0 100
128 200
>> c=mat2gray(a)
c =
0 0.5000
0.6400 1.0000
double/float
转换到整型
呢?1
的数会直接写成上极限65535
,小于0
则写成下极限0
,中间数乘65535
>> a = [-1 0.1;1 2]
a =
-1.0000 0.1000
1.0000 2.0000
>> whos a
Name Size Bytes Class Attributes
a 2x2 32 double
>> im2uint16(a)
ans =
2×2 uint16 矩阵
0 6554
65535 65535