Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

burstinterpolant

低解像度バースト モード イメージのセットからの高解像度イメージの作成

説明

imHighRes = burstinterpolant(imds,tforms,scale) は、ImageDatastore オブジェクト imds として格納された低解像度バースト モード イメージのセットから高解像度イメージ imHighRes を作成します。imHighRes のサイズは、入力イメージのサイズの scale 倍です。tforms は、低解像度イメージの調整に必要な幾何学的変換を指定します。

imHighRes = burstinterpolant(images,tforms,scale) は、cell 配列 images に格納された低解像度バースト モード イメージのセットから高解像度イメージ imHighRes を作成します。

すべて折りたたむ

低解像度バースト モード イメージの場所を指定します。入力イメージは 2 次元 RGB イメージで、回転および平行移動の量が少しずつ異なります。

setDir = fullfile(toolboxdir("images"),"imdata","notebook");

関数imageDatastoreを使用して、低解像度バースト モード イメージを読み取って格納します。

imds = imageDatastore(setDir,"FileExtensions",".png");

イメージをモンタージュとして表示します。

montage(imds)
title("Set of Low-Resolution Burst Mode Images")

幾何学的変換の計算

関数rgb2lightnessを使用して、すべての RGB イメージを明度イメージに変換します。バースト モード明度イメージは、イメージ データストア オブジェクトとして格納されます。

imdsTransformed = transform(imds,@(x) rgb2lightness(x));

関数imregconfigを使用して、バースト モード明度イメージのレジストレーションに必要になる最適な構成パラメーターを取得します。イメージ キャプチャ モダリティを "monomodal" に指定します。

[optimizer,metric] = imregconfig("monomodal");

関数numpartitionsを使用して、イメージ データストア オブジェクトに格納されているイメージの総数を求めます。

numImages = numpartitions(imds);

参照イメージを除く各低解像度バースト モード明度イメージの剛体変換を格納する 2 次元アフィン変換オブジェクトの配列を作成します。変換配列の行数を、イメージ データストア オブジェクトにあるイメージの総数から 1 を引いた値として設定します。

tforms = repmat(affinetform2d,numImages-1,1);

最初の明度イメージをワークスペースに読み取り、幾何学的変換を推定する参照イメージとして使用します。

imgRef = read(imdsTransformed);

関数imregtformを使用して、参照イメージに対する、各低解像度バースト モード明度イメージの剛体幾何学的変換を推定します。

idx = 1;
while hasdata(imdsTransformed)
    imgMoving = read(imdsTransformed);
    tforms(idx) = imregtform(imgRef,imgMoving,"rigid",optimizer,metric);
    idx = idx+1;
end

高解像度イメージの作成

高解像度イメージの生成用の倍率を指定します。

scale = 4;

低解像度バースト モード RGB イメージのセットから高解像度イメージを作成します。

imgHighRes = burstinterpolant(imds,tforms,scale);

高解像度イメージを表示します。

figure("WindowState","maximized")
imshow(imgHighRes)
title("High-Resolution Image")

低解像度イメージのサイズを表示します。

imgLowRes = read(imds);
inputDim = size(imgLowRes)
inputDim = 1×3

   161   186     3

高解像度イメージのサイズを表示します。倍率が 4 であるため、高解像度イメージの空間次元は、低解像度バースト モード RGB イメージのサイズの 4 倍です。

outputDim = size(imgHighRes)
outputDim = 1×3

   644   744     3

低解像度バースト モード イメージを含む cell 配列を読み込みます。入力イメージは 2 次元 RGB イメージで、回転および平行移動の量が少しずつ異なります。

load("LRData")

イメージをモンタージュとして表示します。

montage(images,"Size",[2 4],"BackgroundColor",[1 1 1])
title("Set of Low-Resolution Burst Mode Images")

幾何学的変換のパラメーターの計算

関数rgb2lightnessを使用して、すべての RGB イメージを明度イメージに変換します。

imagesT = cellfun(@rgb2lightness,images,"UniformOutput",false);

関数imregconfigを使用して、バースト モード明度イメージのレジストレーションに必要になる最適な構成パラメーターを取得します。イメージ キャプチャ モダリティを "monomodal" に指定します。

[optimizer,metric] = imregconfig("monomodal");

cell 配列に格納されているイメージの総数を求めます。

numImages = length(images);

参照イメージを除く各低解像度バースト モード明度イメージの剛体変換を格納する 2 次元アフィン変換オブジェクトの配列を作成します。変換配列の行数を、イメージ データストア オブジェクトにあるイメージの総数から 1 を引いた値として設定します。

tforms = repmat(affinetform2d,numImages-1,1);

最初の明度イメージをワークスペースに読み取り、幾何学的変換を推定する参照イメージとして使用します。

imgRef = imagesT{1};

関数imregtformを使用して、参照イメージに対する、各低解像度バースト モード明度イメージの剛体幾何学的変換を推定します。

for i= 2:length(images)
    imgMoving = imagesT{i};
    tforms(i-1) = imregtform(imgRef,imgMoving,"rigid",optimizer,metric);
end

高解像度イメージの作成

高解像度イメージの生成用の倍率を指定します。

scale = 3;

低解像度バースト モード RGB イメージのセットから高解像度イメージを構築します。

imgHighRes = burstinterpolant(images,tforms,scale);

高解像度イメージを表示します。

imshow(imgHighRes)
title("High-Resolution Image")

低解像度イメージのサイズを表示します。

imgLowRes = images{1};
inputDim = size(imgLowRes)
inputDim = 1×3

   154   265     3

高解像度イメージのサイズを表示します。倍率が 3 であるため、高解像度イメージの空間次元は、低解像度イメージのサイズの 3 倍です。

ouputDim = size(imgHighRes)
ouputDim = 1×3

   462   795     3

入力引数

すべて折りたたむ

入力イメージ データストア。ImageDatastore オブジェクトとして指定します。入力イメージ データストアには、高解像度イメージ出力を作成するために使用する、複数の低解像度バースト モード イメージが含まれています。

  • 入力イメージ データストア内のイメージは、サイズが m x n の 2 次元グレースケール イメージまたはサイズが m x n x 3 の 2 次元 RGB イメージでなければなりません。

  • 入力イメージ データストア内のすべてのイメージは、サイズとデータ型が同じでなければなりません。

  • 入力イメージ データストアにあるイメージの数は 2 以上でなければなりません。

  • イメージは、データ型 singledoubleuint8、または uint16 でなければなりません。

入力イメージ。k 行 1 列の cell 配列として指定します。"k" は、cell 配列に格納されている入力イメージの数です。入力イメージはすべて同じサイズでなければなりません。

データ型: single | double | uint8 | uint16

幾何学的変換。表に記載されている幾何学的変換オブジェクトのベクトルとして指定します。このベクトルの長さは k-1 です。ここで、kimds または images 内のイメージ数です。tformsn 番目の要素は、imds または images 内の (n+1) 番目の低解像度イメージを最初のイメージに対してレジストレーションする際に使用される幾何学的変換を表します。

幾何学的変換オブジェクト説明
transltform2d平行移動変換
rigidtform2d剛体変換: 平行移動と回転
simtform2d相似変換: 平行移動、回転、等方性スケーリング
affinetform2dアフィン変換: 平行移動、回転、異方性スケーリング、鏡映、せん断

関数 imregtform を使用して、各入力イメージの幾何学的変換を計算できます。imds または images 内の最初のイメージとして参照イメージを指定します。

メモ

tformaffine2d オブジェクトのベクトルとして指定することもできます。ただし、これらのオブジェクトは推奨されません。詳細については、バージョン履歴を参照してください。

サイズ変更係数。1 以上の数値スカラーとして指定します。

出力引数

すべて折りたたむ

高解像度イメージ。2 次元グレースケール イメージまたは 2 次元 RGB イメージとして返されます。imHighRes のデータ型は、入力イメージと同じです。imHighRes のサイズは、imds または images にあるイメージのサイズの scale 倍の値です。

たとえば、Lscale の値とし、m x n を低解像度バースト モード イメージのサイズとします。この場合、高解像度イメージのサイズは mL x nL になります。

アルゴリズム

関数 burstinterpolant は、逆距離加重法を使用して、低解像度バースト モード イメージのセットから高解像度イメージを生成します[1]。幾何学的変換 tforms を使用すると、剛体幾何学的変換 (回転と平行移動のみ) に対してピクセル選択がロバストになります。

メモ

  • 入力イメージが 2 次元 RGB イメージの場合、明度成分から tforms を推定します。関数 rgb2lightness を使用して、RGB カラー値から明度値を計算できます。

参照

[1] Shepard, Donald. “A Two-Dimensional Interpolation Function for Irregularly-Spaced Data”, In Proceedings of the 1968 23rd ACM National Conference, 517-524. New York, NY: ACM, 1968.

バージョン履歴

R2019a で導入

すべて展開する