apply
bigimage
オブジェクトの関数 apply
は将来のリリースで削除される予定です。代わりに、blockedImage
オブジェクトに関連付けられた関数 apply
を使用してください。詳細については、互換性の考慮事項を参照してください。
構文
説明
は、大きなイメージ newbig
= apply(bigimg
,level
,fun
,extraImages
)bigimg
と 1 つ以上の追加の大きなイメージ extraImages
のすべてのブロックを処理します。関数 fun
がイメージとマスクなどの複数のイメージ入力を受け入れる場合は、この構文を使用します。
は、名前と値の引数を使用して、データの並列処理やイメージのエッジでのブロックのパディングなど処理の諸側面を制御します。newbig
= apply(___,Name,Value
)
例
大きなイメージへのフィルターの適用
CAMELYON16 データセットのイメージ "tumor_091.tif" の変更したバージョンを使用して bigimage
を作成します。元のイメージは、腫瘍組織が含まれるリンパ節の学習イメージです。元のイメージには 8 つの解像度レベルがあり、最も細かいレベルの解像度は 53760 x 61440 です。変更したイメージには、3 つの粗い解像度レベルのみが含まれています。変更したイメージの空間参照は、縦横比が一定に維持され、各レベルで特徴がレジストレーションされるように調整されています。
bim = bigimage('tumor_091R.tif');
最も細かい解像度レベル 1 でエッジ保存型非局所平均フィルターを各ブロックに適用して、イメージ内の構造を強調します。この例では、関数 apply
は、入力 bigimage
の各ブロックに対して以下の操作を実行します。
ブロックを L*a*b* 色空間に変換します。
imnlmfilt
を使用してブロックをフィルター処理します。ブロックを RGB 色空間に変換し直します。
関数 apply
は出力ブロックを再結合し、新しい bigimage
を作成します。
bim_enhanced = apply(bim,1, ... @(block)lab2rgb(imnlmfilt(rgb2lab(block),'DegreeOfSmoothing',15)));
関数 bigimageshow
を使用して、Figure ウィンドウの左側に元のイメージを表示します。
figure ha1 = subplot(1,2,1); bigimageshow(bim,'ResolutionLevel',1); title("Original Image")
Figure ウィンドウの右側に強調されたイメージを表示します。
ha2 = subplot(1,2,2);
bigimageshow(bim_enhanced);
title("Enhanced Image")
両方の表示の範囲が同じであることを確認し、特徴を拡大します。
linkaxes([ha1,ha2]); xlim([1600,2300]) ylim([1900,2600])
入力引数
bigimg
— 大きなイメージ
bigimage
オブジェクト
大きなイメージ。bigimage
オブジェクトとして指定します。
level
— 解像度レベル
正の整数
解像度レベル。bigimg
の解像度レベル値以下の正の整数として指定します。
fun
— 関数ハンドル
ハンドル
関数ハンドル。ハンドルとして指定します。詳細については、関数ハンドルの作成を参照してください。
関数入力
関数 fun
は入力として少なくとも 1 つのブロックを受け入れなければなりません。
オプションで、この関数はブロック以外の追加入力を受け入れることができます。ブロック以外の入力を指定して処理を実行するには、関数 apply
を呼び出し、無名関数として fun
を指定しなければなりません。詳細については、無名関数を参照してください。
fun
へのさまざまな種類の入力に対するサンプル関数シグネチャを次の表に示します。また、この表は apply
を呼び出すときに使用するサンプル構文も示しています。
入力タイプ | 関数シグネチャ | apply を呼び出す例 |
---|---|---|
単一のブロック | function outblock = myfun(inblock) ... end | newbig = apply(bigimg,level,@myfun); |
2 つのブロック | function outblock = myfun(inblock1,inblock2) ... end | 関数 newbig = apply(bigimg,level,@myfun,otherbig); |
1 つのブロックと 1 つの非ブロック | function outblock = myfun(inblock,nonblock) ... end | この例では、スカラー値 c = 37; mynewbig = apply(mybigimg,level,@(x) myfun(x,c)); |
関数出力
通常、関数 fun
は、入力ブロックと同じサイズのイメージ ブロックを 1 つ以上返します。この場合、apply
はブロックを再結合し、bigimage
を返します。apply
の BorderSize
引数を指定し、bigimage
の出力が必要な場合、apply
は出力ブロックから境界をトリミングします。fun
の中でブロックを直接トリミングすることもできます。
上の表の例はすべて、単一のブロックを返す関数シグネチャを示しています。ただし、関数 fun
は、struct または他のイメージ以外の出力を返すこともできます。
fun
のさまざまな種類の出力に対するサンプル関数シグネチャを次の表に示します。また、この表は apply
を呼び出すときに使用するサンプル構文も示しています。
出力タイプ | サンプル処理関数 | apply を呼び出す例 |
---|---|---|
入力ブロックと同じサイズのブロック | function sameSizedBlock = myfun(inblock) sameSizedBlock = imgaussfilt(inblock); end | bigimageOutput = apply(bigimg,level,@myfun);
|
入力ブロックと同じサイズの複数のブロック | function [sameSizedBlock,maskBlock] = myfun(inblock) sameSizedBlock = rgb2lightness(inblock); maskBlock = imbinarize(sameSizedBlock); end | [bigimageOutput1,bigimageOutput2] = apply(bigimgRGB,level,@myfun);
|
イメージ以外 | function nonimageOutput = myfun(inblock) nonimageOutput = mean(inblock(:)) end |
cellArrayOutput = apply(bigimg,level,@myfun);
|
構造体 | function structOutput = myfun(inblock) structOutput.num = numel(inblock); structOutput.mean = mean(inblock(:)); structOutput.max = max(inblock(:)); end | tableOutput = apply(mybigimg,level,@myfun); tableOutput は、4 つの変数 num 、mean 、max 、および BlockOrigin を持つ table です。BlockOrigin 変数は、各ブロックの (x,y) 原点を 1 行 2 列のベクトルとして指定します。 |
複数出力 | function [out1,out2,out3,out4,out5] = myfun(inblock) % non-image output out1 = min(inblock(:)); % image output of same size as input block out2 = imgaussfilt(out2); out3 = imbinarize(inblock); % struct output out4.originalMean = mean(inblock(:)); out4.filteredMean = mean(out2(:)); out4.fractionTrue = sum(out3(:))/numel(out3); % non-image output out5 = out4.fractionTrue; end |
[c1,b2,b3,t4] = apply(mybigimg,level,@myfun);
|
extraImages
— 大きな追加入力イメージ
bigimage
オブジェクトのベクトル
大きな追加入力イメージ。bigimage
オブジェクトのベクトルとして指定します。それぞれの大きなイメージの空間範囲は bigimg
と同じでなければなりませんが、ブロックのサイズは同じである必要はありません。それぞれの大きなイメージで ClassUnderlying および Channels プロパティの値が異なる可能性があります。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: newbig = apply(bigimg,level,@myfun,UseParallel=true);
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name
を引用符で囲みます。
例: newbig = apply(bigimg,level,@myfun,"UseParallel",true);
BatchSize
— fun
に指定されたブロック数
1
(既定値) | 正の整数
各バッチで処理関数 fun
に指定されたブロック数。正の整数として指定します。BatchSize
が 1 より大きい場合、PadPartialBlocks
は true
でなければなりません。
BatchSize
が 1 より大きい場合、apply
はブロックを numrows
x numcols
x channels
x BatchSize
の配列として指定します。apply
が bigimage
を返すようにするには、fun
は同じサイズの配列を返さなければなりません。apply
が cell 配列またはテーブルを返すようにするには、fun
は長さが BatchSize
でブロックごとに要素が 1 つある cell 配列を返さなければなりません。
BlockSize
— ブロック サイズ
正の整数の 1 行 2 列のベクトル
ブロック サイズ。[numrows numcols]
形式の正の整数の 1 行 2 列ベクトルとして指定します。BlockSize
を指定した場合、apply
は、サイズが [numrows numcols]
のブロックを処理関数 fun
に渡します。apply
はブロックのすべてのチャネルを fun
に渡します。
BorderSize
— 境界サイズ
[0 0]
(既定値) | 非負の整数の 1 行 2 列のベクトル
境界サイズ。[numrows numcols]
形式の非負の整数の 1 行 2 列ベクトルとして指定します。関数は、numrows
行を各ブロックの上下に追加し、numcols
列を近傍ブロックからのデータと共に各ブロックの左右に追加します。イメージのエッジにあるブロックでは、データは PadMethod
に従ってパディングされます。既定では、ブロックに境界は追加されません。
DisplayWaitbar
— ウェイト バー表示
true
(既定値) | false
ウェイト バーの表示。true
または false
として指定します。true
の場合、関数 apply
は長時間かかる処理のウェイト バーを表示します。ウェイト バーを閉じた場合、apply
は、利用可能であれば部分出力を返します。
データ型: logical
IncludeBlockInfo
— ブロック情報を含める
false
(既定値) | true
ブロック情報を含める。false
または true
として指定します。true
の場合、apply
は処理関数 fun
への最後の入力として構造体を含めます。この構造体には、ブロックに関する空間参照情報を記述する、次のフィールドがあります。
フィールド | 説明 |
---|---|
BlockStartWorld | 境界やパディングを除く、ブロックの左上ピクセルの中心のワールド座標。 |
BlockEndWorld | 境界やパディングを除く、ブロックの右下ピクセルの中心のワールド座標。 |
DataStartWorld | 境界やパディングを含む、ブロックの左上ピクセルの中心のワールド座標。 |
DataEndWorld | 境界やパディングを含む、ブロックの右下ピクセルの中心のワールド座標。 |
BatchSize
が 1 より大きい場合、構造体の値は長さが BatchSize
の配列です。
データ型: logical
InclusionThreshold
— 包含しきい値
0.5
(既定値) | 範囲 [0, 1] の数値
マスク ブロックの包含しきい値。[0, 1] の範囲の数値として指定します。包含しきい値は、イメージ ブロックを処理するために必要な、マスク ブロック内の非ゼロ ピクセルの最小割合を示します。
包含しきい値が
0
の場合、対応するマスク ブロック内の少なくとも 1 つのピクセルが非ゼロのときにapply
はブロックを処理します。包含しきい値が
1
の場合、マスク ブロック内のすべてのピクセルが非ゼロのときにのみapply
はブロックを処理します。
Mask
— マスク
[]
(既定値) | 単一解像度の bigimage
オブジェクト
マスク。サイズが bigimg
と同じで ClassUnderlying
プロパティ値が logical
である bigimage
オブジェクトとして指定します。
関数 apply
は、マスクの非ゼロ ブロックと重なるブロックのみを処理します。InclusionThreshold
も指定した場合、処理するブロックは、マスク ブロック内で最小限の割合の非ゼロ ピクセルと重なっていなければなりません。イメージ ブロックがマスク ブロックと十分に重なっている場合、apply
は、イメージ ブロック全体を処理関数 fun
に送信し、fun
はブロック内のすべてのピクセルを処理します。fun
はマスクに直接アクセスすることはできません。
イメージがマスクより粗い場合またはブロックのエッジがマスク ブロックと一致していない場合、入力ブロックは複数のマスク ブロックと重なる可能性があります。入力ブロックが複数のマスク ブロックと重なる場合、apply
は、入力ブロックの中心と重なるマスクを選択します。
OutputFolder
— 出力 bigimage
を保存する場所
文字ベクトル
出力 bigimage
を保存する場所。false
または true
として指定します。並列処理には Parallel Computing Toolbox™ が必要です。
PadMethod
— パディング方法
数値スカラー | string スカラー | 'replicate'
| 'symmetric'
UseParallel
— 並列処理の使用
false
(既定値) | true
並列処理の使用。false
または true
として指定します。並列処理には Parallel Computing Toolbox が必要です。
UseParallel
を true
に指定すると、MATLAB® は既定の並列設定に基づいて自動的に並列プールを開きます。apply
は、使用可能なワーカー全体で bigimage
ブロックを処理します。すべての入力 bigimage
の DataSource
プロパティは、それぞれの並列ワーカーに対して有効なパスでなければなりません。相対パスを使用する場合、ワーカーとクライアント処理が同じ作業ディレクトリ上にあることを確認してください。ワーカーがクライアント処理と同じファイル システムを共有していない場合、OutputFolder
を指定します。
データ型: logical
出力引数
other
— 追加の出力
bigimage
オブジェクト | table | cell 配列
処理関数 fun
の追加出力。次のいずれかとして返されます。fun
が複数の出力引数を返す場合、apply
は、それと同じ数またはそれより少ない数の出力引数を返す可能性があります。
値 | 発生 |
---|---|
| 対応する 返される |
table | 対応する |
cell 配列 | 対応する |
アルゴリズム
apply
は、最も効率的な順序で一度に 1 つのブロックのデータを処理関数 fun
に渡して、すべてのデータを処理します (通常は行優先のブロック順序)。apply
は各ブロックを 1 回だけ処理します。
多数の処理操作を実行するために apply
を複数回呼び出すのは、すべてのデータを複数回処理しなければならないため、非効率的です。処理時間を最適化するには、複数の処理操作を実行するように fun
を定義します。これにより、読み取りと書き込みのオーバーヘッドが最小化され、データ局所性が保証されます。粗い解像度レベルで作成したマスクを使用して、イメージの領域を処理から除外することにより、特定のレベルで処理時間をさらに短縮できます。
バージョン履歴
R2019b で導入R2023b: apply
は削除予定
bigimage
オブジェクトとこの関数は将来のリリースで削除される予定です。代わりに、blockedImage
オブジェクトの関数 apply
を使用してください。
コードを更新するには、まず、イメージ データを読み取るための blockedImage
オブジェクトを作成します。次に、関数 apply
の呼び出しで以下のようにします。
最初の入力引数を
blockedImage
オブジェクトに置き換えます。2 番目の入力引数を削除します。既定では、
blockedImage
の関数apply
は、最も細かい解像度レベルで操作をfun
内で適用します。レベル 1 以外の解像度レベルで操作を実行するには、名前と値の引数Level
を追加してそのレベルを指定します。関数ハンドル
fun
を更新します。blockedImage
の関数apply
は、常に構造体をfun
に渡します。イメージ データにアクセスするには、Data
フィールドを使用します。
blockedImage
オブジェクトの関数 apply
は、bigimage
の関数 apply
とは異なる名前と値の引数をサポートしています。たとえば、マスクを指定するには、最初に関数 selectBlockLocations
を使用してブロックを選択してから、名前と値の引数 Mask
の代わりに名前と値の引数 BlockLocationSet
を使用してそれらのブロックを指定します。
非推奨の使用方法 | 推奨される代替案 |
---|---|
この例では、関数
filename = "tumor_091R.tif";
bim = bigimage(filename);
bim_enhanced = apply(bim,1,@(block)im2gray(block)); | 以下は、 filename = "tumor_091R.tif";
bim = blockedImage(filename);
bim_enhanced = apply(bim,@(block)im2gray(block.Data)); |
この例は、同じ操作を 2 番目の解像度レベルで実行します。 bim_enhanced2 = apply(bim,2,@(block)im2gray(block)); | 以下は bim_enhanced2 = apply(bim,@(block)im2gray(block.Data),Level=2); |
R2021a: 関数 apply
は非推奨
bigimage
オブジェクトの関数 apply
は推奨されません。代わりに、blockedImage
オブジェクトの関数 apply
を使用してください。blockedImage
オブジェクトには、N 次元の処理に拡張できる、インターフェイスがシンプルである、非標準イメージ形式の読み書きをカスタムでサポートしている、といったいくつかの利点があります。
参考
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)