《数字图像处理与机器视觉——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大致类似。

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

相关文章
|
2月前
|
算法 安全 数据安全/隐私保护
基于AES的遥感图像加密算法matlab仿真
本程序基于MATLAB 2022a实现,采用AES算法对遥感图像进行加密与解密。主要步骤包括:将彩色图像灰度化并重置大小为256×256像素,通过AES的字节替换、行移位、列混合及轮密钥加等操作完成加密,随后进行解密并验证图像质量(如PSNR值)。实验结果展示了原图、加密图和解密图,分析了图像直方图、相关性及熵的变化,确保加密安全性与解密后图像质量。该方法适用于保护遥感图像中的敏感信息,在军事、环境监测等领域具有重要应用价值。
127 35
|
16天前
|
算法 安全 数据安全/隐私保护
基于AES的图像加解密算法matlab仿真,带GUI界面
本程序基于AES算法实现图像的加解密功能,并提供MATLAB GUI界面操作,支持加密与解密。运行环境为MATLAB 2022A,测试结果无水印。核心代码通过按钮回调函数完成AES加密与解密流程,包括字节替换、行移位、列混淆及密钥加等步骤。解密过程为加密逆向操作,确保数据安全性与完整性。完整程序结合128位块加密与可选密钥长度,适用于图像信息安全场景。
|
28天前
|
机器学习/深度学习 数据采集 算法
matlab实现图像边缘检测及图像区域分割、目标检测、目标识别
matlab实现图像边缘检测及图像区域分割、目标检测、目标识别
|
4月前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
2月前
|
算法 安全 数据安全/隐私保护
基于指纹图像的数据隐藏和提取matlab仿真
本内容介绍了一种基于指纹图像的数据隐藏算法,利用指纹的个体差异性和稳定性实现信息嵌入。完整程序运行无水印,基于Matlab2022a开发。指纹图像由脊线和谷线组成,其灰度特性及纹理复杂性为数据隐藏提供可能,但也受噪声影响。核心代码附详细中文注释与操作视频,适合研究数字版权保护、秘密通信等领域应用。
|
5月前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
4月前
|
算法 数据安全/隐私保护
基于信息论的高动态范围图像评价算法matlab仿真
本项目基于信息论开发了一种高动态范围(HDR)图像评价算法,并通过MATLAB 2022A进行仿真。该算法利用自然图像的概率模型,研究图像熵与成像动态范围的关系,提出了理想成像动态范围的计算公式。核心程序实现了图像裁剪处理、熵计算等功能,展示了图像熵与动态范围之间的关系。测试结果显示,在[μ-3σ, μ+3σ]区间内图像熵趋于稳定,表明系统动态范围足以对景物成像。此外,还探讨了HDR图像亮度和对比度对图像质量的影响,为HDR图像评价提供了理论基础。
|
4月前
|
传感器 算法 算法框架/工具
基于一阶梯度的图像亚像素位移matlab仿真,带GUI界面
本项目提供图像亚像素位移估计算法,使用Matlab2022a开发。完整程序无水印运行效果佳,附带详细中文注释代码和操作视频。该算法通过一阶梯度信息和泰勒级数展开,实现比像素更精细的位置变化测量,广泛应用于医学影像、遥感图像、视频监控、精密测量等领域,显著提升图像配准和分析精度。
|
4月前
|
传感器 算法 数据安全/隐私保护
基于Affine-Sift算法的图像配准matlab仿真
本项目展示了Affine-SIFT算法的运行效果(无水印),适用于图像配准任务,能够处理旋转、缩放、平移及仿射变换。程序基于MATLAB2022A开发,包含完整代码与操作视频。核心步骤为:先用SIFT提取特征点,再通过仿射变换实现高精度对准。
|
4月前
|
监控 算法 自动驾驶
基于图像形态学处理的移动物体目标跟踪和质心提取matlab仿真,带GUI界面
本项目展示了一种基于图像形态学处理的移动物体目标跟踪和质心提取算法。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释及操作视频。算法通过多帧图像像素值求平均、中值法或高斯混合模型估计背景,结合形态学处理(开闭运算、阈值处理)去除噪声并优化目标检测,提高准确性。颜色直方图匹配用于目标跟踪,结构元素膨胀操作扩大搜索范围,增强鲁棒性。