このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
burstinterpolant
低解像度バースト モード イメージのセットからの高解像度イメージの作成
説明
は、imHighRes
= burstinterpolant(imds
,tforms
,scale
)ImageDatastore
オブジェクト imds
として格納された低解像度バースト モード イメージのセットから高解像度イメージ imHighRes
を作成します。imHighRes
のサイズは、入力イメージのサイズの scale
倍です。tforms
は、低解像度イメージの調整に必要な幾何学的変換を指定します。
例
イメージ データストアにあるバースト モード イメージからの高解像度イメージの作成
低解像度バースト モード イメージの場所を指定します。入力イメージは 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 配列からの高解像度イメージの作成
低解像度バースト モード イメージを含む 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
入力引数
imds
— 入力イメージ データストア
ImageDatastore
オブジェクト
入力イメージ データストア。ImageDatastore
オブジェクトとして指定します。入力イメージ データストアには、高解像度イメージ出力を作成するために使用する、複数の低解像度バースト モード イメージが含まれています。
入力イメージ データストア内のイメージは、サイズが m x n の 2 次元グレースケール イメージまたはサイズが m x n x 3 の 2 次元 RGB イメージでなければなりません。
入力イメージ データストア内のすべてのイメージは、サイズとデータ型が同じでなければなりません。
入力イメージ データストアにあるイメージの数は 2 以上でなければなりません。
イメージは、データ型
single
、double
、uint8
、またはuint16
でなければなりません。
images
— 入力イメージ
k 行 1 列の cell 配列
入力イメージ。k 行 1 列の cell 配列として指定します。"k" は、cell 配列に格納されている入力イメージの数です。入力イメージはすべて同じサイズでなければなりません。
データ型: single
| double
| uint8
| uint16
tforms
— 幾何学的変換
幾何学的変換オブジェクトのベクトル
幾何学的変換。表に記載されている幾何学的変換オブジェクトのベクトルとして指定します。このベクトルの長さは k-1 です。ここで、k は imds
または images
内のイメージ数です。tforms
の n
番目の要素は、imds
または images
内の (n+1)
番目の低解像度イメージを最初のイメージに対してレジストレーションする際に使用される幾何学的変換を表します。
幾何学的変換オブジェクト | 説明 |
---|---|
transltform2d | 平行移動変換 |
rigidtform2d | 剛体変換: 平行移動と回転 |
simtform2d | 相似変換: 平行移動、回転、等方性スケーリング |
affinetform2d | アフィン変換: 平行移動、回転、異方性スケーリング、鏡映、せん断 |
関数 imregtform
を使用して、各入力イメージの幾何学的変換を計算できます。imds
または images
内の最初のイメージとして参照イメージを指定します。
scale
— サイズ変更係数
数値スカラー
サイズ変更係数。1 以上の数値スカラーとして指定します。
出力引数
アルゴリズム
関数 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 で導入R2022b: 新しい幾何学的変換オブジェクトをサポート
R2022b 以降、ほとんどの Image Processing Toolbox™ 関数は、左から乗算する規則を使用して幾何学的変換を作成し、実行します。そのため、tforms
を、affinetform2d
オブジェクトなどの左から乗算する規則を使用する幾何学的変換オブジェクトのベクトルとして指定できるようになりました。
tforms
は affine2d
オブジェクトのベクトルとして指定することもできますが、これらのオブジェクトは右から乗算する規則を使用しているため推奨されません。左から乗算する新しい幾何学的変換オブジェクトに切り替えることで、幾何学的変換のワークフローを効率化できます。詳細については、Migrate Geometric Transformations to Premultiply Conventionを参照してください。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)