一、前言
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 生成一个二维网格采样点矩阵
meshgrid是MATLAB中用于生成网格采样点的函数,可以使用meshgrid创建一个二维网格采样点矩阵。meshgrid 在图像处理和3D图形绘制方面有着广泛的应用。
基本用法:[X, Y] = meshgrid(x, y)。这里,x和y是包含坐标的向量,而X和Y是生成的网格矩阵,分别包含网格点在x轴和y轴上的坐标。
示例:
[X,Y] = meshgrid(-2:.2:2, -4:.4:4);
Z = X .* exp(-X.^2 - Y.^2);
surf(X,Y,Z)
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));
上面程序运行结果如下: