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

时间:2009-10-14 20:09:24

标签: image matlab 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  

但我遇到的主要问题是我不知道如何创建这样的矩阵。我想将此矩阵与图像相乘,图像矩阵由3个参数(W,H,RGB)组成。

1 个答案:

答案 0 :(得分: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

编辑:根据您的评论,听起来您有一个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 indexB,将非零索引设置为0.通过使用索引而不是乘法,您可以避免担心转换A和{{ 1}}到相同的数据类型(在这种情况下需要进行乘法,因为B类型为Adouble类型为B)。