Main Content

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

inpaintExemplar

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

R2019b 以降

説明

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

Figure contains an axes object. The axes object contains 2 objects of type image, images.roi.ellipse.

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

mask = createMask(h);

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

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

Figure contains an axes object. The axes object with title Image to Be Inpainted | Mask for Inpainting contains an object of type image.

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

J = inpaintExemplar(I,mask);

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

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

Figure contains an axes object. The axes object with title Image to Be Inpainted | Inpainted Image contains an object of type image.

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

I = imread('forestdistorted.png');

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

figure
imshow(I,[])

Figure contains an axes object. The axes object contains an object of type image.

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

mask = imread('imagemask.png');

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

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

Figure contains an axes object. The axes object with title Image to Be Inpainted | Mask for Inpainting contains an object of type image.

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

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

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

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

Figure contains an axes object. The axes object with title Image to Be Inpainted | Inpainted Image contains an object of type image.

入力引数

すべて折りたたむ

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

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

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

データ型: logical

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

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

塗りつぶしの順序。"gradient" または "tensor" を指定します。塗りつぶしの順序は、パッチの優先順位を計算するために使用する優先順位関数を示します。パッチの優先順位の値は、ターゲット領域内のイメージ パッチを塗りつぶす順序を指定します。

データ型: char | string

イメージ パッチのサイズ。次のいずれかの値を指定します。

  • スカラー 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 で導入

すべて展開する