数字图像处理中的常用特殊矩阵及MATLAB应用

一、前言

Matlab的名称来源于"矩阵实验室(Matrix Laboratory)",其对矩阵的操作具有先天性的优势(特别是相对于C语言的数组来说)。在数字图像处理中,为了提高编程效率,我们可以使用多种方式来创建特殊的矩阵或图像处理矩阵,如全零矩阵、全1矩阵、单位矩阵、空矩阵个、序列矩阵、稀疏矩阵、随机矩阵等。

二、特殊矩阵的生成及应用

1.全零矩阵

元素全为零的矩阵称为全零矩阵,MATLAB可以使用zeros创建全零矩阵。如zeros(5),生成一个5×5的矩阵元素全为零的方阵,而zeros(3,4)则生成3×4的矩阵元素全为零的矩阵

注意:如果使用zeros生成全零矩阵,其在MATLAB图像显示是黑色。

>> I=zeros(256,256);

>> imshow(I),title('全零矩阵图像')

2.全1矩阵

元素全为1的矩阵称为全1矩阵,MATLAB可以使用ones创建全1矩阵。如ones(5),生成一个5×5的矩阵元素全为1的方阵,而ones(3,4)则生成3×4的矩阵元素全为1的矩阵。

注意:如果一个矩阵是全1矩阵,其在MATLAB图像显示是白色。

>> onesMatrix=ones(256,256);

>> figure,imshow(onesMatrix),title('全1矩阵')

>> whos onesMatrix

矩阵元素的数据类型为double,一个像素占8个Bytes。

3.单位矩阵

如果一个方阵对角线上的元素全为1,而其他的元素全为零则称单位矩阵,MATLAB可以使用eys创建单位矩阵。

如eye(5),生成一个5×5的单位矩阵。

I=eye(5);

figure,imshow(I)

whos I

矩阵元素的数据类型为double。

4. 空矩阵

空矩阵是指有一个或多个等于零的维度(0×0,0×1,1×0)

示例:

emptyMatrix=[] %创建空矩阵

size(emptyMatrix) %行列数都为0

length(emptyMatrix) %矩阵长度为0

numel(emptyMatrix) %元素个数为0

isempty(emptyMatrix) %判断是否为空矩阵,返回逻辑值1(真)

5. 序列矩阵

在MATLAB中创建一个序列矩阵,可以使用冒号操作符 : 或者函数 linspace 和 meshgrid。以下是一些示例:

5.1 创建一个1到20间隔为2的序列矩阵(从1开始):

1)使用冒号操作符 ":"创建

>> A = 1:2:20;

2) 使用linspace函数创建

>> A=linspace(1,19,10) %保存10个数据

5.2 生成一个二维网格采样点矩阵和生成三维曲面图

Matlab的meshgrid函数是用于生成网格坐标的函数,它可以将二维或三维数组作为输入,生成对应的网格坐标矩阵。这个函数在绘制三维图形、进行数值分析等方面有着广泛的应用。

语法格式: meshgrid(x, y)或meshgrid(X,Y,Z)

其中,x和y可以是任何一维或二维数组,分别表示x轴和y轴的坐标;X和Y可以是任何一维或二维数组,表示x轴和y轴坐标的范围;Z是可选的,如果提供,则生成三维图形的网格坐标矩阵。

示例1-生成二维网格采样点矩阵并绘制其矩阵点图

%使用meshgrid生成二维矩阵点并绘制二维坐标点图

clear all;

close all;

clc;

x=1:3;y=2:5;

X,Y\]=meshgrid(x,y) plot(X,Y,'+','LineWidth',2,'Color','r'),title('显示meshgrid生成的二维网格点'); xlim(\[-2,5\]); ylim(\[-2,6\]); grid on 上面程序运行结果如下所示: ![](https://i-blog.csdnimg.cn/direct/6fa9511173074bad81b8ebe7aab3ffb0.png)![](https://i-blog.csdnimg.cn/direct/1168a338be84447381b105c9ba6ecb00.png) ![](https://i-blog.csdnimg.cn/direct/88e1999f62734f4488163ea640fb36a1.png) ![](https://i-blog.csdnimg.cn/direct/5c2cb2bb2a8445d3a49c11b95606a1e5.png) 由上可知X和Y都是3行4列的矩阵,X矩阵的每一列值相同,分别是1、2和3,Y矩阵的每一行值都相同,分别是2、3、4和5,这是因为MATLAB的坐标原点是左上角,X正方向水平向右,Y正方向垂直向下。 示例2-生成三维曲面图: \[X,Y\] = meshgrid(-2:.2:2, -4:.4:4); Z = X .\* exp(-X.\^2 - Y.\^2); surf(X,Y,Z)%创建三维曲面图 ![](https://i-blog.csdnimg.cn/direct/c019b29e071d4fd285f0aa4498b8fd78.png) **6. 稀疏矩阵** 稀疏矩阵---在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为*****稀疏矩阵*****;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。MATLAB提供了sparse函数来创建稀疏矩阵。在MATLAB中,创建一个稀疏矩阵可以通过sparse函数实现,该函数接受行索引、列索引和非零值作为输入,并生成一个稀疏矩阵。 以下是创建稀疏矩阵的示例代码: % 定义行索引、列索引和对应的值 rows = \[1; 3; 4; 5;6\]; cols = \[1; 2; 3; 4; 8\]; values = \[10; 20; 30; 35;40\]; % 使用sparse函数创建稀疏矩阵 S = sparse(rows, cols, values); % 显示稀疏矩阵 disp('显示稀疏矩阵的行列和非零值'),disp(S); % 如果你想要看到稀疏矩阵的完整形式(包括零),可以使用full函数 disp('显示稀疏矩阵的完整形式'),disp(full(S)); 上面程序运行结果如下: ![](https://i-blog.csdnimg.cn/direct/ccf49139b55b4dd89973845d736409a9.png) #### **如果大家觉得本文对大家学习有帮助,请点赞、收藏和评论,谢谢大家!**

相关推荐
Tisfy1 小时前
LeetCode 2411.按位或最大的最小子数组长度:一次倒序遍历
数据结构·算法·leetcode·题解·位运算·遍历
琛:D1 小时前
【MATLAB/Simulink】查看MATLAB以往版本的帮助文档
matlab
2202_756749692 小时前
04 基于sklearn的机械学习-梯度下降(上)
人工智能·算法·机器学习
草莓爱芒果2 小时前
Spring Boot中使用Bouncy Castle实现SM2国密算法(与前端JS加密交互)
java·spring boot·算法
晚云与城2 小时前
【数据结构】-----排序的艺术画卷
数据结构·算法·排序算法
weixin_307779132 小时前
设计Mock CUDA库的流程与实现
c++·算法·gpu算力
图灵学术计算机论文辅导2 小时前
提示+掩膜+注意力=Mamba三连击,跨模态任务全面超越
论文阅读·人工智能·经验分享·科技·深度学习·考研·计算机视觉
j_xxx404_2 小时前
数据结构:算法复杂度与空间复杂度
c语言·数据结构·算法
dlraba8022 小时前
基于 OpenCV 与 sklearn 的数字识别:KNN 算法实践
opencv·算法·sklearn