使用MATLAB数字图像处理:数据类型
今天的文章的一部分持续使用MATLAB在数字图像处理教程系列。我大致涵盖主题在书中使用的命令使用MATLAB数字图像处理。
在MATLAB在处理图像时,重要的是要了解不同的数值数据类型可以发挥作用。
在MATLAB中最常见的数值数据类型双,这代表双精度浮点。的表示默认,当您输入号码到MATLAB。
(0.1 - 0.125 = 1.3)
0.1250 - 1.3000 = 0.1000
类(一)
ans =双
双精度浮点数的目的是近似的实数。一个合理的程度,一个人可以做算术计算这些数字使用MATLAB(和CPU或GPU的计算硬件)和得到相同的结果作为“真正的算术”(或“上帝的数学,”我听到克里夫说)的实数。
使用浮点数是非常有用的对于数学图像处理算法(如滤波、傅里叶变换,由模糊变清晰,颜色计算,和许多其他的)。
1997年之前,双在MATLAB是唯一一种数据类型。图像处理客户抱怨因为内存所需的这些数字。一个双精度浮点数需要64位,而许多人处理图像数据被用来只使用8位(甚至只是1位的二进制图像)来存储每个像素值。
用MATLAB 5和图像处理工具箱2 1997年,我们介绍了支持一个新的数据类型,金宝appuint8,这是一个缩写unsigned 8位整数。这些数据只需要8位代表一个数字,但能上演的的一组数字仅限于从0到255的整数。
你可以做一个MATLAB通过调用uint8函数。
b = uint8 (5)
b = 5
类(b)
ans = uint8
同时,你经常看到uint8当你调用的数量imread从文件读取图像。这是因为经常使用8位图像文件格式(压缩)来存储每个像素值。
rgb = imread (“peppers.png”);rgb (1:3, 1:4, 1)
ans = 59 62 63 63 65 63 61 64 65 63 63 66
类(rgb)
ans = uint8
几乎立即MATLAB 5和图像处理工具箱2之后,我们便开始听到来自顾客的科学数据存储使用16位值,所以8位是不够的(和64位双)仍然显得浪费。所以图像处理工具箱2.2在1999年添加支持金宝appuint16数字(无符号16位整数)。
但仍然是不够的。医学影像社区,可能是必要的签署16位数字。说很多,单精度浮点呢?
图像处理工具箱3 2001年,我们不再添加数据类型支持零散的,而是增加了对MATLAB中的所有数据类型的支持。金宝app这里是整个组的总结:
- 双——双精度浮点数的近似范围\ pm 10美元^{308}$每数量(8个字节)
- 单——单精度浮点数的值近似范围\ pm 10美元^{38}$每数(4字节)
- uint8——unsigned 8位整数的范围[0255]每数(1字节)
- uint16- 16位无符号整数区间[0,65535](2字节/数量)
- uint32- 32位无符号整数的范围(0,4294967295)每数(4字节)
- int8——签署了8位整数的范围[-128127]每数(1字节)
- int16——签署了16位整数范围内(-32768、32767)每数量(2字节)
- int32——签署了32位整数范围内(-2147483648、-2147483648)每数(4字节)
金宝app支持逻辑数据类型(唯一的值是0和1,1字节/数字)添加几年后。
另外两个数据类型出现了自那时以来,uint64和int64。相对较少的努力已经取得了支持这些图像处理的数据类型,有两个原因:金宝app
- 我们得不到任何的客户请求
- 有很难回答行为有问题造成的事实uint64和int64数字不能完全表示为双和一些图像处理工具箱函数有一个隐含的假设,一个人可以将整数转换为双精度浮点数,并在这一过程中不丢失信息的情况下再次。但是,事实证明,有很多的大型无符号64位数字不能代表完全的双精度浮点:
c = uint64 (184467440737095516)
c = 184467440737095516
d =双(c)
d = 1.8447 e + 17
e = uint64 (d)
e = 184467440737095520
e - c
ans = 4
当我追求这个话题进一步下一次,我将详细讨论数据类型转换:基本的MATLAB,加上图像处理工具箱处理额外的数据扩展的细节。
有关更多信息,请参见2.5节使用MATLAB数字图像处理。
- 类别:
- DIPUM教程
评论
留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。