3

画像から抽出された輪郭のピクセルを表す一連の順序付けられた離散データ ポイントに B スプラインを当てはめようとしています。

以下のコードは、いくつかの単純な形状では正常に機能しますが、他の形状では機能しません (例については、添付の画像を参照してください)。なぜこれが起こるのでしょうか? この問題にアプローチするより良い方法は何でしょうか?

私は微分幾何学にまったく慣れていません。洞察や情報に感謝します。ありがとう。

% data contains two columns representing x,y coordinates of pixels
x = data(:, 1); 
y = data(:, 2); 
plot(x, y, 'bo');
fittedmodel = fit(x, y, 'cubicinterp');
plot(fittedmodel, 'r-');

例

4

1 に答える 1

5

何が悪かったのか?

2 つの数値セットがありxy両方のセットに同じ数の要素があります。
次のように仮定
します。セット内のすべてのペアに対してfそのような機能があること。 b. セット内のポイントが順序付けられていること: つまり、thenの曲線をたどると、 「前に来る」.f( x_i ) = y_i x_i,y_i
f(x)x_ix_{i+1}

これらの仮定は、あなたが持っている「正しいフィット」の例にも当てはまります。それらは、「不適切な適合」の例ではもはや有効ではありません。
自分でわかるように、上の入力コンターは として表すことができませんy = f(x)。これは、の対応する値x2 つ存在する可能性があるためです (数学関数yの定義を参照してください)。得られた近似は、与えられたペアを与えることができる数学関数に最も近いものです (赤い曲線は、それぞれが 1 つの値しか持たないという特性を持っています)。y = f(x)x,yxy

あなたは何ができますか?

ほとんどの場合、2D 曲線を当てはめようとするとき、パラメトリック曲線を検索します。つまり、曲線に沿った各点をいくつかのtとして表すことができるような補助パラメータを導入します。 さて、仮定bが成り立つ場合(そしてあなたの例を見ると、そうであるかどうかはわかりません)、あなたができることは[x(t), y(t)]0<=t<=1

 t = linspace( 0, 1, numel(x) ); % define the parameter t
 fitX = fit( t, x, 'cubicinterp'); % fit x as a function of parameter t
 fitY = fit( t, y, 'cubicinterp'); % fit y as a function of parameter t
 plot( fitX, fitY, 'r-' ); % plot the parametric curve
于 2013-05-06T13:57:14.303 に答える