Has*_*rab 2 matlab image matrix triangular
我需要在已加载的图像中绘制一个三角形.三角形应如下所示:
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
Run Code Online (Sandbox Code Playgroud)
但我遇到的主要问题是我不知道如何创建这样的矩阵.我想将此矩阵与图像相乘,图像矩阵由3个参数(W,H,RGB)组成.
>> 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
Run Code Online (Sandbox Code Playgroud)
编辑:根据您在下面的评论,听起来你有一个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
Run Code Online (Sandbox Code Playgroud)
对REPMAT的调用复制了A
3次的否定版本,使其具有与之相同的尺寸B
.其结果被用作逻辑索引入B
,设定非零指数为0.通过使用索引来代替乘法,就能避免不必担心转换A
并B
为相同的数据类型(这将需要做乘法这种情况,因为A
是类型double
和B
类型uint8
).