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)组成。
我需要在已加载的图像中绘制三角形。三角形应该是这样的:如何在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)组成。
您可以通过使用TRIL和ONES功能创建像在你的问题中矩阵:
>> 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.通过使用索引而不是乘法,可以避免担心将A
和B
转换为相同的数据类型(执行此操作所需的数据类型因为A
的类型为double
而B
的类型为uint8
)。
下三角矩阵函数超出了homerolled解决方案。 – 2009-10-14 20:21:52
是的,的确如此。 +1 – 2009-10-14 20:25:06
谢谢你,这很好。我的问题是我想这个矩阵与矩阵包含图像::>和矩阵包含图像包含3参数(W,H,RGB) PLZ试试看看问题,然后帮我.. 谢谢 – 2009-10-16 16:50:14