Main Content

bigimageDatastore

(削除予定) bigimage データのブロックを管理するデータストア

R2019b 以降

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

説明

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複数のデータストアのデータを統合
countEachLabel(削除予定) bigimageDatastore オブジェクトの各クラスのピクセル ラベル数のカウント
hasdataデータが読み取り可能かどうかを判別
numpartitionsデータストアの区画数
partition(削除予定) bigimageDatastore の分割
previewデータストア内のデータのサブセットをプレビュー
read(削除予定) bigimageDatastore からのデータの読み取り
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);

Figure contains an axes object. The axes object contains an object of type bigimageshow.

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

clevel = bim.CoarsestResolutionLevel;
imcoarse = getFullLevel(bim,clevel);
stainMask = ~imbinarize(im2gray(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)

Figure contains an axes object. The axes object contains an object of type bigimageshow.

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

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

Figure contains an axes object. The axes object contains an object of type image.

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)
    figure
    blocks = read(bimds);
    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 で導入

すべて展開する

R2023b: bigimageDatastore は削除予定

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

コードの更新

bigimageDatastore オブジェクトのすべてのインスタンスを更新してください。

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

この例では bigimageDatastore オブジェクトを作成します。

bigIm = bigimage("tumor_091R.tif");
bigDS = bigimageDatastore(bigIm);

以下は、blockedImageDatastore オブジェクトを使用する等価なコードです。

blockedIm = blockedImage("tumor_091R.tif");
blockedDS = blockedImageDatastore(blockedIm);

この例では、解像度レベル 2 でブロックを読み取る bigimageDatastore オブジェクトを作成します。

bigIm = bigimage("tumor_091R.tif");
level = 2;
bigDS = bigimageDatastore(bigIm,level);

以下は、blockedImageDatastore オブジェクトを使用する等価なコードです。

blockedIm = blockedImage("tumor_091R.tif");
level = 2;
bls = selectBlockLocations(blockedIm,Levels=level);
blockedDS = blockedImageDatastore(blockedIm,BlockLocationSet=bls);

blockedImageDatastore オブジェクトは、bigimageDatastore オブジェクトの場合とは異なるプロパティおよび関数をサポートしています。たとえば、blockedImageDatastore オブジェクトは、BlockOffset プロパティと IncompleteBlocks プロパティをサポートしていませんが、その代わりに TotalNumBlocks プロパティをサポートしています。blockedImageDatastore オブジェクトは、関数 readRelative をサポートしていません。