2016-06-28 35 views
0

私は現在、撮影した画像を較正するために2次元マトリックスを塗りつぶしています。 Matlab、2つのベクトル間のデータを補間する

ので、私が作成した実行します。

vector1 = linspace(0.037, 0.03175, 256); 

このベクターは、理想的には、行列の最初の行です。

Iは、別のベクトルを有する:

vector2 = linspace(0.0288, 0.0277, 256); 

vector2vector1間とを補間し、それらをRow 1 = vector1Row 168 = vector2のマトリクス内に挿入することが持っているどのような方法がある場合、私は思っていました。

168行、256列が必要です。

ご協力いただければ幸いです。

私はむしろあなたが2の間の単純な線形補間をしたい場合は、ベクトルV1V2のそれぞれに重みを適用し、それらを一緒に追加することができます....手動

答えて

2

を168行を行う必要はありませ思います。上部のV1は、1で重み付けされ、V2は、0で重み付けされます。同様に、下部には、V2は、1で重み付けし、V1は、0で重み付けする必要があります。すべての他にどこ重みが1に追加する必要があり、行は上部または下部にどれだけ近いかに基づいてV1V2を重み付けします。

V3 = alpha * V1 + (1 - alpha) * V2; 

我々はV1V2の重み付きバージョンを作成するために、行列の乗算を使用して、V3を取得するために一緒に結果を追加することができます。

nRows = 168; 

alpha = linspace(1, 0, nRows); 
V3 = alpha(:) * V1 + (1 - alpha(:)) * V2; 
2

次のようにあなただけのinterp1を使用することができます。

m = interp1([1 2],[vector1;vector2],linspace(1,2,168)) 
+0

すごいです!完璧に働きました。ありがとう – user2852630

+0

してください。upvote \ accept answer ... :) – bla

+0

異なる補間方法(スプライン、キュービックなど)で再生することもできます。interp1のドキュメントを参照してください。 – bla

1

特定のアプリケーションのために、それはおそらく過剰ですが、あなたはあなたの入力点を使用して、2Dバイリニア補間を実行するためにgriddataを使用することができますが。

H = 168; 
W = 256; 
vector1 = linspace(0.037,0.03175,W); 
vector2 = linspace(0.0288,0.0277,W); 
[Wmat,Hmat] = meshgrid(1:W,1:H); 
img = griddata([1:W,1:W],[ones(1,W), H*ones(1,W)],[vector1 vector2],Wmat,Hmat,'linear') 

結果が正しいように思わ:この特定のケースでは、私は結果はおそらく同じになると考えていが、これは必ずしも、あなたのデータの手動1D補間と同じ結果が得られないでしょう

>> all(abs(img(1,:)-vector1)<1e-10) 

ans = 

    1 

>> all(abs(img(end,:)-vector2)<1e-10) 

ans = 

    1 
関連する問題