我需要在我加载的图像中绘制一个三角形。三角形应如下所示:
1 0 0 0 0 0
1 1 0 0 0 0
1 1 1 0 0 0
1 1 1 1 0 0
1 1 1 1 1 0
1 1 1 1 1 1
但我遇到的主要问题是我不知道如何创建这样的矩阵。我想将此矩阵与图像相乘,图像矩阵由 3 个参数(W、H、RGB)组成。
我需要在我加载的图像中绘制一个三角形。三角形应如下所示:
1 0 0 0 0 0
1 1 0 0 0 0
1 1 1 0 0 0
1 1 1 1 0 0
1 1 1 1 1 0
1 1 1 1 1 1
但我遇到的主要问题是我不知道如何创建这样的矩阵。我想将此矩阵与图像相乘,图像矩阵由 3 个参数(W、H、RGB)组成。
您可以使用TRIL和ONES函数创建一个类似于您问题中的矩阵:
>> A = tril(ones(6))
A =
1 0 0 0 0 0
1 1 0 0 0 0
1 1 1 0 0 0
1 1 1 1 0 0
1 1 1 1 1 0
1 1 1 1 1 1
编辑:根据您在下面的评论,听起来您有一个 3-D RGB 图像矩阵B
,并且您想将每个颜色平面乘以B
matrix A
。这将具有将图像的上三角形部分(对应于 中的所有零A
)设置为黑色的最终结果。假设B
是一个 6×6×3 矩阵(即 的行和列与 的B
匹配A
),这是一种使用索引(和函数REPMAT)而不是乘法的解决方案:
>> B = randi([0 255],[6 6 3],'uint8'); % A random uint8 matrix as an example
>> B(repmat(~A,[1 1 3])) = 0; % Set upper triangular part to 0
>> B(:,:,1) % Take a peek at the first plane
ans =
8 0 0 0 0 0
143 251 0 0 0 0
225 40 123 0 0 0
171 219 30 74 0 0
48 165 150 157 149 0
94 96 57 67 27 5
对 REPMAT 的调用复制了A
3 次的否定版本,因此它具有与B
. 结果用作 的逻辑索引B
,将非零索引设置为 0。通过使用索引而不是乘法,您可以避免担心将和A
转换B
为相同的数据类型(在这种情况因为A
是类型double
并且B
是类型uint8
)。