2

読み込んだ画像に三角形を描く必要があります。三角形は次のようになります。

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)で構成されています。

4

1 に答える 1

9

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 つの解決策があります。BAABBA

>> 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変換することを心配する必要がなくなります (これは、 で乗算を行うために必要になります)。この場合は、タイプであり、タイプであるため)。ABAdoubleBuint8

于 2009-10-14T20:19:52.513 に答える