Main Content

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

bigimageDatastore

大きなイメージ データのブロックを管理するデータストア

説明

bigimageDatastore オブジェクトは、1 つ以上の bigimage オブジェクトが属するイメージ ブロックのコレクションを管理します。bigimageDatastore は、関連付けられていないイメージのコレクションを管理する imageDatastore と類似しています。

作成

説明

イメージ全体のブロックを読み取るデータストアの作成

bigds = bigimageDatastore(images) は、最も細かい解像度レベルで 1 つ以上の bigimage オブジェクト Images のイメージ ブロックのコレクションを管理するデータストアを作成します。

bigds = bigimageDatastore(images,levels) は、指定した解像度レベル Levels で 1 つ以上の bigimage オブジェクト Images のイメージ ブロックのコレクションを管理するデータストアを作成します。

bigds = bigimageDatastore(images,levels,Name,Value) は、名前と値のペアも使用して、BlockLocationSet 以外のプロパティを 1 つ以上設定します。複数の名前と値のペアを指定できます。各プロパティ名を引用符で囲みます。

例: bigimageDatastore(bigimg,3,'BlockSize',[128 128],'IncompleteBlocks','pad') は、大きなイメージ bigimg から解像度レベル 3 でサイズが 128 行 128 列のブロックを読み取るデータストアを作成し、部分エッジ ブロックをゼロ パディングします。

指定された位置のブロックを読み取るデータストアの作成

bigds = bigimageDatastore(images,'BlockLocationSet',blockLocationSet) は、BlockLocationSet で指定した解像度レベル、ブロック サイズ、ブロック位置を使用して、bigimage オブジェクト Images からブロックを読み取るデータストアを作成します。

bigds = bigimageDatastore(images,'BlockLocationSet',blockLocationSet,Name,Value) は、名前と値のペアも使用して BorderSizeIncompleteBlocksPadMethod、および ReadSize プロパティを 1 つ以上設定します。複数の名前と値のペアを指定できます。各プロパティ名を引用符で囲みます。

例: bigimageDatastore(bigimg,'BlockLocationSet',bls,'ReadSize',4) は、bls で指定した位置、ブロック サイズ、解像度レベルに従い、大きなイメージ bigimg から一度に 4 つのブロックを読み取るデータストアを作成します。

プロパティ

すべて展開する

ブロック位置。blockLocationSet オブジェクトとして指定します。

ブロックのオフセット。[numrows numcols] 形式の正の整数の 1 行 2 列ベクトルとして指定します。

既定値は BlockSize に等しくなります。read の呼び出し中にブロックを重ねるには、より小さい値を指定します。ブロック間のギャップを追加するには、より大きい値を指定します。

読み取りデータのブロック サイズ。[numrows numcols] 形式の正の整数の 1 行 2 列ベクトルとして指定します。既定値は、Levels の最初の解像度レベルで Images 内の最初の大きなイメージの BlockSize プロパティに等しくなります。

境界サイズ。[m n] 形式の非負の整数の 1 行 2 列ベクトルとして指定します。関数は、m 行を各ブロックの上下に追加し、n 列を近傍ブロックからのデータと共に各ブロックの左右に追加します。イメージのエッジにあるブロックでは、データは IncompleteBlocks に従ってパディングされます。既定では、このデータストアはブロックに境界を追加しません。

bigimageDatastore にブロックを提供する大きなイメージ。bigimage オブジェクトの b 要素ベクトルとして指定します。同じ大きなイメージから異なる解像度レベルを読み取るには、このベクトルに同じイメージを複数回指定します。

BlockSize より小さいエッジ ブロックを処理する方法。次のいずれかの値を指定します。

平均

"same"

エッジ ブロックと同じサイズのデータを返します。

"exclude"

read の呼び出しにエッジ ブロックを含めません。

"pad"

PadMethod で指定されたパディング方法を使用して、不完全なブロックを BlockSize と同じサイズにパディングします。

Images 内のそれぞれの大きなイメージに含まれるブロックの解像度レベル。正の整数のスカラーまたは正の整数の b 要素ベクトルとして指定します。スカラー値を指定した場合、すべての大きなイメージが同じ解像度レベルでデータストアにブロックを提供します。

データ型: double

不完全なエッジ ブロックのパディング方法。次のいずれかの値を指定します。既定では、このデータストアは数値ブロックを 0 によってパディングし、categorical ブロックを missing によってパディングします。

平均

数値スカラー

定数値の要素によって数値配列をパディングします。

string スカラー

基となる bigimageClasses プロパティにある指定されたクラスによって categorical 配列をパディングします。

"replicate"

配列の境界の要素を繰り返すことによってパディングします。

"symmetric"

配列自体の鏡像で配列をパディングします。

read の各呼び出しで返すブロックの数。正の整数として指定します。

オブジェクト関数

combine複数のデータ ストアのデータを統合
countEachLabelbigimageDatastore の各クラスのピクセル ラベル数をカウント
hasdataデータが読み取り可能かどうかを判別
numpartitionsデータ ストアの区画数
partitionbigimageDatastore の分割
previewデータストア内のデータのサブセットをプレビュー
readbigimageDatastore からデータを読み取る
readRelative相対的な位置を使用した bigimageDatastore からの近傍ブロックの読み取り
resetデータ ストアの初期状態へのリセット
shuffleデータストア内のデータのシャッフル
transformデータ ストアの変換
isPartitionableデータストアが分割可能かどうかを判別
isShuffleableデータストアがシャッフル可能かどうかを判別

すべて折りたたむ

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

bim = bigimage('tumor_091R.tif');

各解像度レベルで bigimage の既定のブロック サイズを表示します。ブロック サイズは [numrows, numcols] 形式の 2 要素ベクトルです。

t = table((1:3)',bim.BlockSize,'VariableNames',["Level" "Block Size"]);
disp(t)
    Level     Block Size 
    _____    ____________

      1      1024    1024
      2      1024    1024
      3      1024    1024

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

bigimageshow(bim);

解像度レベル 1 で bigimageDatastore を作成します。既定以外のブロック サイズを指定します。一度に 4 ブロックを読み取るようにデータストアを設定します。

bimds = bigimageDatastore(bim,2,'BlockSize',[512 512],'ReadSize',4)
bimds = 
  bigimageDatastore with properties:

            ReadSize: 4
          BorderSize: [0 0]
           PadMethod: 0
              Images: [1x1 bigimage]
              Levels: 2
           BlockSize: [512 512]
        BlockOffsets: [512 512]
    IncompleteBlocks: 'same'
    BlockLocationSet: [1x1 blockLocationSet]

データストアから 1 バッチ分のデータを読み取ります。3 番目のブロックは部分エッジ ブロックであり、内部ブロックよりもサイズが小さいことに注目してください。返されたイメージ パッチをモンタージュとして表示します。3 番目のブロックの幅は完全なブロックの幅よりも小さいので、モンタージュでは、このブロックに太い境界が表示されます。

blocks = read(bimds)
blocks=4×1 cell array
    {512x512x3 uint8}
    {512x512x3 uint8}
    {512x316x3 uint8}
    {512x512x3 uint8}

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

データストアから次のバッチのデータを読み取り、返されたイメージ パッチをモンタージュとして表示します。部分ブロックの次元は完全なブロックの次元よりも小さいので、モンタージュでは、部分ブロックに太い境界が表示されます。

blocks = read(bimds)
blocks=4×1 cell array
    {512x512x3 uint8}
    {512x316x3 uint8}
    {226x512x3 uint8}
    {226x512x3 uint8}

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

データストアから最後のバッチのデータを読み取ります。この読み取り操作は、唯一の残りのパッチを含む部分バッチを返します。パッチを表示します。

blocks = read(bimds)
blocks = 1x1 cell array
    {226x316x3 uint8}

montage(blocks,'Size',[1 bimds.ReadSize],'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');

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

bim = bigimage('tumor_091R.tif');

最も細かい解像度レベルで bigimage 全体を表示します。

bshow = bigimageshow(bim);

最も細かい解像度レベルで 4 つの [x y] ブロック位置を指定します。最初の 2 つのブロックは、垂直方向に重なっています。後の 2 つのブロックは水平に隣接しています。

xyLocations = [ ...
    2800 1300; ...
    2800 1400; ...
    1500 2400; ...
    1800 2400];
blockSize = [300,300];

すべて、同じイメージからのブロックです。すべてのブロックのイメージ番号に 1 を指定します。

imageNumber = [1 1 1 1]';

ブロックの位置を格納する blockLocationSet オブジェクトを作成します。

locationSet = blockLocationSet(imageNumber,xyLocations,blockSize);

blockLocationSet オブジェクトで指定した位置の大きなイメージ bim からブロックを読み取る bigimageDatastore オブジェクトを作成します。

bimds = bigimageDatastore(bim,'BlockLocationSet',locationSet);

データストアから一度に 2 つのブロックを読み取り、モンタージュに表示します。

bimds.ReadSize = 2;
while hasdata(bimds)
    blocks = read(bimds);
    figure
    montage(blocks,'BorderSize',5,'BackgroundColor','b');
end

互換性の考慮事項

すべて展開する

参照

[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.

R2019b で導入