Main Content

qtdecomp

説明

S= qtdecomp(I)は、グレースケール イメージIに対して四分木分割を行い、スパース行列Sに四分木構造を返します。既定の設定では、qtdecompは、ブロックのすべての要素が等しくない限り、ブロックを分割します。

S= qtdecomp(I,threshold)は、ブロック要素の最大値からブロック要素の最小値を引いた差がthresholdよりも大きい場合にブロックを分割します。

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

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

S= qtdecomp(I,fun)は関数funを使用して、ブロックを分割するかどうかを決定します。

すべて折りたたむ

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

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));fordim = [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);endendblocks(end,1:end) = 1; blocks(1:end,end) = 1; imshow(I)

Figure contains an axes object. The axes object contains an object of type image.

figure imshow(blocks,[])

Figure contains an axes object. The axes object contains an object of type image.

入力引数

すべて折りたたむ

グレースケール イメージ。m 行 n 列の数値行列として指定します。関数ハンドルfunが含まれている構文では、関数によってサポートされている任意のクラスをイメージに使用できます。

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

ブロックの均一性のしきい値。[0, 1] の範囲内のスカラーとして指定します。

  • Iがクラスuint8である場合、qtdecompは、実際に使用するしきい値を決めるためにthresholdの値を 255 倍します。

  • Iがクラスuint8である場合、qtdecompは、実際に使用するしきい値を決めるためにthresholdの値を 65535 倍します。

最小ブロック サイズ。正の整数として指定します。mindimはイメージ サイズの因数でなければなりません。

最大ブロック サイズ。正の整数として指定します。maxdim/mindimは 2 のべき乗でなければなりません。

関数ハンドル。ハンドルとして指定します。この関数は、m x m x k の配列にスタックされたすべての m 行 m 列のブロックを入力として受け入れなければなりません。配列内の k はブロック数です。この関数は logical の k 要素ベクトルを返さなければなりません。その値は対応するブロックを分割する場合は1で、その他の場合は0です。たとえば、k(3)が0の場合、3 番目の m 行 m 列のブロックは分割されません。

関数ハンドルの詳細については、関数ハンドルの作成を参照してください。

出力引数

すべて折りたたむ

四分木構造。スパース行列として返されます。S(k,m)がゼロ以外の場合、(k,米)は分解のブロックの左上隅になり、ブロックのサイズはS(k,m)によって指定されます。

データ型:double

ヒント

  • 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 倍) に設定しなければなりません。関数funを含む構文を使用する場合、ブロックをそれ以上分割できない時点で、関数は0を返さなければなりません。

アルゴリズム

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

バージョン履歴

R2006a より前に導入