Main Content

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

selectBlockLocations

大きなイメージからブロックを選択

説明

blset = selectBlockLocations(bigimgs) は、1 つ以上の bigimage オブジェクト bigimgs から、各イメージで使用可能な最も細かい解像度で、オーバーラップのない固有のブロックのセットを選択します。

blset = selectBlockLocations(bigimgs,Name,Value) は、1 つ以上の名前と値のペアの引数を使用して、選択するブロックに関する追加のオプションを指定します (ブロック同士のオーバーラップや間隔など)。

すべて折りたたむ

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

bim = bigimage('tumor_091R.tif');

サイズ 768 x 1024 のすべての完全なブロックの位置を指定します。

bls = selectBlockLocations(bim,'BlockSize',[768 1024], ...
    'ExcludeIncompleteBlocks',true);

ブロックの位置を四角形 ROI として大きなイメージに重ねて可視化します。関数 drawrectangle では、ROI のサイズを ("幅","高さ") 形式で指定する必要があります。そのため、("高さ","幅") 形式で指定されている blockLocationSet のブロック サイズを水平方向に反転します。

bigimageshow(bim)
blockWH = fliplr(bls.BlockSize);
for ind = 1:size(bls.BlockOrigin,1)
    drawrectangle('Position',[bls.BlockOrigin(ind,:),blockWH]);
end

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

bim = bigimage('tumor_091R.tif');

読み取るブロックのサイズを指定します。

blockSize = [1500 1500];

ブロックをオーバーラップするには、ブロック サイズよりも小さいブロック オフセット距離を指定します。

blockOffsets = blockSize - 150;

ブロック サイズとブロック オフセット距離を使用して、イメージ内の完全なブロックの位置を指定します。

bls = selectBlockLocations(bim,...
      'BlockSize',blockSize,...
      'BlockOffSets',blockOffsets,...
      'ExcludeIncompleteBlocks',true);

ブロックの位置を四角形 ROI として大きなイメージに重ねて可視化します。各 ROI を異なる色で表示します。

bigimageshow(bim)
blockWH = fliplr(bls.BlockSize);
colors = prism(size(bls.BlockOrigin,1));
for ind = 1:size(bls.BlockOrigin,1)
    blockColor = colors(ind,:);
    drawrectangle('Position',[bls.BlockOrigin(ind,:),blockWH],'Color',blockColor);
end

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

bim = bigimage('tumor_091R.tif');

読み取るブロックのサイズを指定します。

blockSize = [1024 512];

ブロック オフセット距離をブロック サイズの 1.5 倍として指定します。

blockOffsets = 1.5*blocksize;

ブロック サイズとブロック オフセット距離を使用して、イメージ内の完全なブロックの位置を指定します。結果の blockLocationSet オブジェクトには 21 個のブロックがあります。

bls = selectBlockLocations(bim,...
      'BlockSize',blockSize,...
      'BlockOffSets',blockOffsets,...
      'ExcludeIncompleteBlocks',true);

ブロックの位置を四角形 ROI として大きなイメージに重ねて可視化します。

bigimageshow(bim)
blockWH = fliplr(bls.BlockSize);
for ind = 1:size(bls.BlockOrigin,1)
    drawrectangle('Position',[bls.BlockOrigin(ind,:),blockWH]);
end

blockLocationSet オブジェクトで指定した位置からブロックを読み取る bigimageDatastore を作成します。

numBlocks = length(bls.BlockOrigin);
bimds = bigimageDatastore(bim,'BlockLocationSet',bls, ...
    'ReadSize',numBlocks);

データストアのブロックをすべて読み取り、そのブロックをモンタージュとして表示します。ブロック データは bigimage に重ねられたブロック位置の ROI と一致します。

blocks = read(bimds);
figure
montage(blocks,'Size',[3 7],'BorderSize',5,'BackgroundColor','k');

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

bim = bigimage('tumor_091R.tif');

関数 bigimageshow を使用して bigimage を表示します。

h = bigimageshow(bim);

最も粗い解像度レベルでマスクを作成し、元の空間参照情報を保持します。

clevel = bim.CoarsestResolutionLevel;
imcoarse = getFullLevel(bim,clevel);
stainMask = ~imbinarize(rgb2gray(imcoarse));
bmask = bigimage(stainMask,'SpatialReferencing',bim.SpatialReferencing(clevel));

関数 selectBlockLocations を使用して、bigimage から読み取るブロックの位置を指定します。ブロック サイズを 256 x 256 ピクセルとして設定します。名前と値のペアの引数 'InclusionThreshold' を指定して、マスクによって定義される ROI 内の少なくとも 75% のブロックを選択します。既定では、selectBlockLocations は大きなイメージの最も細かい解像度レベルからブロックを選択します。

t = 0.75;
blockSize = [256 256];
blockSet = selectBlockLocations(bim,"BlockSize",blockSize, ...
    "Masks",bmask,"InclusionThreshold",t);

blockLocationSet で指定した位置から一度に 4 つのブロックを読み取る bigimageDatastore を作成します。

bimds = bigimageDatastore(bim,"BlockLocationSet",blockSet,"ReadSize",4);

データストアによってどのパッチが読み取られるかをプレビューするには、同じブロック サイズと包含しきい値を使用して元の bigimage の上にマスクを重ねて表示します。オーバーレイは、マスクによって定義される ROI 内に少なくとも 75% が含まれるパッチを緑色で強調表示します。

showmask(h,bmask,'BlockSize',blockSize,'InclusionThreshold',t)

データストアから最初のバッチのデータを読み取り、返されたイメージ パッチをモンタージュとして表示します。これらのパッチの内容はオーバーレイの緑色のブロックに一致します。

blocks = read(bimds);
montage(blocks,'Size',[1 bimds.ReadSize],'BorderSize',5,'BackgroundColor','k');

入力引数

すべて折りたたむ

大きなイメージ。bigimage オブジェクトまたは bigimage オブジェクトの b 要素ベクトルとして指定します。

名前と値のペアの引数

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

例: 'BlockSize',[224 224] はブロック サイズを 224 x 224 ピクセルに設定します。

隣接するブロックのオフセット。'BlockOffsets' と [numrows numcols] 形式の正の整数の 2 要素の行ベクトルで構成されるコンマ区切りのペアとして指定します。

既定値は 'BlockSize' に等しくなります。ブロックをオーバーラップするには、より小さい値を指定します。ブロック間のギャップを追加するには、より大きい値を指定します。

ブロック サイズ。'BlockSize' と [rows cols] 形式の正の整数の 2 要素の行ベクトルで構成されるコンマ区切りのペアとして指定します。既定値は、bigimgs の最初の大きなイメージの最も細かい解像度レベルにおける BlockSize プロパティに等しくなります。

'BlockSize' より小さい不完全なブロックの除外。'ExcludeIncompleteBlocks'数値または logical 0 (false) または 1 (true) で構成されるコンマ区切りペアとして指定します。

マスク ブロックの包含しきい値。'InclusionThreshold' と範囲 [0, 1] の値を持つ数値スカラーまたは b 要素の数値ベクトルで構成されるコンマ区切りペアとして指定します。引数 'InclusionThreshold' は、引数 'Masks' と要素が同じ数でなければなりません。関数 selectBlockLocations は、対応するマスク ブロックの前景に、'InclusionThreshold' で指定された値以上の割合がオーバーラップするブロックを選択します。

  • 包含しきい値が 0 の場合、対応するマスク ブロック内の少なくとも 1 つのピクセルが非ゼロのときに関数 selectBlockLocations はブロックを選択します。

  • 包含しきい値が 1 の場合、マスク ブロック内のすべてのピクセルが非ゼロのときのみに関数 selectBlockLocations はブロックを選択します。

bigimgs 内のそれぞれの大きなイメージに含まれるブロックの解像度レベル。'Levels' と正の整数または正の整数の b 要素ベクトルで構成されるコンマ区切りペアとして指定します。スカラー値を指定した場合、関数 selectBlockLocations はすべての大きなイメージから同じ解像度レベルでブロックを選択します。

データ型: double

マスク イメージ。'Masks'bigimage オブジェクトまたは bigimage オブジェクトの b 要素ベクトルで構成されるコンマ区切りのペアとして指定します。マスク イメージの基となるデータ型は logical です。関数 selectBlockLocations は、対応するマスク ブロックの前景に、'InclusionThreshold' で指定された量だけオーバーラップするブロックを選択します。

マスク ブロックの評価における並列処理の使用。'UseParallel'数値または logical 0 (false) または 1 (true) で構成されるコンマ区切りペアとして指定します。マスクがメモリに収まらない場合は、マスクの並列評価が役立ちます。

並列処理を使用するには Parallel Computing Toolbox™ が必要です。関数 selectBlockLocations は、既存のワーカーの並列プールを使用するか、アクティブな並列プールがない場合は新規プールを開きます。bigimgs 内のそれぞれの大きなイメージの DataSource プロパティは、すべての並列ワーカーに対して有効なパスでなければなりません。

出力引数

すべて折りたたむ

ブロック位置。blockLocationSet オブジェクトとして返されます。

参照

[1] Bejnordi, Babak Ehteshami, Mitko Veta, Paul Johannes van Diest, Bram van Ginneken, Nico Karssemeijer, Geert Litjens, Jeroen A. W. M. van der Laak, et al. “Diagnostic Assessment of Deep Learning Algorithms for Detection of Lymph Node Metastases in Women With Breast Cancer.” JAMA 318, no. 22 (December 12, 2017): 2199–2210. https://doi.org/10.1001/jama.2017.14585.

R2020b で導入