Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

blockproc

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

説明

B = blockproc(A,[m n],fun) は、関数 fun をサイズ [m n] のそれぞれのブロックに適用し、その結果を出力イメージ B に連結することによって、イメージ A を処理します。

B = blockproc(src_filename,[m n],fun) は、ファイル名が src_filename のイメージを対象に、一度に 1 つのブロックを読み取って、処理します。この構文は、大きいイメージを処理するために役立ちます。

B = blockproc(adapter,[m n],fun) は、adapterImageAdapter オブジェクトにより指定されるソース イメージを処理します。特定のイメージ ファイル形式に対して読み書きを行うカスタム API が必要な場合に、この構文を使用します。

blockproc(___,Name,Value) は、ブロックの動作のさまざまな特性を制御する名前と値のペアの引数を使用します。

すべて折りたたむ

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

I = imread('pears.png');

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

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

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

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

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

figure;
imshow(I);

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

figure;
imshow(I2);

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

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

fun = @(block_struct) ...
   std2(block_struct.data) * ones(size(block_struct.data));

入力イメージをファイル名で指定して、ブロック処理演算を実行します。

I2 = blockproc('moon.tif',[32 32],fun);

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

figure;
imshow('moon.tif');

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

figure;
imshow(I2,[]);

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

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

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 contains an axes. The axes contains an object of type image.

figure;
imshow('grb_peppers.tif');

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

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

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

fun = @(block_struct) block_struct.data;

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

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

入力引数

すべて折りたたむ

処理するイメージ。数値配列として指定します。

ソース ファイル名。文字ベクトルまたは string スカラーとして指定します。ファイルは次のファイル タイプのいずれかで、ファイル名は次のファイル拡張子のいずれかが付いたものでなければなりません。

  • TIFF (*.tif、*.tiff)

  • JPEG2000 (*.jp2、*.jpf、*.jpx、*.j2c、*.j2k)

データ型: char | string

イメージ アダプター。ImageAdapter オブジェクトとして指定します。ImageAdapter は、特定のイメージ ファイル形式に対して読み書きを行う一般的な API と共に blockproc を提供するユーザー定義のクラスです。詳細については、サポートされない形式のイメージ ファイルに対するブロック処理の実行を参照してください。

ブロックのサイズ。2 要素ベクトルとして指定します。ここで、m はブロックの行数で、n は列数です。

関数ハンドル。ハンドルとして指定します。関数は block_struct を入力として受け入れ、配列、ベクトル、スカラーのいずれかを返さなければなりません。fun が空を返す場合、blockproc は出力を生成せず、すべてのブロックを処理した後で空を返します。

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

名前と値のペアの引数

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

例: 'BorderSize',[8 4]

出力先。'Destination' と次のいずれかで構成されるコンマ区切りのペアとして指定します。'Destination' 引数を指定しても、blockproc は処理されたイメージを出力引数として返しません。その代わり、出力を出力先ファイルに書き込みます。

  • 出力先ファイル名の文字ベクトルまたは string スカラー。ファイルは次のファイル タイプのいずれかで、ファイル名は次のファイル拡張子のいずれかが付いたものでなければなりません。

    • TIFF (*.tif、*.tiff)

    • JPEG2000 (*.jp2、*.j2c、*.j2k)

    この名前のファイルが存在する場合、既存のファイルは上書きされます。

  • ImageAdapter オブジェクト。特定のイメージ ファイル形式に対して読み書きを行う共通 API を提供します。詳細については、サポートされない形式のイメージ ファイルに対するブロック処理の実行を参照してください。

'Destination' 引数は、出力が大きすぎてメモリ内に入らないと考えられる場合に役立ちます。任意の大きなイメージの場合のファイルからファイルへのイメージ処理のワークフローを与えます。

メモ

引数 'Destination' が指定されている場合は、出力引数を要求できません。

各ブロックに追加する境界ピクセル数。'BorderSize' と正の整数の 2 要素のベクトル [v h] で構成されるコンマ区切りのペアとして指定します。関数は、v 行を各ブロックの上下に追加し、h 列を各ブロックの左右に追加します。得られる各ブロックのサイズは、次のとおりです。

[m+2*v, n+2*h]

既定の設定では、関数は境界を fun の結果から自動的に削除します。詳細については、「引数 TrimBorder」を参照してください。

この関数は、イメージからはみ出した部分を 0 で拡張してブロックの境界をパディングします。

フルサイズにするための部分ブロックのパディング。'PadPartialBlocks'false または true で構成されるコンマ区切りのペアとして指定します。部分ブロックは、イメージのサイズがブロックのサイズで完全に割り切れない場合に生じます。それらが存在する場合、部分ブロックはイメージの右下端に沿った場所にあります。

true に設定すると、blockproc は、部分ブロックをパディングして、フルサイズの mn 列のブロックにします。既定の設定は false です。つまり、この関数は部分ブロックをパディングせずに、そのまま処理します。blockproc は、必要に応じて、ゼロを使用して部分ブロックをパディングします。

イメージ境界をパディングするために使用する方法。'PadMethod' と次のいずれかから構成されるコンマ区切りのペアとして指定します。

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

データ型: char | string

ユーザー関数の出力からの境界ピクセルの削除。'TrimBorder'true または false から構成されるコンマ区切りのペアとして指定します。true に設定すると、関数 blockproc は、境界ピクセルをユーザー関数 fun の出力から削除します。関数は、v 行を fun の出力の上下から削除し、h 列を左右端から削除します。BorderSize 引数は、vh を定義します。

並列処理の使用。'UseParallel'false または true から構成されるコンマ区切りのペアとして指定します。Parallel Computing Toolbox™ をインストールしている場合、true に設定すると、MATLAB® はローカル マシン上のワーカーの並列プールを自動的に開きます。blockproc は使用可能なワーカー全体で計算を実行します。詳細については、大きいイメージ ファイルに対するパラレル ブロック処理を参照してください。

ウェイト バー表示。'DisplayWaitbar'true または false から構成されるコンマ区切りのペアとして指定します。true に設定すると、blockproc は長時間かかる処理の進行状況を示すウェイト バーを表示します。blockproc のウェイト バーを非表示にするには、DisplayWaitbarfalse に設定します。

出力引数

すべて折りたたむ

処理されたイメージ。数値配列として返されます。

詳細

すべて折りたたむ

ブロック構造体

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

フィールド説明
border[v h] 形式の 2 要素ベクトル。border フィールドはデータ ブロックの周りの縦と横のパディングのサイズを指定します。詳細については、「引数 BorderSize」を参照してください。
blockSize[rows cols] 形式の 2 要素ベクトル。blockSize フィールドは、ブロック データのサイズを指定します。境界が指定されている場合、境界のピクセルはサイズに含まれません。
datamn 列または m x n x p のブロック データの配列。
imageSize[rows cols] 形式の 2 要素ベクトル。imageSize は、入力イメージのフル サイズを指定します。
location[row col] 形式の 2 要素ベクトル。location フィールドは、入力イメージにあるブロック データの最初のピクセル (最小行、最小列) の位置を指定します。境界が指定されている場合、位置は、追加された境界のピクセルではなく、離散ブロック データの最初のピクセルのことです。

ヒント

  • 適切なブロックサイズを選択すると、パフォーマンスが著しく高まります。詳細については、ブロックのサイズとパフォーマンスを参照してください。

  • 出力イメージ B が大きすぎてメモリに入らない場合、出力引数を省略し、その代わりに名前と値のペア引数 Destination を使用して出力をファイルへ書き込むことができます。

  • blockproc は BigTIFF イメージを読み取ることができますが、BigTIFF イメージのファイルへの書き込みはサポートに制限があります。イメージをファイルに書き込む場合は、blockproc がファイルのサイズに応じて自動的にファイル タイプを選択します。イメージが 4.0 GB 以下の場合、blockproc はイメージを標準の TIFF イメージとして保存します。ファイルのサイズが 4.0 GB より大きい場合、blockproc はそのイメージを BigTIFF イメージとして保存します。

    blockproc には、ファイル サイズが 4.0 GB 以下の場合にファイル タイプを BigTIFF として指定できる引数がありません。小さいイメージを BigTIFF ファイルに書き込みたい場合は、引数 adapter を使用してカスタム イメージ アダプターを指定します。詳細については、TIFF, BigTIFF, and blockproc を参照してください。

  • 書き込まれた TIFF ファイルが標準の TIFF か BigTIFF かを判断するには、関数 imfinfo を使用してイメージ形式シグネチャをクエリします。

    tiffinfo = imfinfo(Destination);
    tiffformat = tiffinfo.FormatSignature

    tiffformat の最後の非ゼロ値が 42 の場合、ファイルは標準の TIFF 形式です。最後の非ゼロ値が 43 の場合、ファイルは BigTIFF 形式です。

拡張機能

R2009b で導入