《数字图像处理与机器视觉——Visual C++与Matlab实现》——1.2 Matlab图像类型及其存储方式

简介:

本节书摘来自异步社区出版社《数字图像处理与机器视觉——Visual C++与Matlab实现》一书中的第1章,第1.2节,作者: 张铮 , 王艳平 , 薛桂香,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.2 Matlab图像类型及其存储方式

数字图像处理与机器视觉——Visual C++与Matlab实现
在0.1.3小节介绍数字图像的分类时,曾提及一些主要的图像类型。本节将介绍这些主要的图像类型在Matlab中是如何存储和表示的,主要包括亮度图像、RGB图像、索引图像、二值图像和多帧图像。

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

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

image

2.RGB图像(RGB Image)
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是一个使用双精度数组存储RGB图像的例子。

image

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

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

image

图像数据矩阵和颜色索引表的关系取决于图像数据矩阵中存储的数据类型是双精度类型还是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。

二值图像的表示方法如图1.8所示。

image

5.多帧图像(Multiframe Image Array)
实际应用中,可能需要处理多幅按时间或视角方式连续排列的图像,我们把这种图像称之为多帧图像(所谓“帧”就是影像动画中最小单位的单幅影像画面)。例如核磁共振成像数据或视频片断。Matlab提供了在同一个矩阵中存储多帧图像的方法,实际上就是在图像矩阵中增加一个维度来代表时间或视角信息。例如,一个拥有5张连续的400像素×300像素的RGB图像的多帧连续片断的存储方式是一个400×300×3×5的矩阵,一组同样大小的灰度图像则可以使用一个400×300×1×5的矩阵来存储。

如果多帧图像使用索引图像的方式存储,则只有图像数据矩阵被按多帧形式存储,而颜色索引表只能公用。因此,在多帧索引图像中,所有的索引图像公用一个颜色索引表,进而只能使用相同的颜色组合。

cat函数。
cat函数可以在指定维度上连接数组,其调用方式为:

CAT(DIM, A, B);  或  CAT(DIM, A1, A2, …);

此函数在第DIM维度将第2至第n个参数提供的数组连接起来。于是,若要构造一个由5幅RGB图像构成的多帧图像组,则可使用如下命令:

ANIM=CAT(4, A1, A2, A3, A4, A5);

选择存储方式时的限制。
图像处理工具箱中的某些函数只能处理图像矩阵中的前2维或前3维信息。当然,也可以使用它们处理拥有4个维度或5个维度的RGB图像或者连续图像序列,但这需要单独处理每帧符合要求的亮度/二值/索引/RGB图像。例如,显示ANIM中的第3帧图像需要使用如下方式:

imshow(ANIM(:,:,:,3));

函数imshow作用是显示一帧图像,详见1.5节。

icon-info注意:

如果向一个函数传递了超过其所能够处理的维度的图像矩阵,那么结果可能是不确定的。某些函数的行为可能是处理图像的第一帧或第一个颜色维度,但某些函数可能带来不确定的行为和处理结果。
默认情况下,Matlab将绝大多数数据存储为双精度类型(64位浮点数)以保证运算的精确性。而对于图像而言,这种数据类型在图像尺寸较大时可能并不理想。例如,一张1000像素见方的图像拥有一百万个像素,如果每个像素用64位二进制数表示,则总共需要大约8MB的内存空间。

为了减小图像信息的空间开销,可以将图像信息存为8位无符号整型数(uint8)和16位无符号整型数(uint16)的数组,这样只需要双精度浮点数八分之一或四分之一的空间。在上述3种存储类型中双精度和uint8使用最多,uint16的情况与uint8大致类似。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
12天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于深度学习网络的宝石类型识别算法matlab仿真
本项目利用GoogLeNet深度学习网络进行宝石类型识别,实验包括收集多类宝石图像数据集并按7:1:2比例划分。使用Matlab2022a实现算法,提供含中文注释的完整代码及操作视频。GoogLeNet通过其独特的Inception模块,结合数据增强、学习率调整和正则化等优化手段,有效提升了宝石识别的准确性和效率。
|
16天前
|
算法 数据安全/隐私保护
数字通信中不同信道类型对通信系统性能影响matlab仿真分析,对比AWGN,BEC,BSC以及多径信道
本项目展示了数字通信系统中几种典型信道模型(AWGN、BEC、BSC及多径信道)的算法实现与分析。使用Matlab2022a开发,提供无水印运行效果预览图、部分核心代码及完整版带中文注释的源码和操作视频。通过数学公式深入解析各信道特性及其对系统性能的影响。
|
2月前
|
算法 数据安全/隐私保护
织物图像的配准和拼接算法的MATLAB仿真,对比SIFT,SURF以及KAZE
本项目展示了织物瑕疵检测中的图像拼接技术,使用SIFT、SURF和KAZE三种算法。通过MATLAB2022a实现图像匹配、配准和拼接,最终检测并分类织物瑕疵。SIFT算法在不同尺度和旋转下保持不变性;SURF算法提高速度并保持鲁棒性;KAZE算法使用非线性扩散滤波器构建尺度空间,提供更先进的特征描述。展示视频无水印,代码含注释及操作步骤。
|
3月前
|
算法 数据可视化 数据安全/隐私保护
基于LK光流提取算法的图像序列晃动程度计算matlab仿真
该算法基于Lucas-Kanade光流方法,用于计算图像序列的晃动程度。通过计算相邻帧间的光流场并定义晃动程度指标(如RMS),可量化图像晃动。此版本适用于Matlab 2022a,提供详细中文注释与操作视频。完整代码无水印。
|
5月前
|
算法
基于粒子群优化的图像融合算法matlab仿真
这是一个基于粒子群优化(PSO)的图像融合算法,旨在将彩色模糊图像与清晰灰度图像融合成彩色清晰图像。在MATLAB2022a中测试,算法通过PSO求解最优融合权值参数,经过多次迭代更新粒子速度和位置,以优化融合效果。核心代码展示了PSO的迭代过程及融合策略。最终,使用加权平均法融合图像,其中权重由PSO计算得出。该算法体现了PSO在图像融合领域的高效性和融合质量。
|
6月前
|
机器学习/深度学习 算法 固态存储
m基于深度学习的卫星遥感图像轮船检测系统matlab仿真,带GUI操作界面
在MATLAB 2022a中,使用GoogLeNet对卫星遥感图像进行轮船检测,展示了高效的目标识别。GoogLeNet的Inception架构结合全局平均池化增强模型泛化性。核心代码将图像切块并分类,预测为轮船的部分被突出显示,体现了深度学习在复杂场景检测中的应用。
410 8
|
6月前
|
算法 计算机视觉 异构计算
基于FPGA的图像一维FFT变换IFFT逆变换verilog实现,包含tb测试文件和MATLAB辅助验证
```markdown ## FPGA 仿真与 MATLAB 显示 - 图像处理的 FFT/IFFT FPGA 实现在 Vivado 2019.2 中仿真,结果通过 MATLAB 2022a 展示 - 核心代码片段:`Ddddddddddddddd` - 理论:FPGA 实现的一维 FFT/IFFT,加速数字信号处理,适用于高计算需求的图像应用,如压缩、滤波和识别 ```
|
6月前
|
算法 计算机视觉
基于Chan-Vese算法的图像边缘提取matlab仿真
**算法预览展示了4幅图像,从边缘检测到最终分割,体现了在matlab2022a中应用的Chan-Vese水平集迭代过程。核心代码段用于更新水平集并显示迭代效果,最后生成分割结果及误差曲线。Chan-Vese模型(2001)是图像分割的经典方法,通过最小化能量函数自动检测平滑区域和清晰边界的图像分割,适用于复杂环境,广泛应用于医学影像和机器视觉。**
|
7月前
|
算法 数据安全/隐私保护 C++
基于二维CS-SCHT变换和扩频方法的彩色图像水印嵌入和提取算法matlab仿真
该内容是关于一个图像水印算法的描述。在MATLAB2022a中运行,算法包括水印的嵌入和提取。首先,RGB图像转换为YUV格式,然后水印通过特定规则嵌入到Y分量中,并经过Arnold置乱增强安全性。水印提取时,经过逆过程恢复,使用了二维CS-SCHT变换和噪声对比度(NC)计算来评估水印的鲁棒性。代码中展示了从RGB到YUV的转换、水印嵌入、JPEG压缩攻击模拟以及水印提取的步骤。
|
6月前
|
算法 计算机视觉 异构计算
基于FPGA的图像直方图均衡化处理verilog实现,包含tb测试文件和MATLAB辅助验证
摘要: 在FPGA上实现了图像直方图均衡化算法,通过MATLAB2022a与Vivado2019.2进行仿真和验证。核心程序涉及灰度直方图计算、累积分布及映射变换。算法旨在提升图像全局对比度,尤其适合低对比度图像。FPGA利用可编程增益器和查表技术加速硬件处理,实现像素灰度的均匀重分布,提升视觉效果。![image preview](https://ucc.alicdn.com/pic/developer-ecology/3tnl7rfrqv6tw_a075525027db4afbb9c0529921fd0152.png)