Main Content

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

setBlock

大きなイメージの特定のブロックへのデータの配置

説明

setBlock(bigimg,level,locationWorld,data) は、指定された解像度レベルで座標 locationWorld を含む大きなイメージ bigimg のブロックにピクセル データを設定します。

すべて折りたたむ

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

bim = bigimage('tumor_091R.tif');

bigimage を表示し、表示されたイメージの上に円 ROI を作成します。

h = bigimageshow(bim);
hROI = drawcircle(gca,'Radius',470,'Position',[1477 2284]);

書き換え可能な bigimage を作成するレベルを選択します。レベル 3 は最も粗い解像度レベルです。

maskLevel = 3;

指定されたレベルから空間参照とピクセル範囲を取得します。

ref = bim.SpatialReferencing(maskLevel);
pixelExtent = [ref.PixelExtentInWorldX,ref.PixelExtentInWorldY];

イメージ データではなく空間参照を指定して、書き換え可能な bigimage を作成します。大きなイメージには 1 つのチャネルがあり、データ型は logical です。

bmask = bigimage(ref,1,'logical');

書き換え可能な大きなイメージ内のすべてのブロックでループ処理を行い、マスク イメージを作成します。ブロックごとに、ROI 内のピクセルではピクセル値を 1 (true) として設定し、ROI 外のピクセルでは 0 (false) として設定します。

for cStart = 1:bmask.BlockSize(2):ref.ImageSize(2)
    for rStart = 1:bmask.BlockSize(1):ref.ImageSize(1)

        % Get the center of top left pixel of this block in world units.
        xyStart = [cStart,rStart].*pixelExtent;

        % Get the block size. The |'BlockSize'| property represents the
        % size as a 2-element vector of the form [row,column]. Switch the
        % order of the elements so that the block size is represented as
        % [x,y].
        bsize = bmask.BlockSize;
        numRows = bsize(1);
        numCols = bsize(2);

        % Determine which pixels have coordinates inside the ROI.
        roiPositions = hROI.Vertices;

        % Transform |roiPositions| from world coordinates to the intrinsic
        % image indices at the given resolution level.
        roiPositions = (roiPositions - xyStart) ./ pixelExtent + 1;

        blockMask = poly2mask(roiPositions(:,1),roiPositions(:,2), ...
                              numRows, numCols);

        % Set the pixel values of the block.
        setBlock(bmask,1,xyStart,blockMask);
    end
end

マスクを表示します。

figure
bigimageshow(bmask)

入力引数

すべて折りたたむ

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

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

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

ピクセル データ。大きなイメージ bigimg.ClassUnderlying と同じデータ型の数値配列として指定します。データの最初の 2 つの次元は、指定した level でブロック サイズに一致しなければなりません。

ヒント

  • イメージ データを初期化しない構文を使用して、書き換え可能な bigimage を作成します。イメージ データのファイル名、ディレクトリ名、または変数名を指定して、または関数 apply を使用して bigimage を作成する場合、bigimage は書き換え可能にならず、関数 setBlock を使用できません。

  • data のサイズがブロック サイズ bigimg.BlockSize より小さい場合、setBlock は既定値 bigimg.UnloadedValue を使用してデータをパディングします。

  • setBlock は部分エッジ ブロックのデータをトリミングします。

R2019b で導入