ドキュメンテーション

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

inpaintCoherent

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

説明

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

J = inpaintCoherent(___,Name,Value) では、前の構文の入力引数に加えて、1 つ以上の名前と値のペアの引数を使用してオプションを指定します。

すべて折りたたむ

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

I = imread('overlayimage.png');

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

mask = imread('text.png');

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

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

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

J = inpaintCoherent(I,mask);

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

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

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

I = imread('coloredChips.png');

イメージを表示します。

figure
imshow(I,[])

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

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

修復する複数の 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

関数 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'])

修復を通じて ROI 内のオブジェクトを削除します。標準偏差 0.5 と修復半径 1 を指定します。

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

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

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

入力引数

すべて折りたたむ

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

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

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

メモ

データ型: 論理値

名前と値のペアの引数

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

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

ガウス フィルターの標準偏差。'SmoothingFactor' と正のスカラーで構成されるコンマ区切りペアとして指定します。この値は、コヒーレンス方向を推定する際に、ガウス フィルターのスケールを計算するために使用されます。

修復半径。'Radius' と正の整数値で構成されるコンマ区切りのペアとして指定します。修復半径は、修復するピクセルを中心とした円近傍領域の半径を意味します。

出力引数

すべて折りたたむ

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

ヒント

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

  • バイナリ マスク イメージ内の各 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 で導入