Main Content

qtsetblk

四分木分割のブロック値の設定

説明

J = qtsetblk(I,S,dim,vals) は、イメージ I の四分木分割内の各 dimdim 列ブロックを vals 内の対応するブロックに置き換えます。S には四分木構造が含まれています。

すべて折りたたむ

小さいイメージを表すサンプル行列を作成します。

I = [1    1    1    1    2    3    6    6
     1    1    2    1    4    5    6    8
     1    1    1    1   10   15    7    7
     1    1    1    1   20   25    7    7
    20   22   20   22    1    2    3    4
    20   22   22   20    5    6    7    8
    20   22   20   20    9   10   11   12
    22   22   20   20   13   14   15   16];

しきい値 5 を指定してイメージの四分木分割を実行します。qtdecomp は、ブロック要素の最大値からブロック要素の最小値を引いた差がしきい値よりも大きい場合にブロックを分割します。

S = qtdecomp(I,5);

四分木分割からサイズが 4 行 4 列のブロックを取得します。

vals = qtgetblk(I,S,4);

各 4 行 4 列ブロックのモードを計算し、すべての値をモードに等しくなるように設定します。

valmodes = zeros(size(vals));
for blknum = 1:size(vals,3)
    valmodes(:,:,blknum) = mode(vals(:,:,blknum),'all');
end

イメージ内のブロックに新しい値を設定します。これでイメージ内にある 4 行 4 列のブロックは均一になります。

J = qtsetblk(I,S,4,valmodes)
J = 8×8

     1     1     1     1     2     3     6     6
     1     1     1     1     4     5     6     8
     1     1     1     1    10    15     7     7
     1     1     1     1    20    25     7     7
    20    20    20    20     1     2     3     4
    20    20    20    20     5     6     7     8
    20    20    20    20     9    10    11    12
    20    20    20    20    13    14    15    16

入力引数

すべて折りたたむ

グレースケール イメージ。数値行列として指定します。

データ型: single | double | int16 | uint8 | uint16 | logical

四分木構造。スパース行列として指定します。S(m,n) がゼロ以外の場合、座標 (m,n) は分解のブロックの左上隅になり、ブロックのサイズは S(m,n) によって指定されます。関数 qtdecomp を使用することによって、四分木構造を取得できます。

データ型: double

ブロック サイズ。正の整数として指定します。

ブロック値。dim x dim x k の配列として指定します。ここで、k は四分木分割内の dimdim 列のブロックの数です。

vals のブロックの順序は、I のブロックの列方向の順序と一致しなければなりません。たとえば、vals が 4 × 4 × 2 の場合、vals(:,:,1) には、I にある最初の 4 × 4 のブロックを置き換えるために使用する値が含まれています。vals(:,:,2) には 2 番目の 4 × 4 のブロックを置き換えるために使用する値が含まれています。

バージョン履歴

R2006a より前に導入