用MATLAB进行图像处理

图像处理概念,算法和MATLAB

数字图像处理用MATLAB:数据类型

今天的文章是一个使用MATLAB进行数字图像处理的连续教程系列.我大致按照书中使用的顺序来介绍主题利用MATLAB进行数字图像处理

在MATLAB中处理图像时,了解不同的数值数据类型如何发挥作用是很重要的。

MATLAB中最常见的数值数据类型是,代表双精度浮点数.它是你在MATLAB中输入数字时默认得到的数字表示。

A = [0.1 0.125 1.3]
A = 0.1000 0.1250 1.3000
类(一)
Ans = double

双精度浮点数用于近似实数集。在一定程度上,人们可以使用MATLAB(以及CPU或GPU上的计算硬件)对这些数字进行算术计算,并得到与实数上的“真正算术”(或“上帝的数学”,正如我听Cleve说的那样)相同的结果。

使用浮点数对数学图像处理算法(如滤波、傅里叶变换、模糊化、颜色计算等)非常有用。

在1997年之前是MATLAB中唯一的数据类型。图像处理客户对此表示不满,因为这类数字需要内存。双精度浮点数需要64位,而许多处理图像数据的人习惯只使用8位(在二进制图像的情况下甚至只使用1位)来存储每个像素值。

在1997年的MATLAB 5和图像处理工具箱2中,我们引入了对一种新的数据类型的支持,金宝appuint8的缩写无符号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 = 62 63 63 65 63 61 59 64 65 63 63 66
类(rgb)
Ans = uint8

几乎在MATLAB 5和图像处理工具箱2之后,我们开始听到客户使用16位存储科学数据,因此8位是不够的,64位是不够的)似乎仍然是浪费。因此图像处理工具箱2.2在1999年增加了对金宝appuint16数字(无符号16位整数)。

但这还不够。医学影像界似乎是有必要的签署16位数字。还有,许多人说,单精度浮点数呢?

对于2001年的图像处理工具箱3,我们停止逐个添加数据类型支持,而是在当时添加了对MATLAB中所有数据类型的支持。金宝app以下是整个系列的总结:

  • -双精度浮点数,近似范围$\pm 10^{308}$(每个数字8字节)
  • -单精度浮点数,其值近似范围为$\pm 10^{38}$(每个数字4字节)
  • uint8-范围为[0,255]的无符号8位整数(每个数字1字节)
  • uint16-范围为[0,65535]的无符号16位整数(每个数字2字节)
  • uint32- 32位无符号整数,范围为[0,4294967295](每个数字4字节)
  • int8-范围为[-128,127]的有符号8位整数(每个数字1个字节)
  • int16-范围内的有符号16位整数[-32768,32767](每个数字2字节)
  • int32- 32位有符号整数,范围[-2147483648,2147483647](每个数字4字节)

金宝app支持逻辑数据类型(唯一的值是0和1,每个数字1个字节)是在几年后添加的。

此后又出现了另外两种数据类型,uint64而且int64.在图像处理中支持这些数据类型的工作相对较少,原因有二:金宝app

  • 我们没有收到任何客户的要求
  • 有一些难以回答的行为问题是因为存在的事实uint64而且int64无法精确表示的数字,一些“图像处理工具箱”函数有一个隐含的假设,即可以将整数转换为双精度浮点数,并在此过程中不丢失信息。但是,事实证明,有很多大的无符号64位数字不能精确地用双精度浮点数表示:
C = uint64(184467440737095516)
C = 184467440737095516
D = double(c)
D = 1.8447e+17
E = uint64(d)
E = 184467440737095520
E - c
Ans = 4

当我下次进一步讨论这个主题时,我将更多地讨论数据类型转换:MATLAB中的基本数据类型转换,以及处理数据缩放附加细节的图像处理工具箱中的数据类型转换。

有关更多信息,请参见第2.5节利用MATLAB进行数字图像处理




发布与MATLAB®R2012b

|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。