スプライン同士の結合方法

スプライン同士を新たなスプラインをつくって滑らかに接続するにはどのようにしたら良いでしょうか?
接続する点は位置だけでなく、曲率の連続性を持たせた状態にしたいです。
CurveFittingToolboxを使った方法でも良いのでご教授いただければ幸いです。

7 commentaires

Hiroyuki Hishida
Hiroyuki Hishida le 9 Mar 2020
こんにちは。
こういうイメージでしょうか。
菱田
Nobuyuki Tanaka
Nobuyuki Tanaka le 9 Mar 2020
すこしイメージが異なるのでもう少し詳細をお伝えします。
ある点群において全てを1回のスプライン補完ではうまくトレースできなかったので、点群をいくつかに分割して要素要素でスプライン補完をしました。補完したそれぞれのスプライン同士のつなぎ目が滑らかでなかったのでそこを別のスプラインで補完できないかと思っています。
Hiroyuki Hishida
Hiroyuki Hishida le 9 Mar 2020
こんにちは。
関数一発でできる問題ではないようにみえますが、そうでもないかもしれませんので、もう少し情報をください。
「ある点群において全てを1回のスプライン補完」とのことですが、理論的には1回のスプライン補完でうまくトレースできるものでしょうか?
「うまくトレースできなかった」とのことですが、うまくできたできなかったの判断指標はどうされていますか?
「点群をいくつかに分割して要素要素でスプライン補完」とのことですが、元の点はいずれかの要素に必ず1回のみ含まれるということでしょうか?仮にそうだとして、補完するときにこの規則は変更可能でしょうか?
菱田
Shunichi Kusano
Shunichi Kusano le 10 Mar 2020
Modifié(e) : Shunichi Kusano le 10 Mar 2020
もしデータが時系列に並んでいるかつサンプリングレートが一定であれば、x,yそれぞれ独立にスプラインかける、ではダメでしょうか。interp1関数を使います。
Nobuyuki Tanaka
Nobuyuki Tanaka le 10 Mar 2020
x,yそれぞれ独立にスプラインをかける方法を試してみました。
うまくいった部分とそうでない部分がありました。(スプラインのかけ方次第だと思います)おそらく別々にスプラインをかけたことでxとyの相関が崩れる場所があったのだと推測します。
Shunichi Kusano
Shunichi Kusano le 10 Mar 2020
ダメでしたか。全くもって外部の情報で恐縮ですが、自力で組んでいる方もいるようですね。
実際のデータおよび現状の結果を示していただけると、何かアイデアが湧くかもしれませんし、答えられる方が出てくるかもしれません。
ところでノイズまでトレースしようとするのはなぜなのでしょうか。一般的には低減したいものであるかと思うのですが…。
Nobuyuki Tanaka
Nobuyuki Tanaka le 10 Mar 2020
ノイズをトレースしようとはしていません。(誤解を与えてすみません)
ある時間間隔で計測したx,yデータなので、ノイズがのっており除去したいと思っています。ノイズをなくすためにフィルターをかけると捉えたい変化まで平滑化されてしまうので、点群を要素要素に分割して、分割した要素ごとにスプラインでフィッティングしているという状況です。そうすると要素ごとにフィッティングしたスプラインがいくつも作成されますが、それらのつなぎ目が不連続になってしまうのです。

Connectez-vous pour commenter.

Réponses (1)

Nobuyuki Tanaka
Nobuyuki Tanaka le 9 Mar 2020

0 votes

一回のスプライン補完でできないような場合があります。それはあるXに対してYが一つに定まらない場合があるためです。(例:円のような点群の場合、第1象限と第4象限の値は同じXに対してYが+値と-値があるような状態)そのような場合は、XとYを入れ替えてスプライン補完をするということを実施しています。
トレース良否の判断指標としては、もとの点群を結んだ線とスプライン補完後の点群を結んだ線を同時に描いて、その誤差を評価しています。ある一定値以上の誤差があった場合はNG=うまくトレースできていないと判断しています。
点群を分割してスプライン補完した場合、元の点はいずれかの要素に必ず1回のみ含まれるようにしていますが、規則の変更は可能と考えています。ちなみに元の点群は計測した点でありノイズがのっています。それをできるだけトレースしつつ、なめらかにつながる点群(曲率が急変しない状態)に修正したいというのが本来の狙いです。

5 commentaires

Hiroyuki Hishida
Hiroyuki Hishida le 10 Mar 2020
勘違いしてたのかもしれません。「あるXに対してYが一つに定まらない場合」ということは、点群は2次元ですか?であれば、点間を3次スプライン関数などでつなぐならAx=bを解く問題になるのですが、いかがでしょうか?
点群を要素に分割されるときに、何に着目して分割されているかも併せて回答いただけると幸いです。
※「ある一定値以上の誤差」とのことですが、その閾値が実現不可能なものではない保証はどこかでとってください。例えば別手法では達成できている、などでも良いです。
菱田
Nobuyuki Tanaka
Nobuyuki Tanaka le 10 Mar 2020
点群は2次元だと考えていましたが、ある時間間隔でサンプリングしたx,yデータなので時間tを考慮すると3次元となっています。xに対してyが一つに定まらない場合があると述べたのはそのためです。
点群の分割についてはxに対してyが1つに定まるようにしていました。そのようにできない(xに対してyが1つに定まらない)場合はyに対してxが1つに定まるため、xとyを入れ替えてスプライン補完をするという手段をとっていました。
Nobuyuki Tanaka
Nobuyuki Tanaka le 10 Mar 2020
点群を分割した場合、分割した点群要素の最初と最後の点を通るスプライン補完を実施しています。もしそれで元の点群にうまくフィッティングできない場合は、分割した点群要素の途中の点を通るスプライン補完を行ったり、点群の分割をやり直したりしてフィッティングをしてスプラインを要素要素で作成しています。そうするとスプライン間のつなぎ目が滑らかにつながらない状態になってしまうので質問させていただきました。
Hiroyuki Hishida
Hiroyuki Hishida le 11 Mar 2020
Modifié(e) : Hiroyuki Hishida le 11 Mar 2020
間があいて申し訳ございません。以下の理解であってますか?
  • 時間を無視すれば2次元点群があり、これをN個の要素点群に分割する
  • 要素点群にはBスプライン?で近似曲線を求めている
  • 点群と近似曲線の距離が所与の閾値を超えた場合は、要素点群における端点以外も通るように補完している(=その点で要素点群を2分割して、全部でN+1個の点群要素を作成し、Bスプラインを適用しなおす)
  • そしたら、要素点群同士の接続が曲率不連続になったので、なんとかしたい
なお、私には以下がわかっていません。
  • 何を計測しているのか
  • 何に着目して点群を要素点群に分割しているのか
  • 近似曲線と点群の乖離が大きくなるのはどういう性質がある点か
  • 要素点群同士の接続部分において曲率不連続になっている場所とそうでない部分の違いは何か
上記の下でですが、隣り合う点間に対して三次スプラインで繋いでいく方法であれば、素直な計測データであれば曲率連続も保てる?とか思いますが、それではダメだとして、2つほどアドバイスがあります。
[データ計測方法の見直し]
ノイズが問題でFitting失敗しているのであるならば、まずは、計測方法の見直しになります。どんなに良いアルゴリズムであっても、前提から外れるデータには適用できませんし、ノイズが多いデータだとノイジーな結果にしかなりません。
[簡単な例題での理論確認]
Tanaka様手法の理論的妥当性を検証されるのが先かと思いますが、この点いかがでしょうか?直線、単一のコーナーRをもつ線分、単一のピン角をもつ線分などの計測データに対して適用してみることで、手法の良し悪しが明らかになると思います。
※Bスプラインでなくてもよいのであれば、ガウス過程回帰による近似曲線の計算というのも一つかと思います→https://jp.mathworks.com/help/stats/fitrgp.html 
※同じXに対して異なるYをもつ場合があるので陽的な表現ができなくて苦労されているようですが、陰的な表現にしてみる、次元を拡張してみる、ドロネー三角形分割などをして近傍点を認識などはいかがでしょうか?
菱田
Nobuyuki Tanaka
Nobuyuki Tanaka le 13 Mar 2020
記載していただいた理解で概ねあっていますが、要素点群のフィッティングについてもう少し補足すると、
・要素点群全ては指定せずに、点群にある程度沿うようにフィッティングできそうな代表点をいくつか抽出して、スプラインフィッティングを行っています
・点群の分割については明確な基準はなく、感覚的にうまくフィッティングできそうな範囲を絞っています。うまくいかなければその範囲を変えて再度フィッティングしてみるということを繰り返しています
・要素点群ごとにフィッティングしたスプライン同士の接続部分の曲率は必ず不連続になっています
ご指摘いただきましたように、データのノイズが影響しているのはあると思います。また、理論的にスプラインとスプラインをスプラインでうまくつなぐことができない状況になっているのかもしれません。ガウスの過程回帰等の別のフィッティングも試してみます。

Connectez-vous pour commenter.

Catégories

En savoir plus sur Curve Fitting Toolbox 入門 dans Centre d'aide et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!