史蒂夫与MATLAB图像处理

图像处理的概念、算法和MATLAB

使用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字节/数字)添加几年后。

另外两个数据类型出现了自那时以来,uint64int64。相对较少的努力已经取得了支持这些图像处理的数据类型,有两个原因:金宝app

  • 我们得不到任何的客户请求
  • 有很难回答行为有问题造成的事实uint64int64数字不能完全表示为和一些图像处理工具箱函数有一个隐含的假设,一个人可以将整数转换为双精度浮点数,并在这一过程中不丢失信息的情况下再次。但是,事实证明,有很多的大型无符号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数字图像处理




发表与MATLAB®R2012b

|
  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。