読み込んだ画像に三角形を描く必要があります。三角形は次のようになります。
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 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
を掛けたいと思われます。これにより、イメージの上三角部分 ( のすべてのゼロに対応) が黒に設定されるという最終的な結果が得られます。が 6 x 6 x 3 の行列 (つまり、 の行と列が の行と列と一致する) であると仮定すると、乗算の代わりにインデックス (および関数REPMAT ) を使用する 1 つの解決策があります。B
A
A
B
B
A
>> 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
ます。結果は への論理インデックスとして使用され、ゼロ以外のインデックスは 0 に設定されます。乗算の代わりにインデックスを使用することで、を同じデータ型にB
変換することを心配する必要がなくなります (これは、 で乗算を行うために必要になります)。この場合は、タイプであり、タイプであるため)。A
B
A
double
B
uint8