apply
(削除予定) bigimage オブジェクトのブロックの処理
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])

入力引数
大きなイメージ。bigimage オブジェクトとして指定します。
解像度レベル。bigimg の解像度レベル値以下の正の整数として指定します。
関数ハンドル。ハンドルとして指定します。詳細については、関数ハンドルの作成を参照してください。
関数入力
関数 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);
|
| Struct | 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);
|
大きな追加入力イメージ。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);
各バッチで処理関数 fun に指定されたブロック数。正の整数として指定します。BatchSize が 1 より大きい場合、PadPartialBlocks は true でなければなりません。
BatchSize が 1 より大きい場合、apply はブロックを numrows x numcols x channels x BatchSize の配列として指定します。apply が bigimage を返すようにするには、fun は同じサイズの配列を返さなければなりません。apply が cell 配列またはテーブルを返すようにするには、fun は長さが BatchSize でブロックごとに要素が 1 つある cell 配列を返さなければなりません。
ブロック サイズ。[numrows numcols] 形式の正の整数の 1 行 2 列ベクトルとして指定します。BlockSize を指定した場合、apply は、サイズが [numrows numcols] のブロックを処理関数 fun に渡します。apply はブロックのすべてのチャネルを fun に渡します。
境界サイズ。[numrows numcols] 形式の非負の整数の 1 行 2 列ベクトルとして指定します。関数は、numrows 行を各ブロックの上下に追加し、numcols 列を近傍ブロックからのデータと共に各ブロックの左右に追加します。イメージのエッジにあるブロックでは、データは PadMethod に従ってパディングされます。既定では、ブロックに境界は追加されません。
ウェイト バーの表示。true または false として指定します。true の場合、関数 apply は長時間かかる処理のウェイト バーを表示します。ウェイト バーを閉じた場合、apply は、利用可能であれば部分出力を返します。
データ型: logical
ブロック情報を含める。false または true として指定します。true の場合、apply は処理関数 fun への最後の入力として struct を含めます。この struct には、ブロックに関する空間参照情報を記述する、次のフィールドがあります。
| フィールド | 説明 |
|---|---|
BlockStartWorld | 境界やパディングを除く、ブロックの左上ピクセルの中心のワールド座標。 |
BlockEndWorld | 境界やパディングを除く、ブロックの右下ピクセルの中心のワールド座標。 |
DataStartWorld | 境界やパディングを含む、ブロックの左上ピクセルの中心のワールド座標。 |
DataEndWorld | 境界やパディングを含む、ブロックの右下ピクセルの中心のワールド座標。 |
BatchSize が 1 より大きい場合、struct の値は長さが BatchSize の配列です。
データ型: logical
マスク ブロックの包含しきい値。[0, 1] の範囲の数値として指定します。包含しきい値は、イメージ ブロックを処理するために必要な、マスク ブロック内の非ゼロ ピクセルの最小割合を示します。
包含しきい値が
0の場合、対応するマスク ブロック内の少なくとも 1 つのピクセルが非ゼロのときにapplyはブロックを処理します。包含しきい値が
1の場合、マスク ブロック内のすべてのピクセルが非ゼロのときにのみapplyはブロックを処理します。
マスク。サイズが bigimg と同じで ClassUnderlying プロパティ値が logical である bigimage オブジェクトとして指定します。
関数 apply は、マスクの非ゼロ ブロックと重なるブロックのみを処理します。InclusionThreshold も指定した場合、処理するブロックは、マスク ブロック内で最小限の割合の非ゼロ ピクセルと重なっていなければなりません。イメージ ブロックがマスク ブロックと十分に重なっている場合、apply は、イメージ ブロック全体を処理関数 fun に送信し、fun はブロック内のすべてのピクセルを処理します。fun はマスクに直接アクセスすることはできません。
イメージがマスクより粗い場合またはブロックのエッジがマスク ブロックと一致していない場合、入力ブロックは複数のマスク ブロックと重なる可能性があります。入力ブロックが複数のマスク ブロックと重なる場合、apply は、入力ブロックの中心と重なるマスクを選択します。
出力 bigimage を保存する場所。false または true として指定します。並列処理には Parallel Computing Toolbox™ が必要です。
並列処理の使用。false または true として指定します。並列処理には Parallel Computing Toolbox が必要です。
UseParallel を true に指定すると、MATLAB® は既定の並列設定に基づいて自動的に並列プールを開きます。apply は、使用可能なワーカー全体で bigimage ブロックを処理します。すべての入力 bigimage の DataSource プロパティは、それぞれの並列ワーカーに対して有効なパスでなければなりません。相対パスを使用する場合、ワーカーとクライアント処理が同じ作業ディレクトリ上にあることを確認してください。ワーカーがクライアント処理と同じファイル システムを共有していない場合、OutputFolder を指定します。
データ型: logical
出力引数
処理関数 fun の追加出力。次のいずれかとして返されます。fun が複数の出力引数を返す場合、apply は、それと同じ数またはそれより少ない数の出力引数を返す可能性があります。
値 | 発生 |
|---|---|
| 対応する 返される |
table | 対応する |
cell 配列 | 対応する |
アルゴリズム
apply は、最も効率的な順序で一度に 1 つのブロックのデータを処理関数 fun に渡して、すべてのデータを処理します (通常は行優先のブロック順序)。apply は各ブロックを 1 回だけ処理します。
多数の処理操作を実行するために apply を複数回呼び出すのは、すべてのデータを複数回処理しなければならないため、非効率的です。処理時間を最適化するには、複数の処理操作を実行するように fun を定義します。これにより、読み取りと書き込みのオーバーヘッドが最小化され、データ局所性が保証されます。粗い解像度レベルで作成したマスクを使用して、イメージの領域を処理から除外することにより、特定のレベルで処理時間をさらに短縮できます。
バージョン履歴
R2019b で導入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); |
bigimage オブジェクトの関数 apply は推奨されません。代わりに、blockedImage オブジェクトの関数 apply を使用してください。blockedImage オブジェクトには、N 次元の処理に拡張できる、インターフェイスがシンプルである、非標準イメージ形式の読み書きをカスタムでサポートしている、といったいくつかの利点があります。
参考
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)