Catmull-Romスプラインは カーディナルスプライン の特殊なケースです。これはパラメータ間隔が一様である ことを前提としています。
メートル け = p け + 1 − p け − 1 2 {\displaystyle {\boldsymbol {m}}_{k}={\frac {{\boldsymbol {p}}_{k+1}-{\boldsymbol {p}}_{k-1}}{2}}} 3次エルミートスプラインの定義 式:
p ( t ) = ( 2 t 3 − 3 t 2 + 1 ) p け + ( t 3 − 2 t 2 + t ) メートル け + ( − 2 t 3 + 3 t 2 ) p け + 1 + ( t 3 − t 2 ) メートル け + 1 {\displaystyle {\boldsymbol {p}}(t)=\left(2t^{3}-3t^{2}+1\right){\boldsymbol {p}}_{k}+\left(t^{3}-2t^{2}+t\right){\boldsymbol {m}}_{k}+\left(-2t^{3}+3t^{2}\right){\boldsymbol {p}}_{k+1}+\left(t^{3}-t^{2}\right){\boldsymbol {m}}_{k+1}} Catmull-Romスプラインの次の式が得られます。
p ( t ) = 1 2 [ t 3 t 2 t 1 ] [ − 1 3 − 3 1 2 − 5 4 − 1 − 1 0 1 0 0 2 0 0 ] [ p け − 1 p け p け + 1 p け + 2 ] {\displaystyle {\boldsymbol {p}}(t)={\frac {1}{2}}{\begin{bmatrix}t^{3}&t^{2}&t&1\end{bmatrix}}{\begin{bmatrix}-1&3&-3&1\\2&-5&4&-1\\-1&0&1&0\\0&2&0&0\end{bmatrix}}{\begin{bmatrix}{\boldsymbol {p}}_{k-1}\\{\boldsymbol {p}}_{k}\\{\boldsymbol {p}}_{k+1}\\{\boldsymbol {p}}_{k+2}\end{bmatrix}}} この曲線はエドウィン・キャットマル とラファエル・ロム にちなんで名付けられました。この手法の主な利点は、元の点群に沿った点がスプライン曲線の制御点も構成することです。[ 1 ]
Catmull-Romスプラインの例[ 2 ] 曲線の両端に2点ずつ追加する必要があります。均一なCatmull-Rom法の実装では、ループや自己交差が発生する可能性があります。弦型および求心型のCatmull-Rom法 の実装[ 3 ] はこの問題を解決しますが、計算方法が若干異なります。[ 4 ] コンピュータグラフィックスにおいて、Catmull-Romスプラインは重要な瞬間間の滑らかな動きを表現するための一般的な方法です。[ 5 ] 例えば、一連のカメラキーフレームを滑らかなカメラパスに変換するためによく使用されます。[ 6 ]
定義(キャットマルとロムによる)参照論文[ 1 ] は、定義点を通過するスプラインのクラスに関するものです。以下のブレンディング関数のグラフと実験結果が示されています。「ケース3」はCatmull-Romスプライン曲線です。 [ 7 ]
間隔幅 微分可能性 タイプ 基数関数の多項式の次数 ケース1 3 1 Bスプライン ケース2 4 2 ベジエ ケース3 4 1 Bスプライン 1 ケース4 6 2 Bスプライン 2
スプラインのモデルは次のとおりです。
F ( t ) = ∑ j p j C j け ( t ) {\displaystyle \mathbf {F} (t)=\sum _{j}^{}{\mathbf {p} }_{j}C_{jk}(t)} ここで、 は定義点であり、は区間 にシフトされたブレンディング関数です。 p j {\displaystyle {\mathbf {p} }_{j}} C j け ( t ) {\displaystyle C_{jk}(t)} C 0 、 け ( t ) {\displaystyle C_{0,k}(t)} 0 ≤ t < 1 {\displaystyle 0\leq t<1}
以下は、左から、ブレンド関数、それをシフトした、曲線の例です。 C 0 、 け ( t ) {\displaystyle C_{0,k}(t)} C j け ( t ) {\displaystyle C_{jk}(t)} F ( t ) {\displaystyle \mathbf {F} (t)}
ブレンディング関数は以下の基数関数である: [ 注 1 ]
C 0 、 け ( t ) = ∑ 私 = 0 け [ ∏ j = 私 − け j ≠ 0 私 ( t j + 1 ) ] わ ( t + 私 ) {\displaystyle C_{0,k}(t)=\sum _{i=0}^{k}\left[\prod _{\begin{array}{c}j=ik\\j\neq 0\end{array}}^{i}\left({\frac {t}{j}}+1\right)\right]w(t+i)} 線形ラグランジュ補間が使用されるため、結果は次のようになります。 け = 1 {\displaystyle k=1}
C 0 、 1 ( t ) = ( 1 − t ) わ ( t ) + ( 1 + t ) わ ( 1 + t ) {\displaystyle C_{0,1}(t)=(1-t)w(t)+(1+t)w(1+t)} ここで、は2次均一Bスプラインの基底関数をシフトすることによって得られるブレンド関数です。 わ ( t ) {\displaystyle w(t)}
以下は、左から、2 次均一 B スプラインのブレンド関数とシフト前の基底関数です。
各項のグラフは次のとおりです。 C 0 、 1 ( t ) {\displaystyle C_{0,1}(t)}
これを次のように適用します: わ ( t ) {\displaystyle w(t)} C 0 、 1 ( t ) {\displaystyle C_{0,1}(t)}
C 0 、 1 ( t ) = { 1 2 t 3 + 5 2 t 2 + 4 t + 2 f o r − 2 ≤ t < − 1 − 3 2 t 3 − 5 2 t 2 + 1 f o r − 1 ≤ t < 0 3 2 t 3 − 5 2 t 2 + 1 f o r 0 ≤ t < 1 − 1 2 t 3 + 5 2 t 2 − 4 t + 2 f o r 1 ≤ t < 2 {\displaystyle C_{0,1}(t)=\left\{{\begin{array}{ll}{\frac {1}{2}}t^{3}+{\frac {5}{2}}t^{2}+4t+2&for\quad -2\leq t<-1\\-{\frac {3}{2}}t^{3}-{\frac {5}{2}}t^{2}+1&for\quad -1\leq t<0\\{\frac {3}{2}}t^{3}-{\frac {5}{2}}t^{2}+1&for\quad 0\leq t<1\\-{\frac {1}{2}}t^{3}+{\frac {5}{2}}t^{2}-4t+2&for\quad 1\leq t<2\end{array}}\right.} が得られる。これを区間 にずらすと が得られ、これを行列形式に整理すると以下のようになる。 0 ≤ t < 1 {\displaystyle 0\leq t<1} C j 1 ( t ) {\displaystyle C_{j1}(t)}
F ( t ) = 1 2 [ t 3 t 2 t 1 ] [ − 1 3 − 3 1 2 − 5 4 − 1 − 1 0 1 0 0 2 0 0 ] [ p j p j + 1 p j + 2 p j + 3 ] {\displaystyle \mathbf {F} (t)={\frac {1}{2}}{\begin{bmatrix}t^{3}&t^{2}&t&1\end{bmatrix}}{\begin{bmatrix}-1&3&-3&1\\2&-5&4&-1\\-1&0&1&0\\0&2&0&0\end{bmatrix}}{\begin{bmatrix}{\mathbf {p} }_{j}\\{\mathbf {p} }_{j+1}\\{\mathbf {p} }_{j+2}\\{\mathbf {p} }_{j+3}\end{bmatrix}}} これは 3 次エルミート スプラインによる定義と一致します。
プロパティ
Bスプラインとの比較 キャットマル・ロムスプライン曲線は定義点を通過する補間曲線であるのに対し、Bスプライン曲線は制御点を通過しない近似曲線である。[ 8 ]
以下は、左から、ブレンディング関数、シフト前の基底関数、3次均一Bスプラインの曲線の例です。
連続 Catmull-Rom スプライン曲線は、その定義と次の式により C1 連続ですが、C2 連続ではありません。
F け ′ ( 1 ) = 1 2 [ 0 − 1 0 1 ] [ p け − 1 p け p け + 1 p け + 2 ] = F け + 1 ′ ( 0 ) = 1 2 [ − 1 0 1 0 ] [ p け p け + 1 p け + 2 p け + 3 ] {\displaystyle {\mathbf {F} }_{k}'(1)={\frac {1}{2}}{\begin{bmatrix}0&-1&0&1\end{bmatrix}}{\begin{bmatrix}{\mathbf {p} }_{k-1}\\{\mathbf {p} }_{k}\\{\mathbf {p} }_{k+1}\\{\mathbf {p} }_{k+2}\end{bmatrix}}={\mathbf {F} }_{k+1}'(0)={\frac {1}{2}}{\begin{bmatrix}-1&0&1&0\end{bmatrix}}{\begin{bmatrix}{\mathbf {p} }_{k}\\{\mathbf {p} }_{k+1}\\{\mathbf {p} }_{k+2}\\{\mathbf {p} }_{k+3}\end{bmatrix}}} F け ″ ( 1 ) = [ − 1 4 − 5 2 ] [ p け − 1 p け p け + 1 p け + 2 ] ≠ F け + 1 ″ ( 0 ) = [ 2 − 5 4 − 1 ] [ p け p け + 1 p け + 2 p け + 3 ] {\displaystyle {\mathbf {F} }_{k}''(1)={\begin{bmatrix}-1&4&-5&2\end{bmatrix}}{\begin{bmatrix}{\mathbf {p} }_{k-1}\\{\mathbf {p} }_{k}\\{\mathbf {p} }_{k+1}\\{\mathbf {p} }_{k+2}\end{bmatrix}}\neq {\mathbf {F} }_{k+1}''(0)={\begin{bmatrix}2&-5&4&-1\end{bmatrix}}{\begin{bmatrix}{\mathbf {p} }_{k}\\{\mathbf {p} }_{k+1}\\{\mathbf {p} }_{k+2}\\{\mathbf {p} }_{k+3}\end{bmatrix}}}
自己交差 曲線の途中で定義点間の間隔の差が大きい場合、尖点や自己交差が発生することがあります。 [ 注 2 ]
以下は自己交差の例です。
ベジェ曲線への変換変換されたベジェ曲線の例(赤:ベジェ曲線の制御点) 3次ベジェ曲線の行列形式は次のようになります。
P ( t ) = [ t 3 t 2 t 1 ] [ − 1 3 − 3 1 3 − 6 3 0 − 3 3 0 0 1 0 0 0 ] [ p b z 0 p b z 1 p b z 2 p b z 3 ] {\displaystyle \mathbf {P} (t)={\begin{bmatrix}t^{3}&t^{2}&t&1\end{bmatrix}}{\begin{bmatrix}-1&3&-3&1\\3&-6&3&0\\-3&3&0&0\\1&0&0&0\end{bmatrix}}{\begin{bmatrix}{\mathbf {p_{bz}} }_{0}\\{\mathbf {p_{bz}} }_{1}\\{\mathbf {p_{bz}} }_{2}\\{\mathbf {p_{bz}} }_{3}\end{bmatrix}}} Catmull-Romスプライン曲線と等価な3次ベジェ曲線の制御点は次のとおりです。
[ p b z 0 p b z 1 p b z 2 p b z 3 ] = [ − 1 3 − 3 1 3 − 6 3 0 − 3 3 0 0 1 0 0 0 ] − 1 1 2 [ − 1 3 − 3 1 2 − 5 4 − 1 − 1 0 1 0 0 2 0 0 ] [ p k − 1 p k p k + 1 p k + 2 ] = 1 6 [ 0 6 0 0 − 1 6 1 0 0 1 6 − 1 0 0 6 0 ] [ p k − 1 p k p k + 1 p k + 2 ] {\displaystyle {\begin{bmatrix}{\mathbf {p_{bz}} }_{0}\\{\mathbf {p_{bz}} }_{1}\\{\mathbf {p_{bz}} }_{2}\\{\mathbf {p_{bz}} }_{3}\end{bmatrix}}={\begin{bmatrix}-1&3&-3&1\\3&-6&3&0\\-3&3&0&0\\1&0&0&0\end{bmatrix}}^{-1}{\frac {1}{2}}{\begin{bmatrix}-1&3&-3&1\\2&-5&4&-1\\-1&0&1&0\\0&2&0&0\end{bmatrix}}{\begin{bmatrix}{\mathbf {p} }_{k-1}\\{\mathbf {p} }_{k}\\{\mathbf {p} }_{k+1}\\{\mathbf {p} }_{k+2}\end{bmatrix}}={\frac {1}{6}}{\begin{bmatrix}0&6&0&0\\-1&6&1&0\\0&1&6&-1\\0&0&6&0\end{bmatrix}}{\begin{bmatrix}\mathbf {p} _{k-1}\\\mathbf {p} _{k}\\\mathbf {p} _{k+1}\\\mathbf {p} _{k+2}\end{bmatrix}}} 2つのCatmull-Romスプラインの直交座標積をとることで、点のグリッドを補間する2変量曲面を得ることができます。[ 9 ] 。
これは次の式で表される双三次パッチです。
F ( t , u ) = [ t 3 t 2 t 1 ] M [ p 11 p 12 p 13 p 14 p 21 p 22 p 23 p 24 p 31 p 32 p 33 p 34 p 41 p 42 p 43 p 44 ] M T [ u 3 u 2 u 1 ] {\displaystyle \mathbf {F} (t,u)={\begin{bmatrix}t^{3}&t^{2}&t&1\end{bmatrix}}\mathbf {M} {\begin{bmatrix}{\mathbf {p} }_{11}&{\mathbf {p} }_{12}&{\mathbf {p} }_{13}&{\mathbf {p} }_{14}\\{\mathbf {p} }_{21}&{\mathbf {p} }_{22}&{\mathbf {p} }_{23}&{\mathbf {p} }_{24}\\{\mathbf {p} }_{31}&{\mathbf {p} }_{32}&{\mathbf {p} }_{33}&{\mathbf {p} }_{34}\\{\mathbf {p} }_{41}&{\mathbf {p} }_{42}&{\mathbf {p} }_{43}&{\mathbf {p} }_{44}\end{bmatrix}}\mathbf {M} ^{T}{\begin{bmatrix}u^{3}\\u^{2}\\u\\1\end{bmatrix}}} どこ
M = 1 2 [ − 1 3 − 3 1 2 − 5 4 − 1 − 1 0 1 0 0 2 0 0 ] {\displaystyle \mathbf {M} ={\frac {1}{2}}{\begin{bmatrix}-1&3&-3&1\\2&-5&4&-1\\-1&0&1&0\\0&2&0&0\end{bmatrix}}} パッチは中央の4点を補間します。隣接するパッチは1次導関数の連続性を持ちます。
張力パラメータの拡張 キーフレーム間の補間モーションに対するテンションパラメータの視覚効果の例(白丸:キーフレーム、青:、緑:、赤:)τ = 0.2 {\displaystyle \tau =0.2} τ = 0.5 {\displaystyle \tau =0.5} τ = 1.0 {\displaystyle \tau =1.0} 場合によっては、Catmull-Rom スプラインは次のようになります。
m k = τ ( p k + 1 − p k − 1 ) {\displaystyle {\boldsymbol {m}}_{k}=\tau ({\boldsymbol {p}}_{k+1}-{\boldsymbol {p}}_{k-1})} 、ここで接線ベクトルの係数は に置き換えられる。[ 10 ] 。 1 / 2 {\displaystyle 1/2} τ {\displaystyle \tau }
この場合の定義式は次のようになります。
p ( t ) = [ t 3 t 2 t 1 ] [ − τ 2 − τ τ − 2 τ 2 τ τ − 3 3 − 2 τ − τ − τ 0 τ 0 0 1 0 0 ] [ p k − 1 p k p k + 1 p k + 2 ] {\displaystyle {\boldsymbol {p}}(t)={\begin{bmatrix}t^{3}&t^{2}&t&1\end{bmatrix}}{\begin{bmatrix}-\tau &2-\tau &\tau -2&\tau \\2\tau &\tau -3&3-2\tau &-\tau \\-\tau &0&\tau &0\\0&1&0&0\end{bmatrix}}{\begin{bmatrix}{\boldsymbol {p}}_{k-1}\\{\boldsymbol {p}}_{k}\\{\boldsymbol {p}}_{k+1}\\{\boldsymbol {p}}_{k+2}\end{bmatrix}}} とコハネク・バルテルススプライン の張力パラメータ( と表記) の関係は次の通りである。 [ 11 ] τ {\displaystyle \tau } τ K B {\displaystyle \tau _{KB}}
τ = 1 − τ K B 2 {\displaystyle \tau ={\frac {1-\tau _{KB}}{2}}} 変換されたベジェ曲線の例()τ = 1.0 {\displaystyle \tau =1.0} 同等の 3 次ベジェ曲線の制御点は次のとおりです。
[ p b z 0 p b z 1 p b z 2 p b z 3 ] = 1 3 [ 0 3 0 0 − τ 3 τ 0 0 τ 3 − τ 0 0 3 0 ] [ p k − 1 p k p k + 1 p k + 2 ] {\displaystyle {\begin{bmatrix}{\mathbf {p_{bz}} }_{0}\\{\mathbf {p_{bz}} }_{1}\\{\mathbf {p_{bz}} }_{2}\\{\mathbf {p_{bz}} }_{3}\end{bmatrix}}={\frac {1}{3}}{\begin{bmatrix}0&3&0&0\\-\tau &3&\tau &0\\0&\tau &3&-\tau \\0&0&3&0\end{bmatrix}}{\begin{bmatrix}\mathbf {p} _{k-1}\\\mathbf {p} _{k}\\\mathbf {p} _{k+1}\\\mathbf {p} _{k+2}\end{bmatrix}}}
参照
注記 ^ 積表記は「、 を除く」を表し、次と同等です。 i − k ≤ j ≤ i {\displaystyle i-k\leq j\leq i} 0 {\displaystyle 0} C 0 , k ( t ) = ∑ i = 0 k w ( t + i ) ∏ j = i − k i { 1 f o r j = 0 t j + 1 o t h e r w i s e {\displaystyle C_{0,k}(t)=\sum _{i=0}^{k}w(t+i)\prod _{j=i-k}^{i}\left\{{\begin{array}{ll}1&for\quad j=0\\{\frac {t}{j}}+1&otherwise\end{array}}\right.} ^ 最初または最後の定義点が隣接する定義点と重なっていても問題ありません。これは、「余分な」定義点を隠すためのテクニックとして意図的に使用されることがあり、上の例はこのように作成されました。
参考文献 ^ a b Catmull, Edwin; Rom, Raphael (1974)、「A Class of Local Interpolating Splines」 、Computer Aided Geometric Design 、Elsevier、pp. 317– 326、doi : 10.1016/b978-0-12-079050-0.50020-5 、ISBN 978-0-12-079050-0 、2026年1月6日取得 {{citation }}: CS1 maint: work parameter with ISBN (link )^ Catmull, Rom (1974)、p.325 図5 ^ N. Dyn, MS Floater, K. Hormann. 反復弦および求心パラメータ化に基づく4点曲線分割. コンピュータ支援幾何学設計, 26(3):279–286, 2009. ^ PJ BarryとRN Goldman. Catmull-Romスプラインのクラスに対する再帰評価アルゴリズム. SIGGRAPH Computer Graphics, 22(4):199–204, 1988. ^ Gao, Tianmu; Zou, Danping; Chen, Chao Ping; Wu, Xiaojun; Hu, Haiyang (2025-02-28). 「マルチセンサーSLAMとCatmull–Romスプラインに基づくオンラインレーンマッピング」 . 計測科学技術 . 36 (2): 026318. doi : 10.1088/1361-6501/ada8c8 . ISSN 0957-0233 . ^ Piotrowski, Lisa; Motejat, Michael; Rössl, Christian; Theisel, Holger (2024). 「OptFlowCam: 極端なスケール変化のあるシーンにおけるカメラパスのためのカメラ空間における3D画像フローベースメトリック」 コンピュータグラフィックスフォーラム . 43 (2). doi : 10.1111 /cgf.15056 . ISSN 0167-7055 . ^ ドキュメントを読む - 均一な Catmull–Rom スプライン ^ キャットマル、ロム(1974)、319ページ ^ キャットマル、ロム(1974)、pp.322-323 ^ Christopher Twigg (2003). 「Catmull–Romスプライン」 (PDF) . カーネギーメロン大学コンピュータグラフィックス研究所. 2025年6月10日 閲覧 。 ^ Kochanek, Doris HU; Bartels, Richard H. (1984). 「局所張力、連続性、バイアス制御によるスプライン補間」 . ACM SIGGRAPH コンピュータグラフィックス . 18 (3): 36– 37. doi : 10.1145/800031.808575 . ISBN 0-89791-138-5 。
引用文献 de Boor, Carl (1978).スプライン実用ガイド . ISBN 0-387-90356-9 。 Gordon, William J.; Riesenfeld, Richard F. (1974)「Bスプライン曲線と曲面」、Barnhill, Robert E.; Riesenfeld, Richard F. (編)、『コンピュータ支援幾何学設計 - ユタ大学、ソルトレイクシティ、ユタ州、1974年3月18日~21日開催の会議録』 、Academic Press、 95~ 126頁、ISBN 0-12-079050-5