Main Content

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

inpaintExemplar

見本に基づくイメージ修復を使用した、特定のイメージ領域の復元

説明

J = inpaintExemplar(I,mask) は、見本に基づく修復方法を使用して、入力イメージの特定の領域を塗りつぶします。mask は、修復を使用して塗りつぶされる、イメージ内のターゲット領域を示す論理イメージです。

J = inpaintExemplar(I,mask,Name,Value) は、1 つ以上の名前と値のペアの引数を使用して追加の修復オプションを指定します。

すべて折りたたむ

イメージをワークスペースに読み取ります。

I = imread('liftingbody.png');

イメージを表示します。

figure
imshow(I,[])

関数 drawellipse を使用して、修復する楕円の関心領域 (ROI) を選択します。名前と値のペア 'Center' と 'SemiAxes' を使用して ROI の位置を指定します。

h = drawellipse('Center',[410 155],'SemiAxes',[95 20]);

関数 createMask を使用して、選択した ROI からマスクを生成します。

mask = createMask(h);

修復するイメージと対応するマスク イメージを表示します。

montage({I,mask});
title(['Image to Be Inpainted','   |   ','Mask for Inpainting'])

修復を使用して、ROI 内のオブジェクトを削除します。

J = inpaintExemplar(I,mask);

元のイメージと修復後のイメージを表示します。

montage({I,J});
title(['Image to Be Inpainted','    |    ','Inpainted Image']);

イメージをワークスペースに読み取ります。

I = imread('forestdistorted.png');

イメージを表示します。このイメージには、修復を使用して復元する歪んだ領域が含まれています。

figure
imshow(I,[])

歪んだイメージ領域を含むバイナリ マスク イメージをワークスペースに読み取ります。

mask = imread('imagemask.png');

修復するイメージと対応するマスク イメージを表示します。

montage({I,mask});
title(['Image to Be Inpainted','   |   ','Mask for Inpainting'])

元のイメージを修復して、歪んだイメージ領域を復元します。修復の塗りつぶし順序とパッチ サイズをそれぞれ tensor および 7 に指定します。

J = inpaintExemplar(I,mask,'FillOrder','tensor','PatchSize',7);

元のイメージと修復後のイメージを表示します。

montage({I,J});
title(['Image to Be Inpainted','   |   ','Inpainted Image'])

入力引数

すべて折りたたむ

修復するイメージ。m 行 n 列の 2 次元グレースケール イメージまたは RGB イメージとして指定します。

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

ターゲット領域の空間マスク。入力イメージ I と同じサイズの 2 次元バイナリ イメージとして指定します。mask の非ゼロ ピクセルは、修復を使用して塗りつぶされるターゲット領域を指定します。

データ型: logical

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: J = inpaintExemplar(I,mask,'FillOrder','gradient')

塗りつぶしの順序。'FillOrder''gradient' または 'tensor' から構成されるコンマ区切りのペアとして指定します。塗りつぶしの順序は、パッチの優先順位を計算するために使用する優先順位関数を示します。パッチの優先順位の値は、ターゲット領域内のイメージ パッチを塗りつぶす順序を指定します。

データ型: char | string

イメージ パッチのサイズ。'PatchSize' と次のいずれかのオプションで構成されるコンマ区切りのペアとして指定します。

  • スカラー s — イメージ パッチはサイズが s 行 s 列の正方形領域です。

  • [p s] 形式のベクトル — イメージ パッチはサイズが p 行 s 列の正方形領域または四角形領域です。

既定のイメージ パッチ サイズは 9 行 9 列です。イメージ パッチとは、パッチの一致と修復が考慮されるイメージ領域を指します。

メモ

  • イメージ パッチのサイズは、3 行 3 列以上で、入力イメージのサイズより必ず小さくなければなりません。

データ型: double

出力引数

すべて折りたたむ

修復後のイメージ。サイズとデータ型が入力イメージ I と同じである 2 次元グレースケール イメージまたは RGB イメージとして返されます。

アルゴリズム

見本に基づくイメージ修復アルゴリズムは、以下の手順を使用して入力イメージ内のターゲット領域を復元するパッチ ベースの手法です。

  1. 入力イメージのターゲット領域を識別します。

  2. 入力イメージと同じサイズのバイナリ マスクを生成します。マスク イメージの非ゼロ ピクセルは、修復するターゲット領域に対応していなければなりません。

  3. ソース領域を識別します。入力イメージのターゲット領域を除くすべての領域がソース領域を構成しています。つまり、source region = input image − target regions です。

  4. ターゲット領域の境界ピクセルを中心とした、サイズが p 行 s 列のすべてのパッチに対して、勾配またはテンソルの手法を使用してパッチの優先順位を計算します。

  5. 最高優先順位のパッチを見つけます。このパッチが、修復されるターゲット パッチを構成します。

  6. そのターゲット パッチに対して、差の二乗和 (SSD) を使用することにより、ソース領域内で最適一致のパッチを探索します。

  7. 最適一致のパッチからターゲット パッチにイメージ データをコピーします。

  8. 入力イメージ、マスク、パッチの優先順位の値を更新します。

  9. ターゲット領域が修復されるまで、手順 4 ~ 8 を繰り返します。

参照

[1] Criminisi, A., P. Perez, and K. Toyama. "Region Filling and Object Removal by Exemplar-Based Image Inpainting." IEEE Transactions on Image Processing. Vol. 13, No. 9, 2004, pp. 1200–1212.

[2] Le Meur, O., M. Ebdelli, and C. Guillemot. "Hierarchical Super-Resolution-Based-Inpainting." IEEE Transactions on Image Processing. Vol. 22, No. 10, 2013, pp. 3779–3790.

R2019b で導入