ドキュメンテーション

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

blockproc

イメージの個別ブロック処理

構文

B = blockproc(A,blockSize,fun)
B = blockproc(src_filename,blockSize,fun)
B = blockproc(adapter,blockSize,fun)
blockproc(___,Name,Value,...)

説明

B = blockproc(A,blockSize,fun) は、イメージ A のそれぞれの個別ブロックに関数 fun を適用してその結果を出力行列 B に連結することにより、イメージ A を処理します。blockSize はブロックのサイズを指定する 2 要素のベクトル [rows cols] です。fun は "ブロック構造体" を入力として受け入れ、行列、ベクトルまたはスカラーの Y を返す関数のハンドルです。たとえば、Y = fun(block_struct) です ("ブロックの構造体" の詳細は、次の節、「定義」を参照)。入力イメージ A の各データ ブロックの場合、blockproc は、"ブロックの構造体" 内のブロックをユーザー関数 fun に渡し、出力イメージ内の対応するブロックである Y を生成します。Y が空の場合、blockproc は出力を生成せず、すべてのブロックを処理した後で空を返します。適切なブロックサイズを選択すると、パフォーマンスが著しく高まります。詳細は、「ブロック サイズの選択」を参照してください。関数ハンドルの詳細については、「関数ハンドルの作成」 (MATLAB)を参照してください。

B = blockproc(src_filename,blockSize,fun) は、一度に 1 つのブロックを読み取って処理し、イメージ src_filename を処理します。この構文は、1 回にメモリに読み取られるイメージ ブロックは 1 つのみなので、非常に大きいイメージの処理に役立ちます。出力行列 B が大きすぎてメモリに入らない場合、出力引数を省略し、その代わりに 'Destination' パラメーターと値の組み合わせを使用して出力をファイルへ書き込むことができます。

B = blockproc(adapter,blockSize,fun) は、adapterImageAdapter オブジェクトにより指定されるソース イメージを処理します。ImageAdapter は、特定のイメージ ファイル形式に対して読み書きを行う一般的な API と共に blockproc を提供するユーザー定義のクラスです。詳細は、Image Processing Toolbox™ ドキュメンテーションの「サポートされない形式のデータに対する blockproc を使用した読み取りと書き込み」を参照してください。

blockproc(___,Name,Value,...) は、ブロックの動作のさまざまな特性を制御するパラメーターと対応する値を指定することにより、入力イメージを処理します。パラメーター名は、大文字と小文字を区別しません。

入力引数

A

入力イメージ。

blockSize

ブロックのサイズ。2 要素のベクトル [rows cols] として指定します。

fun

"ブロックの構造体" を入力として受け入れ、行列、ベクトル、スカラーを返す関数の関数ハンドル。

src_filename

入力イメージ。

adapter

特定のイメージ ファイル形式に対して読み書きを行う一般的な API と共に blockproc を提供するユーザー定義のクラス。

名前/値のペアの引数

オプションの Name,Value 引数のペアをコンマ区切りで指定します。ここで、Name は引数名で、Value は対応する値です。Name は単一引用符 (' ') で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順番で指定できます。

'BorderSize'

各ブロックに追加する境界のピクセルの量を指定する 2 要素ベクトル [V H]。関数は、V 行を各ブロックの上下に追加し、H 列を各ブロックの左右に追加します。得られる各ブロックのサイズは、次のようになります。

[M + 2*V, N + 2*H]
既定の設定では、関数は境界を fun の結果から自動的に削除します。詳細は、'TrimBorder' パラメーターを参照してください。この関数は、イメージからはみ出した部分を 0 で拡張してブロックの境界をパディングします。

既定値: [0 0] (境界なし)

'Destination'

blockproc の出力先。'Destination' パラメーターを指定しても、blockproc は処理されたイメージを出力引数として返しません。その代わり、出力を 'Destination' に書き込みます ('Destination' パラメーターが指定されている場合は、出力引数を要求できません)。

有効な 'Destination' パラメーターは、以下のとおりです。

  • TIFF ファイル名: '.tif' で終わる文字ベクトル。この名前のファイルが既に存在する場合、既存のファイルは上書きされます。

  • ImageAdapter オブジェクト: ImageAdapter クラスのインスタンス。ImageAdapters によって、任意のイメージ ファイル形式への読み書き用インターフェイスが提供されます。

'Destination' パラメーターは、出力が大きすぎて実際にメモリ内に入らない場合に役立ちます。任意の大きなイメージの場合のファイルからファイルへの画像処理のワークフローを与えます。

'PadPartialBlocks'

論理スカラー。true に設定すると、blockproc は、部分ブロックをパディングして、フルサイズの (M 行 N 列) ブロックにします。部分ブロックは、イメージのサイズがブロックのサイズで完全に割り切れない場合に生じます。それらが存在する場合、部分ブロックはイメージの右下端に沿った場所にあります。既定の設定は false です。つまり、この関数は部分ブロックをパディングせずに、そのまま処理します。blockproc は、必要に応じて、ゼロを使用して部分ブロックをパディングします。

既定値: false

'PadMethod'

'PadMethod' は、blockproc がイメージの境界にどのようにパディングするかを決定します。オプションは以下のものがあります。

  • X: イメージをスカラー (X) のパディング値でパディングします。既定の設定では、X == 0 です。

  • 'replicate': イメージ A の境界要素を繰り返します。

  • 'symmetric': イメージ A をそれ自体の鏡像でパディングします。

'TrimBorder'

論理スカラー。true に設定すると、関数 blockproc は、境界のピクセルをユーザー関数 fun の出力から削除します。関数は、V 行を fun の出力の上下から削除し、H 列を左右端から削除します。'BorderSize' パラメーターは、VH を定義します。既定の設定は、true、つまり、関数 blockprocfun 出力から境界を自動的に削除します。

既定値: true

'UseParallel'

論理スカラー。画像処理のこのモードを有効にするには Parallel Computing Toolbox™ が必要です。true に設定すると、blockproc は、並列モードで実行を試み、開いている MATLAB プール内の複数のワーカー (MATLAB® セッション) 全体に処理を分配します。並列モードでは、入力イメージを ImageAdapter オブジェクトにすることはできません。並列環境の構成についての詳細は、parpool のドキュメンテーションを参照してください。

既定値: false

'DisplayWaitbar'

論理スカラー。true に設定すると、blockproc は長時間かかる処理の進行状況を示すウエイトバーを表示します。blockproc のウエイトバーを非表示にするには、DisplayWaitbarfalse に設定します。

既定値: true

サポートされているファイル形式: blockproc の入出力ファイル (src_filename'Destination' パラメーターにより指定) は、次のファイル タイプのいずれかでなければなりません。また、一覧のファイル拡張子の 1 つで名前が付けられていなければなりません。

  • 読み書きファイル形式: TIFF (*.tif, *.tiff)、JPEG2000 (*.jp2, *.j2c, *.j2k)

  • 読み取り専用ファイル形式: JPEG2000 (*.jpf, *.jpx)

出力引数

B

出力行列。

イメージのサムネイルの生成は、次のとおりです。

fun = @(block_struct) imresize(block_struct.data,0.15);
I = imread('pears.png');
I2 = blockproc(I,[100 100],fun);
figure;
imshow(I);
figure;
imshow(I2);

32 行 32 列の各ブロック内のピクセルを、そのブロック内の要素の標準偏差に設定します。

fun = @(block_struct) ...
   std2(block_struct.data) * ones(size(block_struct.data));
I2 = blockproc('moon.tif',[32 32],fun);
figure;
imshow('moon.tif');
figure;
imshow(I2,[]);

RGB イメージの赤と緑の帯域を交換し、結果を新規 TIFF ファイルに書き込みます。

I = imread('peppers.png');
fun = @(block_struct) block_struct.data(:,:,[2 1 3]);
blockproc(I,[200 200],fun,'Destination','grb_peppers.tif');
figure;
imshow('peppers.png');
figure;
imshow('grb_peppers.tif');

TIFF イメージを新規 JPEG2000 イメージに変換します。以下の例の 'largeImage.tif' をユーザーのファイル名で置き換えます。

fun = @(block_struct) block_struct.data;
blockproc('largeImage.tif',[1024 1024],fun,...
   'Destination','New.jp2');

R2009b で導入

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