2017-09-01 6 views
2

一部のピクセルが意図的にゼロに変更された画像があります。今、私は双線形補間を行い、双線形補間のように近傍を使って新しいピクセル値を見つけたいと思っています。しかし、画像のサイズを変更したくない(MATLABはリサイズ関数でのみ双線形補間を行うことができます)。イメージのサイズを変更せずにMATLABで補間を使うことはできますか?

リサイズせずにMATLABで双線形補間を行うことはできますか?私は、バイリニアカーネルとの畳み込みがこれを解決するだろうと読んでいます。どのカーネルがこれなのか知っていますか?私がしたいことをすることは可能ですか?

+1

[inplant_nans](https://uk.mathworks.com/matlabcentral/fileexchange/4551-inpaint-nans)が役に立つかもしれません。 0の代わりにこれらのピクセルをNaNにすると、この関数を使用できるはずです。 –

+0

コメントありがとうございました。しかし、私はバイキュービックまたは双線形補間を使用するように求める画像処理アプローチを実装しています。あなたが提案したコードはこれらの補間技術を実行していますか? – mad

+1

私は残念なことに、それらの特定のメソッドがあるとは思わない、私はちょうど画像補間のためにそれを多く使用し、それはかなり良いです。その特定の要件がある場合は、別の場所を見たいと思うかもしれません。 –

答えて

4

あなたはgriddataによってサポートされているオプションのいずれかを使用しようとすることができます:

griddata(..., METHOD) where METHOD is one of 
    'nearest' - Nearest neighbor interpolation 
    'linear' - Linear interpolation (default) 
    'natural' - Natural neighbor interpolation 
    'cubic'  - Cubic interpolation (2D only) 
    'v4'  - MATLAB 4 griddata method (2D only) 
defines the interpolation method. The 'nearest' and 'linear' methods 
have discontinuities in the zero-th and first derivatives respectively, 
while the 'cubic' and 'v4' methods produce smooth surfaces. All the 
methods except 'v4' are based on a Delaunay triangulation of the data. 

% create sample data 
[X, Y] = meshgrid(1:10, 1:10); 
Z_original = X.*Y; 

% remove a data point 
Z_distorted = Z_original; 
Z_distorted(5, 5) = nan; 

% reconstruct 
valid = ~isnan(Z_distorted); 
Z_reconstructed = Z_distorted; 
Z_reconstructed(~valid) = griddata(X(valid),Y(valid),Z_distorted(valid),X(~valid),Y(~valid)); 

% plot the result 
figure 
surface(Z_original); 

figure 
surface(Z_distorted); 

figure 
surface(Z_reconstructed); 

enter image description here enter image description here

+0

あなたの例では、行列X、Y、Zを持ち、ZはXとYによって形成されています。私は1500x1500x3次元の行列Zしか持っていません。あなたの例のように、私のZ行列を行列XとYで分割するにはどうしたらいいですか? – mad

+0

'[X、Y] = meshgrid(1:1500,1:1500)'。 X、Yは、Zを評価した各点の座標です。おそらく、3次元を独立して補間したいと思うかもしれません。 – m7913d

関連する問題