Main Content

getBlock

(削除予定) bigimage オブジェクトのブロックの読み取り

R2019b 以降

bigimage オブジェクトの関数 getBlock は将来のリリースで削除される予定です。代わりに、blockedImage オブジェクトに関連付けられた関数 getBlock を使用してください。詳細については、互換性の考慮事項を参照してください。

説明

data = getBlock(bigimg,level,locationWorld) は、指定された解像度レベルで bigimg 内の大きなイメージ データを読み取り、座標 locationWorld を含むブロック全体のピクセル データを返します。

すべて折りたたむ

CAMELYON16 データセットのイメージ "tumor_091.tif" の変更したバージョンを使用して bigimage を作成します。元のイメージは、腫瘍組織が含まれるリンパ節の学習イメージです。元のイメージには 8 つの解像度レベルがあり、最も細かいレベルの解像度は 53760 x 61440 です。変更したイメージには、3 つの粗い解像度レベルのみが含まれています。変更したイメージの空間参照は、縦横比が一定に維持され、各レベルで特徴がレジストレーションされるように調整されています。

bim = bigimage('tumor_091R.tif');

関数 bigimageshow を使用して bigimage を表示します。最も細かい解像度レベルでブロック境界を表示するグリッドを重ね合わせます。

hb = subplot(1,2,1);
bigimageshow(bim,'GridVisible','on','GridLevel',1);

表示するブロックの (x,y) 座標を指定します。この座標を含むブロックを取得します。表示された bigimage の上の指定された座標に Point ROI を追加します。

coord = [2500,2500];
blk = getBlock(bim,1,coord);
hp = drawpoint(hb,'Position',coord);

図の中で、bigimage 全体の横にブロックを表示します。ブロックはメモリに収まり、単一の解像度レベルをもっているので、imshow を使用してブロックを表示できます。

ha = subplot(1,2,2);
imshow(blk,'Parent',ha)

Point ROI にリスナーを追加します。ROI をマウスでドラッグすると、図が更新されて、現在の ROI 座標を含むブロックが表示されます。

title(hb,'Drag Point to Select Block');
addlistener(hp, ...
    'ROIMoved',@(~,~) imshow(getBlock(bim,1,hp.Position),'Parent',ha));

入力引数

すべて折りたたむ

大きなイメージ。bigimage オブジェクトとして指定します。

解像度レベル。bigimg の解像度レベル値以下の正の整数として指定します。

点の座標。[x y] 形式の 1 行 2 列の数値ベクトルとして指定します。場所はワールド座標、つまり最も高い解像度レベルに対するピクセル位置で指定されます。位置は bigimg 内の有効な位置でなければなりません。

出力引数

すべて折りたたむ

ピクセル データ。大きなイメージ bigimg.ClassUnderlying と同じデータ型の数値配列として返されます。

バージョン履歴

R2019b で導入

すべて展開する

R2023b: getBlock は削除予定

bigimage オブジェクトとこの関数は将来のリリースで削除される予定です。代わりに、blockedImage オブジェクトの関数 getBlock を使用してください。

コードを更新するには、まず、イメージ データを読み取るための blockedImage オブジェクトを作成します。次に、以下の手順に従います。

  • 2 つの要素の順序を入れ替えて、(x, y) ワールド座標を (行, 列) ワールド座標に変換します。

  • 関数 world2sub を使用して、ワールド座標をピクセルの添字に変換します。レベル 1 以外の解像度レベルでブロックを取得するには、名前と値の引数 Level を使用してそのレベルを指定します。

  • 関数 sub2blocksub を使用して、ピクセルの添字をブロックの添字に変換します。レベル 1 以外の解像度レベルでブロックを取得するには、名前と値の引数 Level を使用してそのレベルを指定します。

    ブロック化されたイメージの次元が 2 より大きい場合、未指定の各次元について、ピクセルの添字のベクトルの長さを 1 つ増やす必要があることに注意してください。それらの追加要素に対し、値 1 を指定することができます。たとえば、2 次元カラー イメージは、カラー チャネルがあるため、次元が 3 になります。関数 sub2blocksub の呼び出し時に、ピクセルの添字のベクトルに要素を 1 つ追加しなければなりません。

  • ブロック化されたイメージおよびブロックの添字を関数 getBlock に渡します。レベル 1 以外の解像度レベルでブロックを取得するには、名前と値の引数 Level を使用してそのレベルを指定します。

非推奨の使用方法推奨される代替案

この例では、関数 getBlockbigimage オブジェクトと共に使用して、(x, y) ワールド座標 (1000, 2500) の周囲にあるブロックに含まれるイメージ データを最も高い解像度レベルで取得します。

filename = "tumor_091R.tif";
bim = bigimage(filename);
coordWorld = [1000 2500];
blk = getBlock(bim,1,coordWorld);

以下は、blockedImage オブジェクトを使用する等価なコードです。このイメージは次元 3 のカラー イメージであるため、未指定の次元を表す要素をピクセルの添字に 1 つ追加します。

filename = "tumor_091R.tif";
blockedIm = blockedImage(filename);
coordWorld = [1000 2500];
coordRC = flip(coordWorld);
subPixel = world2sub(blockedIm,coordRC);
subBlock = sub2blocksub(blockedIm,[subPixel 1]);
blk = getBlock(blockedIm,subBlock);

この例では、解像度レベル 2 で操作を繰り返します。

lvl = 2;
blk = getBlock(bim,lvl,coordWorld);

この例では、名前と値の引数 Level を指定して、解像度レベル 2 で操作を繰り返します。

lvl = 2;
subPixel = world2sub(blockedIm,coordRC,Level=lvl);
subBlock = sub2blocksub(blockedIm,[subPixel 1],Level=lvl);
blk = getBlock(blockedIm,subBlock,Level=lvl);