ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

qtdecomp

構文

S = qtdecomp(I)
S = qtdecomp(I, threshold)
S = qtdecomp(I, threshold, mindim)
S = qtdecomp(I, threshold, [mindim maxdim])
S = qtdecomp(I, fun)

説明

qtdecomp は、正方形のイメージを同じサイズの 4 つの正方形ブロックに分割し、各ブロックをテストして、均一性の条件を満たしているかどうかを確認します。ブロックが条件を満たしている場合、それ以上の分割は行いません。条件を満たしていない場合、そのブロックをさらに 4 ブロックに分割し、それらのブロックにテスト条件を適用します。このプロセスを、各ブロックが条件を満たすまで繰り返します。この結果、それぞれ異なる大きさのブロックができます。

S = qtdecomp(I) は、強度イメージ I に対して四分木分割を行い、スパース行列 S に四分木構造を返します。S(k,m) がゼロ以外の場合、(k,m) は分解のブロックの左上隅になり、ブロックのサイズは S(k,m) によって指定されます。既定の設定では、qtdecomp は、ブロックのすべての要素が等しくない限り、ブロックを分割します。

S = qtdecomp(I, threshold) は、ブロック要素の最大値からブロック要素の最小値を引いた差が threshold よりも大きい場合にブロックを分割します。threshold は、I のクラスが uint8 または uint16 の場合でも 0 ~ 1 の値に指定されます。Iuint8 の場合、実際に使用するしきい値を決定するために、設定したしきい値に 255 が乗算されます。Iuint16 の場合は、設定したしきい値に 65535 が乗算されます。

S = qtdecomp(I, threshold, mindim) は、得られたブロックがしきい値の条件を満たしていない場合でも、mindim より小さなブロックを生成しません。

S = qtdecomp(I, threshold, [mindim maxdim]) は、mindim より小さなブロックや maxdim より大きなブロックを生成しません。maxdim より大きなブロックは、しきい値の条件が満たされていても分割されます。maxdim/mindim は 2 のべき乗でなければなりません。

S = qtdecomp(I, fun) は関数 fun を使用して、ブロックを分割するかどうかを決定します。qtdecomp は、m × m × k の配列にスタックされたサイズが mm 列の現在のすべてのブロックで関数 fun を呼び出します。ここで、kmm 列のブロックの数です。関数 funk 要素の論理ベクトルを返します。その値は、対応するブロックが分割される場合は 1 となり、それ以外は 0 となります。たとえば、k(3) が 0 の場合、3 番目の m × m のブロックは分割されません。fun は、関数ハンドルでなければなりません。

クラス サポート

関数を含まない構文では、入力イメージに logicaluint8uint16int16single または double のクラスを使用できます。関数が含まれている構文では、関数によってサポートされている任意のクラスを入力イメージに使用できます。出力行列は必ず sparse クラスになります。

すべて折りたたむ

小さいサンプル行列を作成します。

I = uint8([1 1 1 1 2 3 6 6;...
             1 1 2 1 4 5 6 8;...
             1 1 1 1 7 7 7 7;... 
             1 1 1 1 6 6 5 5;... 
             20 22 20 22 1 2 3 4;... 
             20 22 22 20 5 4 7 8;... 
             20 22 20 20 9 12 40 12;...
             20 22 20 20 13 14 15 16]);

四分木分割を実行して結果を表示します。

S = qtdecomp(I,.05);
disp(full(S));
     4     0     0     0     4     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     4     0     0     0     2     0     2     0
     0     0     0     0     0     0     0     0
     0     0     0     0     2     0     1     1
     0     0     0     0     0     0     1     1

イメージをワークスペースに読み取ります。

I = imread('liftingbody.png');

四分木分割を実行してブロック表現を Figure に表示します。

S = qtdecomp(I,.27);
blocks = repmat(uint8(0),size(S));

for dim = [512 256 128 64 32 16 8 4 2 1];    
  numblocks = length(find(S==dim));    
  if (numblocks > 0)        
    values = repmat(uint8(1),[dim dim numblocks]);
    values(2:dim,2:dim,:) = 0;
    blocks = qtsetblk(blocks,S,dim,values);
  end
end

blocks(end,1:end) = 1;
blocks(1:end,end) = 1;

imshow(I)

figure
imshow(blocks,[])

ヒント

qtdecomp は、128 × 128 や 512 × 512 といった 2 のべき乗の大きさをもつ正方形のイメージに適しています。このようなイメージは、ブロックの大きさが 1 × 1 になるまで分割できます。qtdecomp を 2 のべき乗数でない大きさのイメージに適用すると、ある時点で分割がそれ以上できなくなります。たとえば、イメージが 96 × 96 の場合、48 × 48 のサイズのブロックに分割でき、さらに 24 × 24、12 × 12、6 × 6、3 × 3 のサイズまで分割できます。3 × 3 より小さく分割することはできません。このイメージを処理するには、mindim を 3 (または 2 のべき乗の 3 倍) に設定しなければなりません。関数を含む構文を使用する場合、ブロックをそれ以上分割できない時点で、関数は 0 を返さなければなりません。

R2006a より前に導入

この情報は役に立ちましたか?