Main Content

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

部分イメージまたは低解像度を使用した大きなイメージの効率的な処理

この例では、高解像度イメージの小さい代表サンプルでの計算を実現する 2 つの手法を使用して、大きなイメージを迅速に処理する方法を説明します。

大きなイメージを処理するには、時間がかかることがあります。そのため、アルゴリズムの反復開発には、ばく大な費用がかかります。フィードバック サイクルを短縮するための一般的な方法として、低解像度イメージで反復する方法と大きなイメージの部分領域で反復する方法の 2 つがあります。この例では、大きなイメージのセグメンテーション マスクを作成する場合について両方の手法を説明します。

Parallel Computing Toolbox™ をインストール済みの場合は、複数のワーカーを使用して、処理をさらに高速化できます。

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

bim = bigimage('tumor_091R.tif');

関数 bigimageshow を使用して大きなイメージを表示します。

bigimageshow(bim);

低解像度イメージを使用した処理の高速化

多くの大きなイメージには、最も細かい高解像度イメージの粗く解像度が低いバージョンなど、複数の解像度レベルが含まれています。一般に、個々のピクセル値の分布は、すべてのレベルでほぼ等価でなければなりません。この仮定を活用すると、粗いレベルで全体統計を計算し、その統計量を使用してより細かいレベルを処理できます。

最も粗いレベルでイメージを抽出した後、そのイメージをグレースケールに変換します。

imLowRes = getFullLevel(bim,bim.CoarsestResolutionLevel);
imLowResGray = rgb2gray(imLowRes);

イメージを 2 つのクラスにしきい値処理し、結果を表示します。

thresh = graythresh(imLowResGray);
imLowResQuant = imbinarize(imLowResGray,thresh);
imshow(imLowResQuant)

最も大きなイメージで検証します。結果を反転して、染色された領域のマスクを取得します。

bq = apply(bim,bim.FinestResolutionLevel, ...
    @(im)~imbinarize(rgb2gray(im),thresh));

最も細かいレベルの結果を可視化します。

bigimageshow(bq,'CDataMapping','scaled');

大きなイメージの部分領域を使用した処理の高速化

大きなイメージを処理する場合のもう 1 つの手法は、対象の特徴を含む小さい領域を抽出することです。ROI から統計量を計算し、その統計量を使用して高解像度イメージ全体を処理できます。

% Zoom in on a region of interest.
bigimageshow(bim);
xlim([2400,3300])
ylim([900 1700])

最も細かいレベルから表示する領域を抽出します。

xrange = xlim;
yrange = ylim;
imRegion = bim.getRegion(1,[xrange(1),yrange(1)],[xrange(2),yrange(2)]);
imshow(imRegion);

この領域を使用してプロトタイプを作成し、結果を表示します。

imRegionGray = rgb2gray(imRegion);
thresh = graythresh(imRegionGray);
imLowResQuant = ~imbinarize(imRegionGray,thresh);

imshow(imLowResQuant)

大きなイメージ全体を検証し、結果を表示します。

bq = apply(bim, bim.FinestResolutionLevel,...
    @(im)~imbinarize(rgb2gray(im), thresh));

bigimageshow(bq,'CDataMapping','scaled');

Parallel Computing Toolbox を使用した処理の高速化

Parallel Computing Toolbox™ をインストール済みの場合は、処理を複数のワーカーに分散させて、処理を高速化できます。イメージの並列処理を試すには、変数 runInParalleltrue に設定します。

runInParallel = false;
if runInParallel
    % Open a pool
    p = gcp;
    % Ensure workers are on the same folder as the file to be able to
    % access it using just the relative path
    sourceDir = fileparts(which('tumor_091R.tif'));
    spmd
        cd(sourceDir)
    end
    % Run in parallel
    bq = apply(bim,bim.FinestResolutionLevel, ...
        @(im)~imbinarize(rgb2gray(im),thresh),'UseParallel',true);
end

参考

| |