最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

burstinterpolant

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

説明

B = burstinterpolant(imds,tforms,scale) は、ImageDatastore オブジェクト imds として格納された低解像度バースト モード イメージのセットから高解像度イメージ B を作成します。scale は、高解像度イメージの倍率値を指定します。B のサイズは、入力イメージのサイズの scale 倍です。

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

すべて折りたたむ

イメージ データストア オブジェクトとして格納する低解像度バースト モード イメージの場所を指定します。入力イメージは 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));

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

refImg = read(imdsTransformed);

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

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

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

numImages = numpartitions(imds);

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

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

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

idx = 1;
while hasdata(imdsTransformed)
    movingImg = read(imdsTransformed);
    tforms(idx) = imregtform(refImg,movingImg,'rigid',optimizer,metric);
    idx = idx + 1;
end

高解像度イメージの構築

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

scale = 4;

低解像度バースト モード RGB イメージのセットから高解像度イメージを作成します。高解像度ピクセル値をロバストに推定するための変換パラメーターを指定します。

B = burstinterpolant(imds,tforms,scale);

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

figure('WindowState','maximized')
imshow(B)
title ('High-Resolution Image')

イメージ データストアから低解像度バースト モード RGB イメージを読み取り、そのサイズを表示します。

Img = read(imds);
inputDim = [size(Img,1) size(Img,2)]
inputDim = 1×2

   161   186

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

outputDim = [size(B,1) size(B,2)]
outputDim = 1×2

   644   744

低解像度バースト モード イメージを含む cell 配列データをワークスペースに読み込みます。入力イメージは、モノモーダル イメージおよび 2 次元 RGB イメージです。

load('LRData')

cell 配列データ内のイメージをモンタージュとして表示します。

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);

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

refImg = imagesT{1};

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

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

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

numImages = length(images);

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

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

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

for i= 2:length(images)
    movingImg = imagesT{i};
    tforms(i-1) = imregtform(refImg,movingImg,'rigid',optimizer,metric);
end

高解像度イメージの構築

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

scale = 3;

低解像度バースト モード RGB イメージのセットから高解像度イメージを構築します。高解像度ピクセル値をロバストに推定するための変換パラメーターを指定します。

B = burstinterpolant(images,tforms,scale);

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

figure
imshow(B); 
title ('High-Resolution Image')

cell 配列から低解像度バースト モード RGB イメージを読み取り、そのサイズを表示します。

Img = images{1};
inputDim = [size(Img,1) size(Img,2)]
inputDim = 1×2

   154   265

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

ouputDim = [size(B,1) size(B,2)]
ouputDim = 1×2

   462   795

入力引数

すべて折りたたむ

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

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

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

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

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

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

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

変換パラメーター。サイズが (k-1) 行 1 列または 1 行 (k-1) 列の affine2d オブジェクト配列として指定します。k は、入力 imds または images にあるイメージの数です。

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

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

出力引数

すべて折りたたむ

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

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

ヒント

  • 関数 imregtform を使用して、各入力イメージに対して tforms を計算します。入力の最初のイメージは、剛体幾何学的変換 (回転と並進のみ) を推定する参照イメージとして使用できます。

  • 関数 imregconfig を使用して、imregtform の入力引数 optimizer および metric を計算します。optimizer は、RegularStepGradientDescent オブジェクトでなければならず、metricMeanSquares オブジェクトでなければなりません。

  • 高解像度出力を改善するために、imregtform の optimizer オブジェクト RegularStepGradientDescent の入力引数値を変更できます。これらの変更の詳細については、RegularStepGradientDescent のプロパティを参照してください。

アルゴリズム

関数 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 で導入