맨위로가기

B-스플라인 곡선

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

B-스플라인 곡선은 제어점들을 연결하여 부드러운 곡선을 생성하는 데 사용되는 수학적 표현 방식이다. n차 B-스플라인 곡선은 B-스플라인 기저 함수와 제어점의 선형 결합으로 표현되며, 드 보어-콕스 점화식을 통해 B-스플라인 기저 함수를 정의한다. B-스플라인은 매듭(knot)이라고 불리는 실수들의 시퀀스에 의해 정의되며, 매듭의 배치에 따라 균일, 개방 균일, 비균일 B-스플라인으로 나뉜다. B-스플라인은 베지어 곡선의 일반화된 형태로, 컴퓨터 지원 설계(CAD), 컴퓨터 그래픽스, 곡선 근사 등 다양한 분야에서 활용된다. B-스플라인을 확장한 NURBS(Non-Uniform Rational B-Spline)는 가중치를 사용하여 더욱 유연한 곡선과 표면을 표현할 수 있게 해준다.

더 읽어볼만한 페이지

  • 스플라인 - 스플라인 보간법
    스플라인 보간법은 주어진 데이터 점들을 부드럽게 연결하는 곡선을 생성하는 방법으로, 원래 기술 도면을 그릴 때 사용된 탄성 자에서 유래되었으며, 수학적으로는 일련의 다항식을 사용하여 곡선을 모델링하고, 3차 스플라인을 포함한 다양한 형태가 존재하며, 컴퓨터 그래픽스 등 다양한 분야에서 활용된다.
  • 스플라인 - 캣멀롬 스플라인
    캣멀롬 스플라인은 네 개의 제어점과 노트를 활용하여 곡선을 정의하며, 주어진 점들을 부드럽게 연결하고 0에서 1 사이의 알파 값으로 다양한 형태를 구현한다.
  • 보간법 - 선형 보간법
    선형 보간법은 두 점 사이의 값을 직선으로 추정하는 방법으로, 다양한 분야에서 활용되지만 비선형 데이터에는 정확도가 낮아 다른 방법으로 대체될 수 있다.
  • 보간법 - 보외법
    보외법은 수치 데이터가 없는 범위의 값을 추정하는 방법으로, 다양한 외삽 방법이 존재하며 데이터 생성 프로세스에 대한 사전 지식에 따라 적용 방법을 선택한다.
B-스플라인 곡선

2. 정의

제어점을 '''P'''''i''이라 하면, ''n''차의 B-스플라인 곡선

:\mathbf{S}(t)= \sum_{i=0}^{m-n-2} \mathbf{P}_{i} b_{i,n}(t) \mbox{ , } t \in [t_{n},t_{m-n-1}]

으로 표현된다. 여기서 ''ti''은 마디(knot)라고 불리는 ''m''개의 실수이다.

:t_0 \le t_1 \le \cdots \le t_{m-1}

또한 ''bi,n''은 '''B-스플라인 기저함수'''(B-spline basis function)이고 '''드 보어-콕스(de Boor-Cox) 점화식'''에 의해 다음과 같이 정의된다.

:b_{j,0}(t) := \left\{

\begin{matrix}

1 & \mathrm{if} \quad t_j \leq t < t_{j+1} \\

0 & \mathrm{otherwise}

\end{matrix}

\right.,\qquad j=0,\ldots, m{-}2



:b_{j,n}(t) := \frac{t - t_j}{t_{j+n} - t_j} b_{j,n-1}(t) + \frac{t_{j+n+1} - t}{t_{j+n+1} - t_{j+1}} b_{j+1,n-1}(t)

,\qquad j=0,\ldots, m{-}n{-}2.

매듭 벡터 (0, 0, 0, 1, 2, 3, 3, 3)와 제어점 (0, 0, 1, 0, 0), 그리고 1차 도함수를 갖는 카디널 2차 B-스플라인


매듭 벡터 (−2, −2, −2, −2, −1, 0, 1, 2, 2, 2, 2)와 제어점 (0, 0, 0, 6, 0, 0, 0), 그리고 1차 도함수를 갖는 카디널 3차 B-스플라인


매듭 벡터 (0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 5, 5, 5, 5)와 제어점 (0, 0, 0, 0, 1, 0, 0, 0, 0), 그리고 1차 및 2차 도함수를 갖는 카디널 4차 B-스플라인


p+1차 B-스플라인은 변수 t에 대한 p차 구간별 다항식 함수 B_{i,p}(t)의 모음이다.

다항식 조각들이 만나는 t의 값은 매듭이라고 알려져 있으며, t_0, t_1, t_2, \ldots, t_m로 표시하고 증가하지 않는 순서로 정렬된다.

주어진 매듭 시퀀스에 대해, 스케일링 인수를 제외하고, 다음을 만족하는 고유한 스플라인 B_{i,p}(t)가 존재한다.

:B_{i,p}(t) = \begin{cases}

\text{0이 아님} & \text{if } t_i \leq t < t_{i+p+1}, \\

0 & \text{otherwise}.

\end{cases}



만약 다음의 추가 제약 조건을 추가하면:

:\sum^{m-p-1}_{i=0} B_{i,p}(t) = 1

매듭 t_{p}t_{m-p} 사이의 모든 t에 대해, B_{i,p}(t)의 스케일링 인수는 고정된다.

t_{p}t_{m-p} 사이의 (포함하지 않는) 매듭은 내부 매듭이라고 불린다.

B-스플라인은 Cox–de Boor 재귀 공식을 사용하여 구성할 수 있다.

우리는 차수 p=0의 B-스플라인, 즉 구간별 상수 다항식으로 시작한다.

:B_{i,0}(t) := \begin{cases}

1 & \text{if } t_i \leq t < t_{i+1}, \\

0 & \text{otherwise}.

\end{cases}



더 높은 (p+1)차 B-스플라인은 재귀적으로 정의된다.

:B_{i,p}(t) := \dfrac{t - t_i}{t_{i+p} - t_i} B_{i,p-1}(t) + \dfrac{t_{i+p+1} - t}{t_{i+p+1} - t_{i+1}} B_{i+1,p-1}(t).

매개변수 t \in \Bbb{R} 상에 m개의 값 \{

t_j \in \Bbb{R}

\ | \

t_j \leq t_{j+1}, \ j \in \{0, 1, ..., m-1 \}

\}(노트)를 취하고, 차수를 n \in \Bbb{N}으로 한다.

제어점을 \mathbf{P}_{i}, \ 0 \leq i \leq m-n-2 라고 하면, n차 B-스플라인 곡선 \mathbf{S}(t)는 다음과 같이 정의된다.

:\mathbf{S}(t)= \sum_{i=0}^{m-n-2} \mathbf{P}_{i} b_{i,n}(t)\ \text{,}\qquad t \in [t_n,t_{m-n-1}].

이때 b_{i,n}(t)는 '''B-스플라인 기저 함수'''라고 불리며, '''de Boor Cox 재귀식'''에 의해 다음과 같이 정의된다.

:b_{j,0}(t) := \left\{

\begin{matrix}

1 & \text{if} \quad t_j \leq t < t_{j+1} \\

0 & \text{otherwise}

\end{matrix}

\right.,\qquad j=0,\ldots, m{-}2



:b_{j,k}(t) := \frac{t - t_j}{t_{j+k} - t_j} b_{j,k-1}(t) + \frac{t_{j+k+1} - t}{t_{j+k+1} - t_{j+1}} b_{j+1,k-1}(t)

,\qquad j=0,\ldots, m{-}k{-}2.

2. 1. B-스플라인 기저 함수

제어점을 '''P'''''i''이라 하면, ''n''차의 B-스플라인 곡선

: \mathbf{S}(t)= \sum_{i=0}^{m-n-2} \mathbf{P}_{i} b_{i,n}(t) \mbox{ , } t \in [t_{n},t_{m-n-1}]

으로 표현된다. 여기서 ''ti''은 마디(''knot'')라고 불리는 ''m''개의 실수이다.

: t_0 \le t_1 \le \cdots \le t_{m-1}

또한 ''bi,n''은 '''B-스플라인 기저함수'''(B-spline basis function)이고 '''드 보어-콕스(de Boor-Cox) 점화식'''에 의해 다음과 같이 정의된다.

: b_{j,0}(t) := \left\{

\begin{matrix}

1 & \mathrm{if} \quad t_j \leq t < t_{j+1} \\

0 & \mathrm{otherwise}

\end{matrix}

\right.,\qquad j=0,\ldots, m{-}2



: b_{j,n}(t) := \frac{t - t_j}{t_{j+n} - t_j} b_{j,n-1}(t) + \frac{t_{j+n+1} - t}{t_{j+n+1} - t_{j+1}} b_{j+1,n-1}(t)

,\qquad j=0,\ldots, m{-}n{-}2.

매개변수 t \in \Bbb{R} 상에 m개의 값 \{

t_j \in \Bbb{R}

\ | \

t_j \leq t_{j+1}, \ j \in \{0, 1, ..., m-1 \}

\}(노트)를 취하고, 차수를 n \in \Bbb{N}으로 한다.

제어점을 \mathbf{P}_{i}, \ 0 \leq i \leq m-n-2 라고 하면, n차 B-스플라인 곡선 \mathbf{S}(t)는 다음과 같이 정의된다.

: \mathbf{S}(t)= \sum_{i=0}^{m-n-2} \mathbf{P}_{i} b_{i,n}(t)\ \text{,}\qquad t \in [t_n,t_{m-n-1}].

이때 b_{i,n}(t)는 '''B-스플라인 기저 함수'''라고 불리며, '''de Boor Cox 재귀식'''에 의해 다음과 같이 정의된다.

: b_{j,0}(t) := \left\{

\begin{matrix}

1 & \text{if} \quad t_j \leq t < t_{j+1} \\

0 & \text{otherwise}

\end{matrix}

\right.,\qquad j=0,\ldots, m{-}2



: b_{j,k}(t) := \frac{t - t_j}{t_{j+k} - t_j} b_{j,k-1}(t) + \frac{t_{j+k+1} - t}{t_{j+k+1} - t_{j+1}} b_{j+1,k-1}(t)

,\qquad j=0,\ldots, m{-}k{-}2.

2. 2. 드 보어-콕스 점화식

제어점을 '''P'''''i''이라 하면, ''n''차의 B-스플라인 곡선은

:\mathbf{S}(t)= \sum_{i=0}^{m-n-2} \mathbf{P}_{i} b_{i,n}(t) \mbox{ , } t \in [t_{n},t_{m-n-1}]

으로 표현된다. 여기서 ''ti''은 마디(knot)라고 불리는 ''m''개의 실수이다.

:t_0 \le t_1 \le \cdots \le t_{m-1}

또한 ''bi,n''은 B-스플라인 기저 함수이고 드 보어-콕스(de Boor-Cox) 점화식에 의해 다음과 같이 정의된다.

:b_{j,0}(t) := \left\{

\begin{matrix}

1 & \mathrm{if} \quad t_j \leq t < t_{j+1} \\

0 & \mathrm{otherwise}

\end{matrix}

\right.,\qquad j=0,\ldots, m{-}2



:b_{j,n}(t) := \frac{t - t_j}{t_{j+n} - t_j} b_{j,n-1}(t) + \frac{t_{j+n+1} - t}{t_{j+n+1} - t_{j+1}} b_{j+1,n-1}(t)

,\qquad j=0,\ldots, m{-}n{-}2.

매개변수 t \in \Bbb{R} 상에 m개의 값 \{

t_j \in \Bbb{R}

\ | \

t_j \leq t_{j+1}, \ j \in \{0, 1, ..., m-1 \}

\}(노트)를 취하고, 차수를 n \in \Bbb{N}으로 한다.

제어점을 \mathbf{P}_{i}, \ 0 \leq i \leq m-n-2 라고 하면, n차 B-스플라인 곡선 \mathbf{S}(t)는 다음과 같이 정의된다.

:\mathbf{S}(t)= \sum_{i=0}^{m-n-2} \mathbf{P}_{i} b_{i,n}(t)\ \text{,}\qquad t \in [t_n,t_{m-n-1}].

이때 b_{i,n}(t)는 B-스플라인 기저 함수라고 불리며, 드 보어-콕스(de Boor-Cox) 재귀식에 의해 다음과 같이 정의된다.

:b_{j,0}(t) := \left\{

\begin{matrix}

1 & \text{if} \quad t_j \leq t < t_{j+1} \\

0 & \text{otherwise}

\end{matrix}

\right.,\qquad j=0,\ldots, m{-}2



:b_{j,k}(t) := \frac{t - t_j}{t_{j+k} - t_j} b_{j,k-1}(t) + \frac{t_{j+k+1} - t}{t_{j+k+1} - t_{j+1}} b_{j+1,k-1}(t)

,\qquad j=0,\ldots, m{-}k{-}2.

3. 성질

B-스플라인 함수는 제어점이라고 하는 여러 점으로 제어되는 유연한 밴드의 조합으로, 부드러운 곡선을 만든다.[5] 이러한 함수는 여러 점을 사용하여 복잡한 모양과 표면을 생성하고 관리하는 데 사용되며, 형상 최적화 방법론에서 광범위하게 적용된다.[5]

''n''차 B-스플라인은 변수 ''x''에 대한 ''n'' - 1차의 구간 다항식 함수이다. 이는 매듭 또는 중단점이라고 하는 1 + ''n''개의 위치 t_j에서 정의되며, 이는 비감소 순서 t_j \leq t_{j+1}이어야 한다. B-스플라인은 이러한 매듭의 처음과 마지막 사이의 범위에서만 기여하며 다른 곳에서는 0이다. 각 매듭이 이전 매듭과 동일한 거리 ''h''(''h'' = t_{j+1} - t_j)만큼 떨어져 있으면, 매듭 벡터와 해당 B-스플라인을 "균일"이라고 한다.

0이 아닌 각 유한 매듭 구간에서 B-스플라인은 ''n'' - 1차의 다항식이다. B-스플라인은 매듭에서 연속 함수이다.[6] B-스플라인에 속하는 모든 매듭이 서로 다르면, 그 도함수도 ''n'' - 2차의 도함수까지 연속이다. 매듭이 주어진 ''x'' 값에서 일치하면, 도함수 차수의 연속성은 각 추가 일치 매듭에 대해 1씩 감소한다. B-스플라인은 매듭의 하위 집합을 공유할 수 있지만, 정확히 동일한 매듭에서 정의된 두 개의 B-스플라인은 동일하다. 즉, B-스플라인은 매듭에 의해 고유하게 정의된다.

내부 매듭은 관심 있는 ''x'' 도메인을 덮는다. 단일 B-스플라인이 이미 1 + ''n''개의 매듭에 걸쳐 있으므로, 내부 매듭은 처음과 마지막 B-스플라인에 전체 지원을 제공하기 위해 각 측면에 ''n'' - 1개의 끝점으로 확장되어야 한다.

B-스플라인의 유용성은 주어진 매듭 집합에서 ''n''차의 모든 스플라인 함수를 B-스플라인의 선형 결합으로 표현할 수 있다는 사실에 있다.

:S_{n,\mathbf t}(x) = \sum_i \alpha_i B_{i,n}(x).

B-스플라인은 스플라인 함수 공간에 대한 기저 함수 역할을 하므로, 이러한 이름이 붙었다. 이 속성은 모든 조각이 매듭에서, 개별 지원 범위 내에서 동일한 연속성 속성을 갖는다는 사실에서 비롯된다.[7]

B-스플라인 기저 함수는 지역적인 지지를 가지므로, B-스플라인은 일반적으로 드 보어 알고리즘과 같이 0인 기저 함수를 평가할 필요가 없는 알고리즘에 의해 계산된다.

3. 1. 연속성

3. 2. 미분 가능성

차수 ''k''인 B-스플라인의 미분은 차수 ''k'' − 1인 B-스플라인의 함수이다.[15]

:\frac{dB_{i,k}(x)}{dx} = k\left(\frac{B_{i,k-1}(x)}{t_{i+k} - t_i} - \frac{B_{i+1,k-1}(x)}{t_{i+k+1} - t_{i+1}}\right).

이는 스플라인 함수의 미분과 차수가 1 작은 B-스플라인 사이에 간단한 관계가 있음을 보여준다.

:\frac{d}{dx} \sum_i \alpha_i B_{i,k} = \sum_{i=r-k+2}^{s-1} k\frac{\alpha_i - \alpha_{i-1}}{t_{i+k} - t_i}B_{i,k-1} \quad \text{on} \quad [t_r, t_s],

3. 3. 국소 지지 (Local Support)

B-스플라인 기저 함수는 특정 구간에서만 0이 아닌 값을 가지는 성질이 있으며, 제어점의 변화가 곡선의 일부에만 영향을 미치게 한다.[37] 예를 들어, 연속된 여러 노드에 동일한 값을 부여함으로써, 대응하는 제어점에 곡선을 통과시킬 수 있다. 2차 B-스플라인 곡선의 경우, 곡선의 시작점이 0번째 제어점과 일치한다. 노트 벡터의 처음 n + 1개와 마지막 n + 1개를 동일하게 하면, 곡선의 단점은 처음과 마지막 제어점이 되고 고정(clamped)된다.[37]

4. 종류

B-스플라인에서의 노트(knot)는 파라미터 t의 값으로, 세그먼트의 구분을 정하는 것이다. 노트 벡터(knot vector)는 오름차순으로 정렬된 노트의 열이다.

노트 벡터는 여러 종류로 나눌 수 있다. 다음은 그 예시이다.


  • 균일 노트 벡터
  • 열린 균일 노트 벡터
  • 비균일 노트 벡터


uniform knot vector영어는 노트가 등간격으로 배치된 노트 벡터이다. 즉, 요소가 등차수열 형태로 배열된 노트 벡터가 일양 노트 벡터이다.

'''개방 균일 B-스플라인'''(Open Uniform B-spline)은 양 끝 매듭이 중복되어 곡선의 양 끝점이 처음과 마지막 제어점과 일치하는 B-스플라인이다. open uniform knot vector영어 또는 uniformly-spaced knot vector영어라고도 한다.

비균일 노트 벡터(非一様ノットベクトル, non-uniform knot vector영어)는 노트가 불규칙하게 배치된 노트 벡터이다.

4. 1. 균일 B-스플라인 (Uniform B-spline)

균일 B-스플라인(Uniform B-spline)은 매듭 간 간격이 일정한 B-스플라인으로, 카디널 B-스플라인(Cardinal B-spline)이 대표적인 예시이다.[12] 카디널 B-스플라인은 주어진 차수 ''n''에 대해 서로 이동된 복사본일 뿐이며, 더 간단한 정의로부터 유도할 수 있다.[12]

:B_{i,n,t}(x) = \frac{x-t_i}{h} n[0, \dots, n](\cdot - t_i)^{n-1}_+.

여기서 "자리 표시자" 표기법은 변수 ''t''와 ''x''의 함수 (t-x)^{n-1}_+의 ''n''차 나눗셈 차이를 구할 때, ''x''를 고정하고 (t - x)^{n-1}_+를 ''t''만의 함수로 간주하여 계산해야 함을 의미한다.

카디널 B-스플라인은 균일하게 간격을 둔 매듭을 가지므로, 매듭 사이의 보간은 스무딩 커널과의 컨볼루션과 같다. 예를 들어 B-스플라인 노드(\textbf{b}) 사이에 세 개의 값을 보간하려는 경우, 신호를 다음과 같이 표현할 수 있다.

: \mathbf{x} = [\mathbf{b}_1, 0, 0, \mathbf{b}_2, 0, 0, \mathbf{b}_3, 0, 0, \dots, \mathbf{b}_n, 0, 0].

이 신호 \mathbf{x}와 사각형 함수 \mathbf{h} = [1/3, 1/3, 1/3]의 컨볼루션을 통해 1차 보간 B-스플라인 값을 얻는다. 2차 B-스플라인 보간은 사각형 함수와의 두 번의 컨볼루션 \mathbf{y} = \mathbf{x} * \mathbf{h} * \mathbf{h}으로 얻어지며, 반복적인 필터링을 통해 고차 보간을 얻을 수 있다.

균일한 샘플 도메인에서 빠른 B-스플라인 보간은 반복적인 평균 필터링을 통해 수행할 수 있다. 또는, 사각형 함수는 푸리에 변환 도메인에서 싱크 함수와 같으므로, 3차 스플라인 보간은 푸리에 변환 도메인에서 신호에 sinc4를 곱하는 것과 같다.

1~4차 카디널 B-스플라인에 대한 대수식은 Irwin–Hall 분포#특수 경우에서 확인할 수 있다.

uniform knot vector영어는 노트가 등간격으로 배치된 노트 벡터이다.[30][31] m개의 노트로 구성된 일양 노트 벡터는 j번째 요소 t_j, \ j \in \{0, ..., m-1\} 가 다음과 같이 정의된다.[32]

:t_j = t_0 + \frac{t_{m-1} - t_0}{m - 1} j

즉, 요소가 등차수열 형태로 배열된 노트 벡터가 일양 노트 벡터이다.[31]

균일한 노드에서의 2차 B-스플라인 곡선에서 B-스플라인 기저 함수는 다음과 같다.

:b_{j,2}(t) = \begin{cases} \frac{1}{2}t^2 \\ -t^2 + t + \frac{1}{2} \\ \frac{1}{2}(1-t)^2 \end{cases}

이를 행렬 형식으로 표현하면 다음과 같다.

: \mathbf{S}_i(t) = \begin{bmatrix} t^2 & t & 1 \end{bmatrix} \frac{1}{2} \begin{bmatrix}

1 & -2 & 1 \\

  • 2 & 2 & 0 \\

1 & 1 & 0 \end{bmatrix}

\begin{bmatrix} \mathbf{p}_{i-1} \\ \mathbf{p}_{i} \\ \mathbf{p}_{i+1} \end{bmatrix}

for t \in [0,1], i = 1,2 \ldots m-2

4. 2. 개방 균일 B-스플라인 (Open Uniform B-spline)

'''개방 균일 B-스플라인'''(Open Uniform B-spline)은 양 끝 매듭이 중복되어 곡선의 양 끝점이 처음과 마지막 제어점과 일치하는 B-스플라인이다.[33][32] open uniform knot vector영어 또는 uniformly-spaced knot vector영어라고도 한다.[37][34]

개방 균일 노트 벡터는 다음 순서로 만들어진다.

  • 처음 n + 1개는 0으로 한다.
  • 마지막 n + 1개는 1로 한다.
  • 나머지 m - 2 (n + 1)개는 0보다 크고 1보다 작은 값으로 균등 간격으로 채운다.


예를 들어, n = 2, m = 7인 경우 제어점은 4개이고 노트 벡터는 [0 0 0 0.5 1 1 1]이다. 이 노트 벡터의 생성 방식에서는 곡선의 양 끝점이 처음과 마지막 제어점이 된다. 또한, 제어점의 수가 n + 1개인 경우에는 n차 베지어 곡선과 동일해진다.

4. 3. 비균일 B-스플라인 (Non-uniform B-spline)

비균일 노트 벡터(非一様ノットベクトル, non-uniform knot vector영어)는 노트가 불규칙하게 배치된 노트 벡터이다.[35][36]

4. 4. 카디널 B-스플라인 (Cardinal B-spline)

카디널 B-스플라인은 매듭 사이의 간격 ''h''가 일정한 B-스플라인을 의미한다.[12] 주어진 차수 ''n''에 대한 카디널 B-스플라인은 서로 평행 이동된 복사본으로 구성된다. 카디널 B-스플라인은 다음과 같이 정의할 수 있다.

:B_{i,n,t}(x) = \frac{x-t_i}{h} n[0, \dots, n](\cdot - t_i)^{n-1}_+.

여기서 "자리 표시자" 표기법은 변수 ''t''와 ''x''의 함수 (t-x)^{n-1}_+의 ''n''차 나눗셈 차이를 구할 때, ''x''를 고정하고 (t - x)^{n-1}_+를 ''t''만의 함수로 간주하여 계산해야 함을 의미한다.

카디널 B-스플라인은 균일하게 간격을 둔 매듭을 가지므로, 매듭 사이의 보간은 스무딩 커널과의 컨볼루션과 같다. 예를 들어 B-스플라인 노드(\textbf{b}) 사이에 세 개의 값을 보간하는 경우, 신호는 다음과 같이 표현할 수 있다.

: \mathbf{x} = [\mathbf{b}_1, 0, 0, \mathbf{b}_2, 0, 0, \mathbf{b}_3, 0, 0, \dots, \mathbf{b}_n, 0, 0].

이 신호 \mathbf{x}와 사각형 함수 \mathbf{h} = [1/3, 1/3, 1/3]의 컨볼루션을 통해 1차 보간 B-스플라인 값을 얻는다. 2차 B-스플라인 보간은 사각형 함수와의 두 번의 컨볼루션 \mathbf{y} = \mathbf{x} * \mathbf{h} * \mathbf{h}으로 얻어지며, 사각형 함수를 사용한 반복적인 필터링을 통해 고차 보간을 얻을 수 있다.

균일한 샘플 도메인에서 빠른 B-스플라인 보간은 반복적인 평균 필터링으로 수행 가능하다. 또는, 사각형 함수는 푸리에 변환 도메인에서 싱크 함수와 같으므로, 3차 스플라인 보간은 푸리에 변환 도메인에서 신호에 sinc4를 곱하는 것과 같다.

1~4차 카디널 B-스플라인에 대한 대수식은 Irwin–Hall 분포#특수 경우에서 확인할 수 있다.

4. 5. P-스플라인 (P-spline)

P-스플라인은 "페널티화된 B-스플라인"을 의미한다. 이는 B-스플라인 표현 방식을 사용하며, 여기서 계수는 곡선 맞춤을 위한 데이터와 과적합을 방지하기 위해 평활도를 부과하는 추가적인 페널티 함수에 의해 부분적으로 결정된다.[13]

데이터의 2차원 및 다차원 P-스플라인 근사는 계산 연산을 최소화하기 위해 행렬의 면 분할 곱을 사용할 수 있다.[14]

5. 베지어 곡선과의 관계

베지어 곡선은 B-스플라인 곡선의 특수한 경우이다.[18][19] B-스플라인 곡선은 재귀의 모든 항이 동일한 정의 영역을 갖는 베지어 곡선과 달리, B-스플라인 재귀의 두 항의 지지(support)는 다르다. 이는 제어점이 매우 많은 베지어 곡선이 대부분 독립적인 세그먼트로 구성되는 반면, B-스플라인은 부분 구간에서 부드럽게 전환됨을 의미한다. 베지어 곡선에서 이와 유사한 결과를 얻으려면 세그먼트 간의 전환에 대한 매끄러움 조건을 부과해야 하며, 이는 베지어 스플라인을 생성한다.[18][19]

n차 B-스플라인 곡선에서 제어점의 수를 n+1개, 노트(knot)의 수를 m=2(n+1)개, t가 0에서 1까지 변화할때, 노드는 t_j=0\ \mbox{for}\ j \le nt_j = 1\ \mbox{for}\ j > n으로 제한하면 n차 베지어 곡선과 동일한 형태가 된다.

6. 응용

컴퓨터 지원 설계컴퓨터 그래픽스 응용 분야에서 스플라인 곡선은 때때로 C(t)로 표현되는데, 여기서 t는 어떤 실수 매개변수이다. 이 경우 곡선 C(t)는 두 개 또는 세 개의 별도 좌표 함수 (x(t), y(t)) 또는 (x(t), y(t), z(t))로 취급할 수 있다. 좌표 함수 x(t), y(t)z(t)는 각각 스플라인 함수이며 공통적인 매듭 값 집합 t_1, t_2, \ldots, t_n을 가진다.

B-스플라인이 기저 함수를 형성하기 때문에, 각 좌표 함수는 B-스플라인의 선형 합으로 표현될 수 있으며, 따라서 다음을 얻는다.

:

\begin{align}

X(t) &= \sum_i x_i B_{i,n}(t), \\

Y(t) &= \sum_i y_i B_{i,n}(t), \\

Z(t) &= \sum_i z_i B_{i,n}(t).

\end{align}



가중치 x_i, y_iz_i는 3차원 공간에서 점 P_i=(x_i,y_i,z_i)를 형성하기 위해 결합될 수 있다. 이 점 P_i는 일반적으로 제어점이라고 알려져 있다.

반대로, 제어점 시퀀스, 매듭 값 및 B-스플라인의 차수는 매개변수 곡선을 정의한다. 제어점으로 곡선을 표현하는 것은 몇 가지 유용한 속성을 가진다.

# 제어점 P_i는 곡선을 정의한다. 제어점이 이동, 회전, 스케일링 또는 임의의 아핀 변환으로 이동되는 등 어떤 방식으로든 함께 변환되면 해당 곡선도 동일한 방식으로 변환된다.

# B-스플라인은 유한한 수의 매듭 간격 동안에만 0이 아니므로, 단일 제어점이 이동하면 매개변수 곡선에 대한 해당 변경 사항은 소수의 매듭 간격의 매개변수 범위에 걸쳐 나타난다.

# \sum_i B_{i,n}(x) = 1이고 항상 각 B_{i,n}(x) \geq 0이므로, 곡선은 제어점의 경계 상자 내에 유지된다. 또한, 어떤 의미에서 곡선은 대체로 제어점을 따른다.

덜 바람직한 특징은 매개변수 곡선이 제어점을 보간하지 않는다는 것이다. 일반적으로 곡선은 제어점을 통과하지 않는다.

6. 1. 컴퓨터 지원 설계 (CAD)

컴퓨터 지원 설계에서 스플라인 곡선은 C(t)로 표현될 수 있으며, 이때 t는 실수 매개변수이다. 곡선 C(t)는 두 개 또는 세 개의 좌표 함수 (x(t), y(t)) 또는 (x(t), y(t), z(t))로 나타낼 수 있다. 각 좌표 함수 x(t), y(t), z(t)는 B-스플라인의 선형 합으로 표현 가능하다.

:

\begin{align}

X(t) &= \sum_i x_i B_{i,n}(t), \\

Y(t) &= \sum_i y_i B_{i,n}(t), \\

Z(t) &= \sum_i z_i B_{i,n}(t).

\end{align}



가중치 xi, yi, zi는 3차원 공간에서 점 Pi = (xi, yi, zi)를 형성하며, 이 점들은 제어점이라고 불린다.

제어점, 매듭 값, B-스플라인의 차수는 매개변수 곡선을 정의한다. 제어점으로 곡선을 표현하면 제어점이 이동, 회전, 스케일링 등의 변환을 할 때 곡선도 동일하게 변환된다는 특징을 가진다. 또한 B-스플라인은 유한한 수의 매듭 간격 동안에만 0이 아니므로, 단일 제어점이 이동하면 곡선의 해당 변경 사항은 소수 매듭 간격의 매개변수 범위에 걸쳐 나타난다. \sum_i B_{i,n}(x) = 1이고 항상 각 B_{i,n}(x) \geq 0이므로, 곡선은 제어점의 경계 상자 내에 유지되며, 곡선은 대체로 제어점을 따른다.

하지만, 매개변수 곡선이 제어점을 보간하지 않는다는 특징이 있는데, 일반적으로 곡선은 제어점을 통과하지 않는다.

6. 2. 컴퓨터 그래픽스

컴퓨터 지원 설계컴퓨터 그래픽스에서 B-스플라인 곡선은 C(t)로 표현될 수 있으며, 이는 두 개 또는 세 개의 좌표 함수 (x(t), y(t)) 또는 (x(t), y(t), z(t))로 구성된다. 각 좌표 함수는 B-스플라인의 선형 합으로 표현 가능하다.

:

\begin{align}

X(t) &= \sum_i x_i B_{i,n}(t), \\

Y(t) &= \sum_i y_i B_{i,n}(t), \\

Z(t) &= \sum_i z_i B_{i,n}(t).

\end{align}



가중치 x_i, y_i, z_i는 3차원 공간에서 제어점 P_i=(x_i,y_i,z_i)를 형성한다. 제어점은 곡선을 정의하며, 제어점이 변환되면 곡선도 동일하게 변환된다. B-스플라인은 유한한 수의 매듭 간격 동안에만 0이 아니므로, 단일 제어점 이동은 소수 매듭 간격에만 영향을 미친다. 또한, 곡선은 제어점의 경계 상자 내에 유지되며, 대체로 제어점을 따른다. B-스플라인 곡선은 일반적으로 제어점을 보간하지 않으며, 곡선은 제어점을 통과하지 않는다. B-스플라인은 부드러운 곡선과 곡면을 생성하는데 사용되며, 애니메이션 및 시각 효과 제작에 활용된다.

6. 3. 곡선 근사 (Curve Fitting)

일반적으로 곡선 맞춤에서 일련의 데이터 점은 어떤 수학적 함수로 정의된 곡선에 맞게 조정된다. 예를 들어 다항식 또는 일련의 지수 함수를 사용한다.[20][21] 맞춤 함수를 선택할 이론적 근거가 없는 경우, B-스플라인의 합으로 구성된 스플라인 함수를 최소 제곱법을 사용하여 곡선에 맞출 수 있다. 차수 ''k''인 스플라인 함수에 대한 최소 제곱 최소화의 목적 함수는 다음과 같다.

:U = \sum_{\text{all}~x} \left\{ W(x)\left[y(x) - \sum_i \alpha_i B_{i,k,t}(x)\right] \right\}^2,

여기서 ''W''(''x'')는 가중치이고, ''y''(''x'')는 ''x''에서의 데이터 값이다. 계수 \alpha_i는 결정되어야 하는 매개변수이다. 매듭 값은 고정되거나 매개변수로 취급될 수 있다.

이 과정에서 사용할 매듭의 수와 위치를 결정하는 것이 가장 큰 어려움이다. 드 보어(de Boor)는 이 문제를 해결하기 위한 다양한 전략을 제시한다. 예를 들어, 매듭 간의 간격은 데이터의 곡률(2차 도함수)에 비례하여 감소한다. 단일 로렌츠 및 가우시안 곡선을 맞추기 위한 B-스플라인의 사용이 연구되었다.[22] 5, 6, 7개의 매듭의 대칭 배열을 기반으로 하는 3~7차의 최적 스플라인 함수가 계산되었고, 분광 곡선의 평활화 및 미분화에 적용되었다.[22] Savitzky–Golay 필터링의 2차원 버전과 스플라인 방법이 이동 평균 또는 체비쇼프 필터링보다 더 나은 결과를 생성했다.[23]

7. NURBS (Non-Uniform Rational B-Spline)

컴퓨터 지원 설계, 컴퓨터 지원 제조, 컴퓨터 그래픽스에서 B-스플라인의 확장판은 비균일 유리 B-스플라인(NURBS)이다.[24] NURBS는 동차 좌표계의 B-스플라인이며, B-스플라인과 마찬가지로 차수, 매듭 벡터, 제어점 집합으로 정의되지만, 제어점 각각에는 가중치가 있다.[24] 가중치가 1과 같을 때 NURBS는 단순히 B-스플라인이며, NURBS는 B-스플라인과 베지어 곡선 및 표면을 일반화한다. 제어점의 가중치는 NURBS 곡선을 "유리"하게 만드는 주요 특징이다.

NURBS 곡선 – 동차 좌표계에서 정의된 다항식 곡선(파란색)과 평면에 대한 투영 – 유리 곡선(빨간색)


NURBS 제어점은 곡선의 모양을 결정한다. 곡선의 각 점은 여러 제어점의 가중 합을 계산하여 계산된다. 각 점의 가중치는 지배적인 매개변수에 따라 달라지며, 차수 ''d''의 곡선의 경우, 임의의 제어점의 영향은 매개변수 공간의 ''d''+1 구간(매듭 스팬)에서만 0이 아니다. 해당 구간 내에서 가중치는 차수 ''d''의 다항식 함수(기저 함수)에 따라 변경된다.[24]

매듭 벡터는 제어점이 NURBS 곡선에 영향을 미치는 위치와 방식을 결정하는 매개변수 값의 시퀀스이다. 매듭의 수는 항상 제어점 수 + 곡선 차수 + 1과 같다. 매개변수 값이 새로운 매듭 스팬에 들어갈 때마다 새로운 제어점이 활성화되는 반면, 오래된 제어점은 버려진다.[24]

NURBS 곡선은 다음과 같은 형식을 취한다.[24]

:C(u) = \frac {\sum_{i=1}^k N_{i,n}(u)w_i P_i} {\sum_{i=1}^k N_{i,n}(u)w_i}

여기서 ''u''는 독립 변수, ''k''는 제어점 수, ''N''은 B-스플라인, ''n''은 다항식 차수, ''P''는 제어점, ''w''는 가중치이다. 분모는 모든 가중치가 1인 경우 1로 평가되는 정규화 인자이다.

이것을 다음과 같이 쓰는 것이 일반적이다.[24]

:C(u)=\sum_{i=1}^k R_{i,n}(u)P_i

여기에서 함수

:R_{i,n}(u) = \frac{N_{i,n}(u)w_i}{\sum_{j=1}^k N_{j,n}(u)w_j}

는 유리 기저 함수로 알려져 있다.

NURBS 표면은 두 NURBS 곡선의 텐서 곱으로 얻어지므로 두 개의 독립적인 매개변수 ''u''와 ''v''(각각 인덱스 ''i''와 ''j'' 사용)를 사용한다:[25]

:S(u,v) = \sum_{i=1}^k \sum_{j=1}^\ell R_{i,j}(u,v) P_{i,j}

여기서

:R_{i,j}(u,v) = \frac {N_{i,n}(u) N_{j,m}(v) w_{i,j}} {\sum_{p=1}^k \sum_{q=1}^\ell N_{p,n}(u) N_{q,m}(v) w_{p,q}}

는 유리 기저 함수이다.

7. 1. 유리 기저 함수 (Rational Basis Function)

7. 2. NURBS 곡면 (NURBS Surface)

u 방향으로 n_u 차수, v 방향으로 n_v 차수의 B-스플라인 곡면은 다음과 같이 표현된다.[38]

:\mathbf{S}(u, v)= \sum_{i_u=0}^{m_u-n_u-2} \sum_{i_v=0}^{m_v-n_v-2} \mathbf{P}_{i_u,i_v} b_{i_u,n_u}(u) b_{i_v,n_v}(v)\ \text{,}\qquad u \in [u_{n_u},u_{m_u-n_u-1}],\ v \in [v_{n_v}, v_{m_v-n_v-1}].

노트와 기저 함수는 곡선과 동일하다. 제어점의 개수는 (m_u-n_u-1) (m_v-n_v-1)개다. B-스플라인 곡면은 두 개의 B-스플라인 곡선을 텐서 곱하여 얻어지며, 복잡한 3차원 형상을 표현하는 데 사용된다.

참조

[1] 서적 Curves and surfaces for CAGD: a practical guide Morgan Kaufmann 2002
[2] 문서
[3] 서적 Interpolating cubic splines https://books.google[...] Springer 2000
[4] 서적 Bézier and B-Spline Techniques Springer Science & Business Media
[5] 간행물 Shape design optimization of cylindrical tank using b-spline curves
[6] 문서
[7] 문서
[8] 문서
[9] 문서
[10] 간행물 A Simplified B-Spline Computation Routine 1982-12
[11] 간행물 Comments on some B-spline algorithms
[12] 문서
[13] 문서 Flexible smoothing with B-splines and penalties (with comments and rejoinder) 1996
[14] 간행물 Multivariate calibration with temperature interaction using two-dimensional penalized signal regression
[15] 문서
[16] 간행물 B-splines, hypergeometric functions, and Dirichlet averages
[17] 간행물 Probabilistic treatment of the uncertainty from the finite size of weighted Monte Carlo data
[18] 서적 Handbook on Splines for the User https://books.google[...] CRC Press 1995-07-14
[19] 서적 The Inventor Mentor: Programming Object-Oriented 3D Graphics with Open Inventor, Release 2 http://www-evasion.i[...] Addison-Wesley Longman Publishing Co., Inc. 1993
[20] 문서
[21] 문서
[22] 간행물 Smoothing and Differentiation of Spectroscopic Curves Using Spline Functions
[23] 간행물 Time-Domain Filtering of Two-Dimensional Fluorescence Data http://www.dtic.mil/[...]
[24] 문서
[25] 문서
[26] 문서
[27] 웹사이트 B-spline Basis Functions: Definition - CS3621 Introduction to Computing with Geometry Notes http://pages.mtu.edu[...]
[28] 문서
[29] 문서
[30] 문서
[31] 문서
[32] 웹사이트 B-splines - Advanced Graphics and HCI https://www.cl.cam.a[...]
[33] 문서
[34] 웹사이트 Knot Vector Generation for B-Spline Interpolation - Wolfram Demonstrations Project http://demonstration[...]
[35] 문서
[36] 서적
[37] 웹사이트 Knot Vector Generation - CS3621 Introduction to Computing with Geometry Notes http://pages.mtu.edu[...]
[38] 웹사이트 B-spline Surfaces: Construction - CS3621 Introduction to Computing with Geometry Notes http://pages.mtu.edu[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com