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

11 views (last 30 days)
Nobuyuki Tanaka
Nobuyuki Tanaka on 9 Mar 2020
Commented: Nobuyuki Tanaka on 13 Mar 2020
スプライン同士を新たなスプラインをつくって滑らかに接続するにはどのようにしたら良いでしょうか?
接続する点は位置だけでなく、曲率の連続性を持たせた状態にしたいです。
CurveFittingToolboxを使った方法でも良いのでご教授いただければ幸いです。
  7 Comments
Shunichi Kusano
Shunichi Kusano on 10 Mar 2020
ダメでしたか。全くもって外部の情報で恐縮ですが、自力で組んでいる方もいるようですね。
実際のデータおよび現状の結果を示していただけると、何かアイデアが湧くかもしれませんし、答えられる方が出てくるかもしれません。
ところでノイズまでトレースしようとするのはなぜなのでしょうか。一般的には低減したいものであるかと思うのですが…。
Nobuyuki Tanaka
Nobuyuki Tanaka on 10 Mar 2020
ノイズをトレースしようとはしていません。(誤解を与えてすみません)
ある時間間隔で計測したx,yデータなので、ノイズがのっており除去したいと思っています。ノイズをなくすためにフィルターをかけると捉えたい変化まで平滑化されてしまうので、点群を要素要素に分割して、分割した要素ごとにスプラインでフィッティングしているという状況です。そうすると要素ごとにフィッティングしたスプラインがいくつも作成されますが、それらのつなぎ目が不連続になってしまうのです。

Sign in to comment.

Answers (1)

Nobuyuki Tanaka
Nobuyuki Tanaka on 9 Mar 2020
一回のスプライン補完でできないような場合があります。それはあるXに対してYが一つに定まらない場合があるためです。(例:円のような点群の場合、第1象限と第4象限の値は同じXに対してYが+値と-値があるような状態)そのような場合は、XとYを入れ替えてスプライン補完をするということを実施しています。
トレース良否の判断指標としては、もとの点群を結んだ線とスプライン補完後の点群を結んだ線を同時に描いて、その誤差を評価しています。ある一定値以上の誤差があった場合はNG=うまくトレースできていないと判断しています。
点群を分割してスプライン補完した場合、元の点はいずれかの要素に必ず1回のみ含まれるようにしていますが、規則の変更は可能と考えています。ちなみに元の点群は計測した点でありノイズがのっています。それをできるだけトレースしつつ、なめらかにつながる点群(曲率が急変しない状態)に修正したいというのが本来の狙いです。
  5 Comments
Hiroyuki Hishida
Hiroyuki Hishida on 11 Mar 2020
Edited: Hiroyuki Hishida on 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 on 13 Mar 2020
記載していただいた理解で概ねあっていますが、要素点群のフィッティングについてもう少し補足すると、
・要素点群全ては指定せずに、点群にある程度沿うようにフィッティングできそうな代表点をいくつか抽出して、スプラインフィッティングを行っています
・点群の分割については明確な基準はなく、感覚的にうまくフィッティングできそうな範囲を絞っています。うまくいかなければその範囲を変えて再度フィッティングしてみるということを繰り返しています
・要素点群ごとにフィッティングしたスプライン同士の接続部分の曲率は必ず不連続になっています
ご指摘いただきましたように、データのノイズが影響しているのはあると思います。また、理論的にスプラインとスプラインをスプラインでうまくつなぐことができない状況になっているのかもしれません。ガウスの過程回帰等の別のフィッティングも試してみます。

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!