【问题标题】:How can I draw a triangle in an image in MATLAB?如何在 MATLAB 中的图像中绘制三角形?
【发布时间】:2010-12-06 19:44:26
【问题描述】:

我需要在已加载的图像中绘制一个三角形。三角形应如下所示:

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

【问题讨论】:

    标签: image matlab matrix triangular


    【解决方案1】:

    您可以使用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 的每个颜色平面乘以矩阵 @ 987654328@。这将具有将图像的上三角形部分(对应于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。通过使用索引而不是乘法,您可以避免担心将AB 转换为相同的数据类型(在这种情况下需要进行乘法运算,因为 A 的类型为 doubleB 的类型为 uint8)。

    【讨论】:

    • 下三角矩阵函数胜过 homerolled 解决方案。
    • 谢谢,这很好。我的问题是我想将此矩阵与包含图像的矩阵相乘 ::> 并且包含图像的矩阵包含 3 个参数(W、H、RGB)请尝试并查看问题,然后帮助我.. 谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    相关资源
    最近更新 更多