ドキュメンテーション

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

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 を提供するユーザー定義のクラスです。詳細は、「サポートされない形式のデータに対する 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'

出力先。文字ベクトルまたは ImageAdapter オブジェクトとして指定します。文字ベクトルは TIFF ファイルの名前で、ファイル拡張子 '.tif' を含まなければなりません。この名前のファイルが存在する場合は上書きされます。ImageAdapters によって、任意のイメージ ファイル形式への読み書き用インターフェイスが提供されます。

'Destination' パラメーターは、出力が大きすぎてメモリ内に入らない場合に役立ちます。任意の大きなイメージの場合のファイルからファイルへの画像処理のワークフローを与えます。'Destination' パラメーターを指定しても、blockproc は処理されたイメージを出力引数として返しません。その代わり、出力を 'Destination' に書き込みます ('Destination' パラメーターが指定されている場合は、出力引数を要求できません)。

'PadPartialBlocks'

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

既定値: false

'PadMethod'

イメージの境界のパディングに使用するメソッド。次の値のいずれかとして指定します。'PadMethod' は、blockproc がイメージの境界をどのようにパディングするかを決定します。オプションは以下のものがあります。

説明
'replicate'境界要素を繰り返します。
'symmetric'イメージをそれ自体の鏡像でパディングします。
Xイメージをスカラー値 (X) でパディングします。既定の設定では、X == 0 です。

'TrimBorder'

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

既定値: true

'UseParallel'

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

既定値: false

'DisplayWaitbar'

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

既定値: true

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

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

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

出力引数

B

出力行列。

すべて折りたたむ

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

I = imread('pears.png');

ブロック処理関数を作成します。

fun = @(block_struct) imresize(block_struct.data,0.15);

ブロック単位でイメージを処理します。

I2 = blockproc(I,[100 100],fun);

元のイメージと処理後のイメージを表示します。

figure;
imshow(I);

figure;
imshow(I2);

ブロック処理関数を作成します。

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,[]);

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

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');

メモ: この例を実行するには、'largeImage.tif' を任意のファイル名に置き換えなければなりません。

ブロック処理関数を作成します。

fun = @(block_struct) block_struct.data;

TIFF イメージを新規 JPEG2000 イメージに変換します。'largeImage.tif' を実際のイメージ ファイル名に置き換えます。

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

詳細

すべて折りたたむ

ブロック構造体

"ブロック構造体" は、ブロック データなどのブロックに関する情報を含む MATLAB 構造体です。"ブロック構造体" のフィールドは次のとおりです。

  • block_struct.border: データ ブロックの周りの縦と横のパディングのサイズを指定する 2 要素ベクトル [V H] (入力セクションの 'BorderSize' パラメーターを参照してください)。

  • block_struct.blockSize: ブロック データのサイズを指定する 2 要素ベクトル [rows cols]。境界が指定されている場合、境界のピクセルはサイズに含まれません。

  • block_struct.data: ブロック データの行列 M 行 N 列または M × N × P

  • block_struct.imageSize: フルサイズの入力イメージを指定する 2 要素ベクトル [rows cols]

  • block_struct.location: 入力イメージ内のブロック データの最初のピクセル (最小行、最小列) の位置を指定する 2 要素ベクトル [row col]。境界が指定されている場合、位置は、追加された境界のピクセルではなく、離散ブロック データの最初のピクセルのことです。

R2009b で導入

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