8

単一チャネルの画像補間について質問したいと思います。簡単にするために単一のチャネルが選択されています。それ以外の場合は、複数のチャネルの画像に取り組んでいます。ゼロ以外の強度値を持ついくつかのピクセルがある純粋な黒の背景 (ピクセル強度 0) を持つ単一チャネル画像があると仮定します。補間アルゴリズムを適用して、画像の黒い領域全体を、隣接する非ゼロ強度ピクセルからの補間値で塗りつぶしたいと考えています。

この問題に適用できるスムーズな補間には、どの補間アルゴリズムをお勧めしますか?

もちろん、入力として、これらの黒以外のピクセルの位置とその強度を知っています。ただし、位置は多少ランダムです (ある行では 10 ピクセル、別の行ではわずか 8 ピクセルの場合があります)。

ここに画像の説明を入力

4

5 に答える 5

6

interp2ポイントが一定の間隔で配置されていないため(グリッド上に座っていないため)、ここでは通常は機能しません。試すか、ファイル交換からTriScatteredInterpダウンロードできます。inpaint_nans

あなたの場合の解決策は次のTriScatteredInterpとおりです。

ここに画像の説明を入力

function solveStackOverflowProblem()
    im = imread('http://i.stack.imgur.com/lMaYR.png');
    im = im(:,:,2);
    [i,j] = find(im);
    y = j; x = i;
    indexes = sub2ind(size(im),i,j);
    interpolator = TriScatteredInterp(x,y,double(im(indexes)));

    [Y,X] = meshgrid( 1:size(im,2),1:size(im,1));
    reconstructedImage = interpolator(X,Y);

    figure;imshow(reconstructedImage/255)
end
于 2012-09-14T17:35:39.267 に答える
4

最善の解決策は、gridfitを使用することです。TriScatteredInterpやgriddataなどのすべてのネイティブMatlab関数を改善するように設計されています。

于 2012-09-14T20:44:50.097 に答える
3

ポイントの数が比較的少ない場合、ポイントを補間する理想的な方法は、三角形のメッシュを作成し、各領域の頂点のみを使用してその領域内のピクセルを決定し、加重平均を使用して各ピクセルの色を決定することです。

三角形領域内のピクセルの色を見つけるために、各ピクセルに使用する重みは、点 A、B、および C に対して、それぞれ (b c-A)/a、(a c-B)/b、および ( a*bC)/c. これにより、ポイントが反対側のエッジに近づくにつれて各ポイントの影響がゼロに低下し、三角形間の遷移がスムーズになります。

計算には、算術だけでなく、調和平均や幾何学的平均など、あらゆるタイプの平均を使用できることに注意してください (外観は変わりますが、他のタイプの平均の方が優れている場合があります)。

三角形の部分にラベルを付ける図

于 2012-09-14T18:09:17.273 に答える
3

これは、Radial Basis Functions (この場合は Gaussian ) を使用して、強度が変化するランダムな間隔のポイントの補間を構築することに基づくソリューションです。

基本的に、これは各ポイントにガウシアンをドロップし、ポイントの強度で重み付けして結果を合計します。

補間関数の鋭さは、選択したガウス関数の標準偏差によって制御できます。

ポイント:

Mathematica グラフィックス

補間:

Mathematica グラフィックス

3D で表示: Mathematica グラフィックス

標準偏差が小さい場合: Mathematica グラフィックス

コード:

pts = Table[{{RandomReal[{0, 200}], RandomReal[{0, 200}]}, 
   RandomReal[]}, {20}]

dists = Function[points, 
  Plus @@ ((PDF[
          MultinormalDistribution[#, 200 IdentityMatrix[2]], {x, 
           y}] & /@ points[[All, 1]] ) points[[All, 2]])/Length@points]

DensityPlot[dists[pts], {x, 0, 200}, {y, 0, 200}, PlotPoints -> 100]
于 2012-09-15T13:14:26.413 に答える
0

このいくつかのゼロ以外のポイントでは、補間は非常に悪く見えますが、ガウス カーネルなどの 2-D フィルターを使用して画像を畳み込んでみて、気に入るかどうかを確認できます。

于 2012-09-14T17:33:36.867 に答える