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 が必要な場合に、この構文を使用します。

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

figure;
imshow(I2);

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

figure;
imshow(I2,[]);

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

figure;
imshow('grb_peppers.tif');

Figure contains an axes object. The axes object 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 は出力を生成せず、すべてのブロックを処理した後で空を返します。

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

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: B = blockproc(A,[m,n],fun,BorderSize=[8 4]) は、各ブロックの周りに 8 行 4 列の境界を作成します。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: B = blockproc(A,[m,n],fun,"BorderSize",[8 4]) は、各ブロックの周りに 8 行 4 列の境界を作成します。

出力の保存先。次のいずれかとして指定します。Destination 引数を指定した場合、blockproc は処理されたイメージを出力引数として返さず、その代わりに、出力を出力先ファイルに書き込みます。

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

    • TIFF (*.tif、*.tiff)

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

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

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

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

メモ

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

各ブロックに追加する境界ピクセルの数。正の整数の 2 要素のベクトルを [v h] の形式で指定します。関数は、v 行を各ブロックの上下に追加し、h 列を各ブロックの左右に追加します。得られる各ブロックのサイズは、次のとおりです。

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

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

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

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

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

イメージ境界をパディングするために使用する方法。次のいずれかとして指定します。

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

データ型: char | string

ユーザー関数の出力からの境界ピクセルの削除。true または false として指定します。true に設定すると、関数 blockproc は、境界ピクセルをユーザー関数 fun の出力から削除します。関数は、v 行を fun の出力の上下から削除し、h 列を左右端から削除します。BorderSize 引数は、vh を定義します。

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

ウェイト バーの表示。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 で導入