Main Content

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

inpaintCoherent

コヒーレンス トランスポートに基づくイメージ修復を使用した、特定のイメージ領域の復元

説明

J = inpaintCoherent(I,mask) は、コヒーレンス トランスポートに基づく修復方法を使用して、入力イメージの特定の領域を復元します。mask は、修復を通じて塗りつぶされる、イメージ内のターゲット領域を示す論理イメージです。

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

すべて折りたたむ

修復するイメージをワークスペースに読み取ります。このイメージには、削除するテキスト オーバーレイが含まれています。

I = imread('overlayimage.png');

マスク イメージをワークスペースに読み取ります。このマスク イメージには、修復するイメージに存在するオーバーレイされたテキスト領域が含まれています。

mask = imread('text.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.

テキスト オーバーレイを削除して元のイメージを修復します。

J = inpaintCoherent(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('coloredChips.png');

イメージを表示します。

figure
imshow(I,[])

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

h = drawcircle('Center',[130,42],'Radius',40);

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

修復する複数の ROI の選択

反復して複数の ROI を選択することもできます。

修復する領域の数を 6 に設定します。

numRegion = 6;

各領域の中心と半径を指定します。

roiCenter = [130 42;433 78;208 108;334 124;434 167;273 58];
roiRadius = [40 50 40 40 40 30];

drawcircle に名前と値のペア CenterRadius を指定し、反復して複数の円 ROI を選択します。

roi = cell([numRegion,1]);
for i = 1:numRegion
    c = roiCenter(i,:);
    r = roiRadius(i);
    h = drawcircle('Center',c,'Radius',r);
    roi{i} = h;
end

Figure contains an axes object. The axes object contains 8 objects of type image, images.roi.circle.

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

mask = zeros(size(I,1),size(I,2));
for i = 1:numRegion
    newmask = createMask(roi{i});
    mask = xor(mask,newmask);
end

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

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 内のオブジェクトを削除します。標準偏差 0.5 と修復半径 1 を指定します。

J = inpaintCoherent(I,mask,'SmoothingFactor',0.5,'Radius',1);

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

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 列のグレースケール イメージまたは m x n x 3 の RGB カラー イメージとして指定します。

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

ターゲット領域の空間マスク。m 行 n 列の 2 次元バイナリ イメージとして指定します。ここで、m と n は入力イメージ I の次元です。mask の非ゼロ ピクセルは、修復を通じて塗りつぶされるターゲット領域を構成します。

メモ

データ型: logical

名前と値の引数

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

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

例: J = inpaintCoherent(I,mask,'Radius',7)

ガウス フィルターの標準偏差。正の数値として指定します。この値は、コヒーレンス方向を推定する際に、ガウス フィルターのスケールを計算するために使用されます。

修復半径。正の整数として指定します。修復半径は、修復するピクセルを中心とした円近傍領域の半径を意味します。

出力引数

すべて折りたたむ

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

ヒント

  • 修復結果は名前と値のペアの指定によって変化します。RadiusSmoothingFactor の値を変更して、異なる結果を得ることができます。

  • バイナリ マスク イメージ内の各 ROI は、修復するイメージ内の対応する領域を囲むことができるよう十分に大きくなければなりません。

アルゴリズム

コヒーレンス トランスポートに基づく修復方法は、オブジェクトを削除してイメージ内の領域を塗りつぶすピクセル ベースの手法です [1]。修復は、ターゲット領域の境界ピクセルから開始され、内側に向かって実行されます。ピクセルの修復値は、既知の値を持つコヒーレントな近傍ピクセルから推定されます。含まれる手順をまとめると以下のとおりです。

  1. 塗りつぶすまたは修復する入力イメージからターゲット領域を特定します。入力イメージと同じサイズのバイナリ マスクを生成します。マスク イメージの非ゼロ ピクセルには、修復するターゲット領域が含まれていなければなりません。

    ターゲット領域内のピクセルが修復される順序は、ターゲット領域の境界までの各ピクセルのユークリッド距離から計算されます。

  2. ターゲット領域内のピクセルの修復値は、その修復半径内にある既知のピクセル値の加重平均です。コヒーレンス方向に沿った既知のピクセルには、コヒーレントでない近傍ピクセルよりも大きな重みが割り当てられます。コヒーレンス方向は、構造テンソルを使用して推定されます。

参照

[1] F. Bornemann and T. März. "Fast Image Inpainting Based on Coherence Transport." Journal of Mathematical Imaging and Vision. Vol. 28, 2007, pp. 259–278.

拡張機能

バージョン履歴

R2019a で導入

すべて展開する