图像的矩阵表示

类和图像类型

虽然使用的是整数坐标, 但 MATLAB 中的像素值(亮度)并未限制为整数。 表 1-1 列出了 MATLAB 和图像处理工具箱为描述像素值而支持的各种类。 表中的前 8 项是数值型的数据类,第 9 项称为字符类, 最后一项称为逻辑类。

uint8 和 logical 类广泛用于图像处理, 当以 TIFF 或 JPEG 图像文件格式读取图像时,会用到这两个类。 这两个类用1个字节表示每个像素。某些科研数据源, 比如医学成像, 要求提供超出 uint8 的动态范围:针对此类数据, 会采用 uint16 和 int16 类。 这两个类为每个矩阵元素使用2 个字节。针对计算灰度的操作, 比如傅立叶变换(见第 3 章), 使用 double 和single 浮点类。 双精度浮点数每个数组元素使用8 个宇节, 而单精度浮点数使用 4 个字节。尽管工具箱支持 int8 、 uint32 和 int32 类, 但在图像处理中并不常用

算子

一般我们用字母M和N分别表示矩阵中的行与列。1x N

矩阵被称为行向量, M*1矩阵被称为列向量, 1*1矩阵则被称为标量。

Matlab 图像类型及其存储方式

在介绍数字图像的分类时, 曾提及一些主要的图像类型。 本节将介绍这些主 要的图像类型在Matlab中是如何存储和表示的, 主要包括亮度图像、 RGB 图像、 索引图像、二值图像和多帧图像。

1、亮度图像(Intensity Image)

亮度图像即灰度图像。 Matlab使用二维矩阵存储亮度图像,矩阵中的每个元素直接表示 一个像素的亮度〈灰度〉信息。 例如, 一个 200 像素× 300 像素的图像被存储为一个 200 行 300 列的矩阵,可以使用 1.1.5小节介绍的选取矩阵元素〈或子块〉的方式来选择图像中的一个像素或一个区域.

如果矩阵元素的类型是双精度的, 则元素的取值范围是从 0 到 1 :如果是 8 位无符号整数,则取值范围从0到255。数据0表示黑色,而1(或255)表示最大亮度〈通常为白色〉

2、RGB 图像(RGBlmage)

RGB 图像使用3个一组的数据表达每个像素的颜色, 即其中的红色、绿色和蓝色分量。

在Matlab 中, RGB 图像被存储在一个m ×n×3的三维数组中。对于图像中的每个像素, 存

储的三个颜色分量合成像素的最终颜色。例如, RGB 图像I 中位置在11 行40 列的像素的

RGB 值为I( 11,40.1:3 )。或I( 11,40,:),该像素的红色分量为I(11,40,1),蓝色分量为I( 11,40,3 )。

而I (:,:,1 )则表示整个的红色分量图像.

RGB 图像同样可以由观精度数组或8 位无符号整数数组存储。图1.6 是一个使用双精度

数组存储ROB 图像的例子。

3、索引图像(indexed Image)

索引图像往往包含两个数组,一个图像数据矩阵(Image Matrix )和一个颜色索引表( Colormap )。对应于图像中的每一个像素, 图像数据数组都包含一个指向颜色索引表的索 引值。

颜色索引表是一个m× 3 的双精度型矩阵, 每一行指定一种颜色的 3 个 RGB 分量,即color = [R G B]。 其中 R、G、 B 是实数类型的现精度数, 取值0~ 1。 0 表示全黑, 1 表示最大亮度。 图 1.7 是一个索引图像的实例, 需要注意的是, 图像中的每个像素都用整数表示, 其含义为颜色索引表中对应颜色的索引。

图像数据矩阵和颜色索引表的关系取决于图像数据炬阵中存储的数据类型是双精度类

型还是8位无符号整数。

如果图像数据使用双精度类型存储, 则像索数据1表示颜色索引表中的第一行, 像素数

据2表示颜色索引表中的第二行, 以此类推。如果图像数据使用8位无符号整数存储, 则存

在一个额外的偏移量-1, 像素数据0表示颜色索引表中的第一行, 而1表示索引表中的第二

行, 以此类推。

8 位方式存储的图像可以支持256 种颜色(或256 级灰度〉。因1.7 中, 数据矩阵使用的

是双精度类型, 所以没有偏移量. 数据5表示颜色表中的第5种颜色。

4、二值图像( Binary Image)

在二值图像中, 像素的颜色只有两种取值: 黑或白。Matlab 将二值图像存储为一个二维

矩阵, 每个元素的取值只有0和1两种情况,0表示黑色, 而1表示白色。

二值图像可以被看作是一种特殊的只存在黑和白两种颜色的亮度图像, 当然, 也可以将

二值图像看作是颜色索引表中只存在两种颜色〈黑和白〉的索引图像。

Matlab 中使用uint8 型的逻辑数组存储二值图像, 通过一个逻辑标志表示数据有效范围是0到1,而如果逻辑标志未被置位,则有效范围为0到255。

5、多帧图像( Multlframe Image Array)

实际应用中, 可能需要处理多幅按时间或视角方式连续排列的图像, 我们把这种图像称

之为多帧图像(所谓“ 帧” 就是影像动画中最小单位的单幅影像,画面〉。例如核磁共振成像数

据或视频片断. Matlab提供了在同一个矩阵中存储多帧图像的方法, 实际上就是在图像矩阵

中增加一个维度来代表时间或视角信息. 例如, 一个拥有5 张连续的400 像素× 300 像素的

RGB图像的多帧连续片断的存储方式是一个400× 300 × 3× 5 的矩阵, 一组同样大小的灰皮

图像则可以使用一个400× 300 × 1× 5 的矩阵来存储.

如果多帧图像使用索引图像的方式存储,则只有图像数据矩阵被按多帧形式存储, 而颜

色索引表只能公用。因此, 在多帧索引图像中, 所有的索引图像公用一个颜色索引表, 进而

只能使用相同的颜色组合。

默认情况下,matlab将绝大多数数据存储为双精度类型〈ω 位浮点数)以保证运算的精

确性. 而对于图像而言, 这种数据类型在图像尺寸较大时可能并不理想。例如, 一张1000

像萦见方的图像拥有一百万个像素, 如果每个像索用64位二进制数表示, 则总共需要大约

8MB的内存空间.

为了减小图像信息的空间开销, 可以将图像信息存为8 位无符号整型数(uint8)和16

位无符号整型数( uint16 )的数组, 这样只需要双精度浮点数八分之一或四分之一的空间。

在上述3种存储类型中双精度和 uint8 使用最多, uint16 的情况与 uint8 大致类似.

Matlab的图像转换

有时必须将图像存储格式加以转换才能使用某些图像处理函数。例如,当使用某些Matlab

内置的滤镜时, 需要将索引图像转换为RGB 图像或者灰度图像, Matlab 才会将图像滤镜应

用于图像数据本身, 而不是索引图像中的颜色索引值表〈这将产生无意义的结果〉.

Matlab 提供了一系列存储格式转换函数,如表1.11 所示.它们的名字都便于记忆,例如,

ind2gray 可以将索引图像转化为灰度图像。

也可以使用一些矩阵操作函数实现某些格式转换。例如.下面的语句可以将一幅灰度图

像转换为RGB图像.

RGBIMAGE = CAT(3, GRAY, GRAY, GRAY);

2. 图像数据类型转换

Matlab 图像处理工具箱中支持的默认图像数据类型是uint8, 使用imread函数读取的

图像文件一般都为uint8类型。然而, 很多数学函数如sin等并不支持double以外的类

型, 例如, 当试图对uint8 类型直接使用sin函数进行操作时, Matlb会提示如下的错

误信息

sin(D):
H? Undehned functioii <!>i; method ’sin’ for; input a,rguments of type- ’uint8'

针对这种情况, 除了使用1.1.4 小节介绍的强制类型转换方法外, 还可利用图像处理工

具箱中的内置图像数据类型转换函数. 内置转换函数的优势在于它们可以帮助处理数据偏移

量和归一化变换, 从而简化了编程工作.

一些常用的图像类型转换函数如表1.12所示

图像的输入输出和显示

matlab可以处理以下的图像文件类型: BMP、HDF、JPEG、PCX、TIFF、XWD、ICO、

GIF、CURo 可以使用imread和imwrite函数对国像文件进行读写操作,使用imfinfo函数来

获得数字图像的相关信息.

1. imread函数

imread函数可以将指定位置的图像文件读入工作区。对于除索引图像以外的情况,其原

型为:

A =imread(FileNAME, FMT);

2. IMWRITE函数

imwrite函数用于将指定的图像数据写入文件中,通过指定不同的保存文件扩展名,起到

图像格式转换的作用〈参见例2.4 ). 其调用格式为:

imwite(A, FileName,FMT);

• FILENAME参数指定文件名(不必包含扩展名).

• FMT参数指定保存文件所采用的格式.

存储索引图像时,还需要一并存储颜色索引表,则此时IMWRITE函数的使用方法应为:

imwrite(A, HAP, FILENAME, FMT);

3. imfinfo函数

imfinfo函数可以读取图像文件中的某些属性信息〈比如修改日期、大小、

格式、高度、宽度、色深、颜色空间、存储方式等。其调用格式为:

imfinfo(FileName,FMT);

参数说明

• FILENAME 参数指定文件名.

• FMT 参数是可选参数, 用于指定文件格式.

图像的显示

一般使用imshow函数来显示图像, 该函数可以创建一个图像对象, 并可以自动设置图

像的诸多属性,从而简化编程操作。这里介绍imshow函数的几种常见调用方式.

1.imshow函数

imshow函数用于显示工作区或图像文件中的图像.在显示的同时可控制部分效果〈参见

例12.6), 常用的调用形式为:

2.多帧图像的显示

在显示多帧图像时,可以显示多帧中的一帧,或者将它们显示在同一个窗口内,也可以

将多帧图像转化成电影播放出来. 这3种方式的实现如例1.8所示。

图像处理中的matlab使用的更多相关文章

  1. 图像处理中任意核卷积(matlab中conv2函数)的快速实现。

    卷积其实是图像处理中最基本的操作,我们常见的一些算法比如:均值模糊.高斯模糊.锐化.Sobel.拉普拉斯.prewitt边缘检测等等一些和领域相关的算法,都可以通过卷积算法实现.只不过由于这些算法的卷 ...

  2. 图像处理中的数学原理具体解释21——PCA实例与图像编码

    欢迎关注我的博客专栏"图像处理中的数学原理具体解释" 全文文件夹请见 图像处理中的数学原理具体解释(总纲) http://blog.csdn.net/baimafujinji/ar ...

  3. paper 119:[转]图像处理中不适定问题-图像建模与反问题处理

    图像处理中不适定问题 作者:肖亮博士 发布时间:09-10-25 图像处理中不适定问题(ill posed problem)或称为反问题(inverse Problem)的研究从20世纪末成为国际上的 ...

  4. 如何在Python中调用Matlab

    检查您的系统是否具有受支持的 Python 版本和 MATLAB R2014b 或更新版本.要检查您的系统上是否已安装 Python,请在操作系统提示符下运行 Python. 1)打开Prompt,输 ...

  5. VC中使用Matlab Engine出现"无法找到libeng.dll"的问题

    VC中使用Matlab Engine出现"无法找到libeng.dll"的问题 本以为使这个原因 ,其实不是我2了 #include "engine.h" // ...

  6. Java中调用MatLab返回值

    当在Java中使用MatLab函数时,由于语言语法的不同,Matlab返回多个数据时,想在Java中获取到并进行使用.查阅了网上资料,翻箱倒柜加上自己实战,得出方法如下: 如MatLab函数返回的是N ...

  7. [Python-MATLAB] 在Python中调用MATLAB的API

    可以参考官方的说明文档: http://cn.mathworks.com/help/matlab/matlab_external/get-started-with-matlab-engine-for- ...

  8. 图像处理中创建CDib类时无法选择基类类型时怎么办

    图像处理中创建CDib类时无法选择基类类型时怎么办? 类的类型选择Generic Class 在下面的篮筐里输入CObject就行了

  9. 图像处理中的数学原理具体解释20——主成分变换(PCA)

    欢迎关注我的博客专栏"图像处理中的数学原理具体解释" 全文文件夹请见 图像处理中的数学原理具体解释(总纲) http://blog.csdn.net/baimafujinji/ar ...

随机推荐

  1. 动画的使用—View Animation

    View Animation定义了下面的四种动画效果: 缩放(scale).位移(translation).旋转(rotation).透明(alpha)   缩放动画: ScaleAnimation( ...

  2. windows下编译chromium浏览器的15个流程整理

    编译chromium 系统为windows, 国内在windows上编译chromium的资料比较少, 我这篇文章只能作为参考, 记录我遇到的一些问题,因为chromium团队也会修改了代码,或者编译 ...

  3. redis-删除所有key

    删除所有Key,可以使用Redis的flushdb和flushall命令 //删除当前数据库中的所有Key flushdb //删除所有数据库中的key flushall 如果要访问 Redis 中特 ...

  4. Fxx and game

    可提交的传送门http://acm.hdu.edu.cn/showproblem.php?pid=5945 分析:这道题目可以采用动态规划来解决 设f[i]表示把i变成1的最小代价. 所以有:f[i] ...

  5. asp.net form身份认证不定时认证失败的问题 排查

    1.网站出现form认证不定时认证失败.登陆过后 每隔一会儿就需要重新登陆.首先检查的是form身份认证票据设置的时间(正常) 然后检查加密后的身份认证信息写入的cookie的失效时间(正常) 2.这 ...

  6. BZOJ4533 [BeiJing2014 WinterCamp] 数据

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  7. vim编辑器的使用

    I 在光标所在行的行首插入 A 在光标所在行的行尾插入 { 移动到上一段 } 移动到下一段 空格向后移动一格 H 屏幕顶部 M 屏幕中间 L 屏幕下方 n| 使光标移动到第几个字符处 ngg 移动到制 ...

  8. 转-ArcGIS Engine中的License设置

    AE开发中的License有两种方法进行设置,一种是通过LicenseControl控件,另一种是通过IAoInitialize接口设置.整个应用程序中只能有一种方式存在,如果进行了两种License ...

  9. 创建一个点状注记(MarkerElement)

    1.根据XY创建一个点 /// <summary> /// 根据x y创建新点 /// </summary> /// <param name="dX" ...

  10. Asp.net MVC Comet推送

    一.简介 在Asp.net MVC实现的Comet推送的原理很简单. 服务器端:接收到服务器发送的AJAX请求,服务器端并不返回,而是将其Hold住,待到有东西要通知客户端时,才将这个请求返回. 客户 ...