2009-10-14 814 views
2

我需要在已加载的图像中绘制三角形。三角形应该是这样的:如何在MATLAB中的图像中绘制三角形?

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

回答

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 index转换为B,将非零索引设置为0.通过使用索引而不是乘法,可以避免担心将AB转换为相同的数据类型(执行此操作所需的数据类型因为A的类型为doubleB的类型为uint8)。

+1

下三角矩阵函数超出了homerolled解决方案。 – 2009-10-14 20:21:52

+0

是的,的确如此。 +1 – 2009-10-14 20:25:06

+0

谢谢你,这很好。我的问题是我想这个矩阵与矩阵包含图像::>和矩阵包含图像包含3参数(W,H,RGB) PLZ试试看看问题,然后帮我.. 谢谢 – 2009-10-16 16:50:14