我需要在已加载的图像中绘制一个三角形。三角形应该如下所示:
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)组成。
答案 0 :(得分:9)
>> 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
的每个颜色平面相乘通过矩阵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
具有相同的维度。结果用作logical index到B
,将非零索引设置为0.通过使用索引而不是乘法,您可以避免担心转换A
和{{ 1}}到相同的数据类型(在这种情况下需要进行乘法,因为B
类型为A
且double
类型为B
)。