如何在MATLAB中在图像中绘制三角形?

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)组成.

gno*_*ice 9

您可以使用TRILONES函数创建问题中的矩阵:

>> 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的调用复制了A3次的否定版本,使其具有与之相同的尺寸B.其结果被用作逻辑索引B,设定非零指数为0.通过使用索引来代替乘法,就能避免不必担心转换AB为相同的数据类型(这将需要做乘法这种情况,因为A是类型doubleB类型uint8).