의료영상 면접을 위한 3D 좌표계, 변환 행렬, 영상 정합 입문 및 복습
by
gg582 · 2026-08-19 15:57:23 · 26 views
Table of contents
- 1. CT는 3차원 배열이라고 생각하면 출발하기 쉽다
- 2. Voxel Index와 Physical Coordinate는 다르다
- 3. Origin이 필요하다
- 4. Direction은 영상 축의 방향을 나타낸다
- 5. 좌표계가 여러 개 있다는 것이 핵심이다
- 6. 좌표 변환은 한 좌표계의 점을 다른 좌표계로 옮기는 것이다
- 7. Rotation과 Translation
- 8. 왜 3차원인데 4x4 Transformation Matrix를 쓰는가
- 9. 4x4 행렬의 각 부분을 읽어 보자
- 10. 변환을 합성할 수 있다는 것이 매우 중요하다
- 11. 행렬 곱셈의 순서는 바꾸면 안 된다
- 12. 역변환도 자연스럽게 필요하다
- 13. 의료영상에서 RAS와 LPS는 무엇인가
- 14. 이제 Registration을 보자
- 15. Fixed Image와 Moving Image
- 16. Registration을 수학적으로 쓰면
- 17. Registration을 알고리즘 흐름으로 보면
- 1. Transformation Model
- 2. Similarity Metric
- 3. Optimizer
- 18. Rigid Registration
- 19. Affine Transformation
- 20. Deformable Registration
- 21. Registration 모델의 차이를 한 번에 정리하면
- 22. 두 영상이 "잘 맞는다"는 것을 어떻게 측정하는가
- 23. CT와 MRI는 밝기 자체가 다르다
- 24. Mutual Information은 왜 등장하는가
- 25. Optimizer는 Transformation parameter를 찾는다
- 26. Registration 결과는 결국 Transformation이다
- 27. 그런데 Transformation만 찾았다고 영상이 바로 생기는 것은 아니다
- 28. Interpolation은 격자 사이의 값을 추정하는 것이다
- 29. Nearest Neighbor와 Linear Interpolation
- 30. Resampling은 새 좌표 격자에 영상을 다시 만드는 과정이다
- 31. 왜 역방향으로 좌표를 찾는가
- 32. Transformation 방향이 코드에서 특히 헷갈린다
- 33. Segmentation과 Registration은 다른 문제다
- 34. CT와 X-ray의 가장 큰 기하학적 차이
- 35. X-ray를 카메라처럼 생각하면 이해하기 쉽다
- 36. Perspective Projection을 아주 간단히 보면
- 37. CT와 X-ray를 맞추는 Registration도 가능하다
- 38. 의료영상에서 좌표 단위를 꼭 확인해야 한다
- 39. 거리 계산도 좌표계가 맞아야 한다
- 40. Anisotropic Voxel은 무엇인가
- 41. Registration이 잘 되었는지 어떻게 평가하는가
- 42. Rigid Transformation에서 거리와 각도가 보존되는 이유
- 43. Affine은 무엇을 보존하는가
- 44. Deformable Registration에서는 Regularization이 중요하다
- 45. 의료영상 코드에서 자주 보게 될 흐름
- 46. 면접에서 "Transformation Matrix가 무엇인가요?"라고 물으면
- 47. "Registration이 무엇인가요?"라고 물으면
- 48. "Rigid와 Affine의 차이가 무엇인가요?"라고 물으면
- 49. "Voxel Coordinate와 Physical Coordinate의 차이는 무엇인가요?"라고 물으면
- 50. "왜 Resampling할 때 inverse transform을 쓰나요?"라고 물으면
- 51. "CT와 X-ray Registration은 어떻게 생각할 수 있나요?"라고 물으면
- 52. 이 분야에서 3D 좌표 계산을 볼 때 체크할 것
- 53. 전체 개념을 한 번에 연결하면
- 54. 최소한 이것들은 확실하게 기억하자
- Voxel
- Spacing
- Origin
- Direction
- Physical Coordinate
- Transformation
- Transformation Matrix
- Rigid Registration
- Affine Registration
- Deformable Registration
- Similarity Metric
- Optimizer
- Interpolation
- Resampling
- Projection
- 마무리
의료영상 개발 직무에서 자주 등장하는 용어로 CT, X-ray, 3D 좌표계, Transformation Matrix, Registration 등이 있다.
선형대수를 한 번 배운 CS 전공자라면 행렬 곱셈이나 역행렬부터 다시 공부할 필요는 없다. 오히려 어려운 부분은 다음과 같다.
- CT의 배열 좌표가 실제 공간의 좌표와 왜 다른가?
- 3D 공간에서 영상 하나의 위치와 방향은 어떻게 표현하는가?
- 왜 3차원인데 4\times4 변환 행렬을 쓰는가?
- Registration은 정확히 무엇을 계산하는가?
- 영상을 변환한 뒤 왜 interpolation과 resampling이 필요한가?
- CT와 X-ray를 같이 다룰 때 3차원 좌표와 2차원 영상 좌표는 어떻게 연결되는가?
이 글에서는 이 질문들을 하나씩 연결해서 살펴본다.
목표는 의료영상 알고리즘을 직접 연구할 수 있는 수준까지 가는 것이 아니라, 관련 코드를 읽고 면접에서 기본적인 기하학적 질문을 받았을 때 무엇을 묻는지 알아들을 수 있는 수준까지 가는 것이다.
1. CT는 3차원 배열이라고 생각하면 출발하기 쉽다
일반적인 2차원 영상은 픽셀(pixel)의 배열이다.
예를 들어 흑백 영상이라면 개념적으로 다음과 같은 배열이라고 볼 수 있다.
12 18 24 30
15 20 27 35
19 25 31 40
각 칸에는 밝기나 영상의 물리적 값을 나타내는 숫자가 들어 있다.
CT도 근본적으로는 비슷하다.
다만 2차원 영상 한 장이 아니라 여러 단면을 쌓아서 3차원 데이터를 구성한다.
Slice 0
+---------+
| |
| |
+---------+
Slice 1
+---------+
| |
| |
+---------+
Slice 2
+---------+
| |
| |
+---------+
프로그래밍 관점에서는 대략 다음처럼 볼 수 있다.
image[z][y][x]
2차원 영상의 한 칸을 pixel이라고 부르는 것처럼, 3차원 영상의 한 칸은 voxel이라고 부른다.
voxel은 3차원 공간상의 작은 부피 요소다.
따라서 CT 영상에서 어떤 voxel의 배열 위치를
(i,j,k)
라고 나타낼 수 있다.
예를 들어
(100,200,30)
이라면 100번째 열, 200번째 행, 30번째 단면 정도의 의미라고 보면 된다.
하지만 여기서 첫 번째 중요한 문제가 나온다.
이 좌표는 실제 공간의 위치가 아니다.
2. Voxel Index와 Physical Coordinate는 다르다
CT 배열에서
(100,200,30)
이라는 좌표를 얻었다고 하자.
이것은 배열 안에서 몇 번째 voxel인지를 나타낸다.
이를 voxel index 또는 image index라고 부른다.
그런데 실제 환자의 몸에서 이 위치가 몇 mm 떨어져 있는지를 알고 싶다면 배열 번호만으로는 부족하다.
예를 들어 voxel 하나의 실제 크기가 다음과 같다고 하자.
x direction: 0.7 mm
y direction: 0.7 mm
z direction: 2.5 mm
이 값을 spacing이라고 한다.
Spacing은 간단히 말하면
voxel 한 칸이 실제 공간에서 몇 mm인가
를 뜻한다.
따라서 단순히 크기만 고려하면
100\times0.7=70
200\times0.7=140
30\times2.5=75
이므로
(70,140,75)\text{ mm}
정도가 된다.
하지만 아직 끝이 아니다.
영상의 첫 번째 voxel이 실제 공간의 원점에 놓여 있다는 보장이 없기 때문이다.
3. Origin이 필요하다
어떤 CT 영상의 첫 voxel이 실제 공간에서
(-120,-90,-150)\text{ mm}
에 있다고 하자.
이 위치를 영상의 origin이라고 한다.
즉 origin은
이 영상의 좌표계가 실제 공간 어디에서 시작하는가
를 나타낸다.
예를 들어 spacing이
(0.7,0.7,2.5)
이고 origin이
(-120,-90,-150)
라면 index
(100,200,30)
의 단순한 물리 좌표는
(-120,-90,-150) + (70,140,75)
이므로
(-50,50,-75)\text{ mm}
가 된다.
여기까지 보면 다음 관계가 생긴다.
Voxel Index
|
| spacing
v
거리
|
| origin
v
Physical Coordinate
하지만 실제 의료영상에서는 하나가 더 필요하다.
영상 자체가 실제 공간의 축과 정확히 평행하다고 보장할 수 없기 때문이다.
4. Direction은 영상 축의 방향을 나타낸다
다음 상황을 생각해 보자.
어떤 CT 영상의 배열에서는 오른쪽으로 한 칸 이동했는데, 실제 환자 공간에서는 정확히 x축 방향으로 움직이지 않을 수도 있다.
촬영된 영상 평면 자체가 약간 기울어져 있을 수 있기 때문이다.
따라서 다음 정보가 필요하다.
영상의 x, y, z축이 실제 물리 공간에서 어느 방향을 향하는가?
이를 direction 또는 direction matrix로 표현한다.
예를 들어 영상 축과 실제 공간 축이 완전히 일치하면 direction matrix는 단위행렬이다.
D= \begin{bmatrix} 1&0&0\\ 0&1&0\\ 0&0&1 \end{bmatrix}
하지만 영상이 회전되어 있다면 다른 행렬이 들어간다.
그러면 voxel index \mathbf{i}를 실제 물리 좌표 \mathbf{p}로 바꾸는 관계는 개념적으로 다음과 같다.
\mathbf{p} = \mathbf{o} + D \begin{bmatrix} s_x i\\ s_y j\\ s_z k \end{bmatrix}
여기서
- \mathbf{o}는 origin
- s_x,s_y,s_z는 spacing
- D는 direction matrix
- (i,j,k)는 voxel index
다.
이 식을 외울 필요는 없다.
중요한 것은 다음 세 정보를 기억하는 것이다.
Origin -> 영상이 어디서 시작하는가
Spacing -> voxel 한 칸의 실제 크기는 얼마인가
Direction -> 영상 축이 실제 공간에서 어느 방향인가
이 세 가지를 알아야 영상 배열의 좌표를 실제 환자 공간의 좌표로 바꿀 수 있다.
5. 좌표계가 여러 개 있다는 것이 핵심이다
의료영상 개발에서 헷갈리기 쉬운 것은 숫자 세 개만 보고 좌표라고 생각하는 것이다.
예를 들어 다음 두 값이 있다고 하자.
A = (10, 20, 30)
B = (10, 20, 30)
숫자는 같다.
하지만 A가 CT의 voxel index이고 B가 실제 환자 공간의 mm 좌표라면 전혀 다른 의미다.
심지어 둘 다 mm 단위라고 해도 서로 다른 좌표계라면 같은 위치라는 보장이 없다.
예를 들어
CT coordinate system
MRI coordinate system
patient coordinate system
scanner coordinate system
surgical device coordinate system
같은 좌표계가 동시에 존재할 수 있다.
따라서 3D 의료영상 코드를 볼 때는 좌표값보다 먼저 다음을 물어야 한다.
이 좌표는 어느 좌표계 기준인가?
이 질문이 상당히 중요하다.
6. 좌표 변환은 한 좌표계의 점을 다른 좌표계로 옮기는 것이다
CT 좌표계에서의 점을 환자 기준 좌표계로 바꾸고 싶다고 하자.
이를 좌표 변환이라고 한다.
영어로는 transformation이라고 한다.
개념적으로
\mathbf{p}_B=T(\mathbf{p}_A)
라고 쓸 수 있다.
즉 좌표계 A에서 표현된 점 \mathbf{p}_A를 변환 T에 넣으면 좌표계 B에서의 표현 \mathbf{p}_B가 나온다.
가장 단순한 변환은 이동과 회전이다.
7. Rotation과 Translation
3차원 점을 회전시키는 것은 선형변환이므로 3\times3 행렬로 표현할 수 있다.
\mathbf{x}'=R\mathbf{x}
여기서 R은 rotation matrix다.
예를 들어 z축을 기준으로 \theta만큼 회전시키는 행렬은
R_z(\theta)= \begin{bmatrix} \cos\theta&-\sin\theta&0\\ \sin\theta&\cos\theta&0\\ 0&0&1 \end{bmatrix}
이다.
반면 일정한 거리만큼 평행이동하는 경우에는
\mathbf{x}'=\mathbf{x}+\mathbf{t}
라고 쓴다.
여기서 \mathbf{t}는 translation vector다.
회전과 이동을 동시에 적용하면
\mathbf{x}'=R\mathbf{x}+\mathbf{t}
가 된다.
이 식은 3D 기하 연산에서 매우 자주 등장한다.
8. 왜 3차원인데 4x4 Transformation Matrix를 쓰는가
문제는 회전과 이동의 표현 방식이 다르다는 것이다.
회전은
R\mathbf{x}
라는 행렬 곱으로 표현되지만, 이동은
+\mathbf{t}
라는 덧셈이 필요하다.
여러 좌표 변환을 계속 합성할 때는 이것이 귀찮다.
그래서 3차원 좌표
\begin{bmatrix} x\\ y\\ z \end{bmatrix}
뒤에 1을 하나 붙여
\begin{bmatrix} x\\ y\\ z\\ 1 \end{bmatrix}
로 표현한다.
이런 표현을 homogeneous coordinate, 즉 동차좌표라고 한다.
그러면 회전과 이동을 하나의 4\times4 행렬로 합칠 수 있다.
T= \begin{bmatrix} r_{11}&r_{12}&r_{13}&t_x\\ r_{21}&r_{22}&r_{23}&t_y\\ r_{31}&r_{32}&r_{33}&t_z\\ 0&0&0&1 \end{bmatrix}
그리고
\begin{bmatrix} \mathbf{x}'\\ 1 \end{bmatrix} = T \begin{bmatrix} \mathbf{x}\\ 1 \end{bmatrix}
로 계산할 수 있다.
여기서 중요한 점은 4차원 공간을 다룬다는 뜻이 아니라는 것이다.
3차원의 이동까지 행렬 곱셈에 포함시키기 위해 계산 표현을 한 차원 확장한 것이다.
9. 4x4 행렬의 각 부분을 읽어 보자
다시 행렬을 보자.
T= \begin{bmatrix} r_{11}&r_{12}&r_{13}&t_x\\ r_{21}&r_{22}&r_{23}&t_y\\ r_{31}&r_{32}&r_{33}&t_z\\ 0&0&0&1 \end{bmatrix}
왼쪽 위 3\times3 부분은 회전을 담당한다.
R= \begin{bmatrix} r_{11}&r_{12}&r_{13}\\ r_{21}&r_{22}&r_{23}\\ r_{31}&r_{32}&r_{33} \end{bmatrix}
오른쪽 마지막 열의 위 세 값은 이동량이다.
\mathbf{t}= \begin{bmatrix} t_x\\ t_y\\ t_z \end{bmatrix}
따라서 이 행렬은 사실상
회전 R
+
이동 t
를 하나로 묶은 것이다.
10. 변환을 합성할 수 있다는 것이 매우 중요하다
의료영상 시스템에서는 하나의 좌표계를 바로 다른 좌표계로 변환하지 않고 여러 단계를 거칠 수 있다.
예를 들어
CT voxel coordinate
|
v
CT physical coordinate
|
v
patient coordinate
|
v
device coordinate
각 단계의 변환을
T_1,T_2,T_3
라고 하자.
그러면 최종적으로는
T=T_3T_2T_1
처럼 하나의 행렬로 합칠 수 있다.
따라서 한 점에 대해
\mathbf{p}_{device} = T_3T_2T_1\mathbf{p}_{CT}
라고 쓸 수 있다.
행렬을 쓰는 큰 이유 중 하나가 바로 이 변환 합성이다.
11. 행렬 곱셈의 순서는 바꾸면 안 된다
선형대수를 배웠다면
AB\ne BA
라는 사실은 익숙할 것이다.
3D 좌표 변환에서는 이 성질이 매우 직접적으로 나타난다.
먼저 물체를 회전한 뒤 이동하는 것과, 먼저 이동한 뒤 회전하는 것은 결과가 다르다.
예를 들어 2차원에서 점
(1,0)
을 생각하자.
먼저 90도 회전하면
(1,0)\rightarrow(0,1)
이다.
그 후 x방향으로 10만큼 이동하면
(10,1)
이 된다.
반대로 먼저 이동하면
(1,0)\rightarrow(11,0)
이고, 그 후 원점을 중심으로 90도 회전하면
(0,11)
이 된다.
따라서 변환 행렬을 여러 개 곱할 때는 반드시 어느 방향으로 좌표를 변환하고 있는지 확인해야 한다.
실제 3D 코드에서 발생하는 오류 중 상당수가 이 변환 방향과 순서 문제에서 나온다.
12. 역변환도 자연스럽게 필요하다
좌표계 A에서 B로 가는 변환을
T_{A\rightarrow B}
라고 하자.
그러면
\mathbf{p}_B = T_{A\rightarrow B}\mathbf{p}_A
이다.
반대로 B에서 A로 돌아가려면 역행렬을 사용한다.
T_{B\rightarrow A} = T_{A\rightarrow B}^{-1}
따라서
\mathbf{p}_A = T_{A\rightarrow B}^{-1}\mathbf{p}_B
이다.
이 개념은 뒤에서 Registration 영상을 실제로 다시 샘플링할 때 중요하게 등장한다.
13. 의료영상에서 RAS와 LPS는 무엇인가
실제 의료영상에서는 x, y, z가 어느 방향인지까지 정해져 있어야 한다.
예를 들어 다음과 같은 해부학적 방향을 사용한다.
R = Right
L = Left
A = Anterior
P = Posterior
S = Superior
I = Inferior
한국어로 대략
Right 오른쪽
Left 왼쪽
Anterior 앞쪽
Posterior 뒤쪽
Superior 위쪽
Inferior 아래쪽
이다.
그래서 RAS 좌표계라고 하면 양의 축 방향을
+x = Right
+y = Anterior
+z = Superior
로 두는 방식이다.
LPS 좌표계는
+x = Left
+y = Posterior
+z = Superior
를 사용한다.
즉 같은
(10,20,30)
이라는 숫자라도 RAS와 LPS에서는 실제 방향이 다를 수 있다.
따라서 서로 다른 의료영상 라이브러리나 파일 형식을 연결할 때 좌표계 관례를 확인해야 한다.
14. 이제 Registration을 보자
Registration은 한국어로 영상 정합이라고 한다.
용어 자체보다 문제를 먼저 보면 쉽다.
서로 다른 두 영상에서 같은 해부학적 위치가 서로 겹치도록 좌표를 맞추는 문제
라고 생각하면 된다.
예를 들어 한 환자가 CT를 두 번 촬영했다고 하자.
첫 번째 촬영에서는 머리가 정면을 보고 있었다.
두 번째 촬영에서는 머리가 조금 돌아가 있었다.
두 영상을 그대로 겹치면 같은 뼈가 서로 다른 위치에 나타난다.
Registration은 두 번째 영상을 적절히 회전하고 이동해서 첫 번째 영상에 맞춘다.
15. Fixed Image와 Moving Image
Registration에서는 흔히 두 영상을 다음처럼 부른다.
Fixed Image
Moving Image
Fixed image는 기준으로 고정해 둘 영상이다.
Moving image는 변환해서 fixed image에 맞출 영상이다.
예를 들어
CT A -> Fixed Image
CT B -> Moving Image
라고 한다면, CT A는 그대로 두고 CT B의 좌표계를 변환한다.
Registration의 결과는 결국
Moving image를 Fixed image에 맞추기 위한 transformation
이다.
16. Registration을 수학적으로 쓰면
Fixed image를
F(\mathbf{x})
라고 하고 moving image를
M(\mathbf{x})
라고 하자.
여기서 \mathbf{x}는 3차원 위치다.
Moving image에 변환 T를 적용하면
M(T(\mathbf{x}))
또는 라이브러리의 정의 방향에 따라 그 역방향 표현이 등장한다.
핵심은 다음과 같다.
어떤 transformation T를 선택했을 때 두 영상이 가장 비슷해지는가?
이를 최적화 문제로 표현하면 대략
T^* = \arg\min_T D(F,M,T)
와 같이 쓸 수 있다.
여기서
- T는 우리가 찾고 싶은 좌표 변환
- D는 두 영상이 얼마나 맞지 않는지를 측정하는 함수
- T^*는 그 차이를 가장 작게 만드는 최적의 변환
이다.
argmin 자체는 어떤 함수값을 최소로 만드는 입력값을 찾는다는 뜻이다.
즉 Registration에서 중요한 것은 영상 자체를 바로 최적화하는 것이 아니라, 영상에 적용할 transformation의 파라미터를 찾는 것이다.
17. Registration을 알고리즘 흐름으로 보면
가장 단순하게 보면 다음과 같다.
초기 Transformation 설정
|
v
Moving Image를 현재 위치에서 평가
|
v
Fixed Image와 얼마나 비슷한지 계산
|
v
Transformation parameter 수정
|
v
다시 평가
|
v
충분히 잘 맞을 때까지 반복
따라서 Registration에는 보통 다음 세 요소가 필요하다.
1. Transformation Model
영상을 어떤 방식으로 움직일 수 있는가?
예:
이동만
이동 + 회전
이동 + 회전 + 크기 변화
위치별 자유로운 변형
2. Similarity Metric
두 영상이 얼마나 잘 맞는지를 어떻게 숫자로 평가할 것인가?
3. Optimizer
그 점수를 더 좋게 만드는 transformation parameter를 어떻게 찾아갈 것인가?
이 세 가지를 구분하면 Registration 프레임워크의 API 구조도 이해하기 쉬워진다.
18. Rigid Registration
Rigid는 강체라는 뜻이다.
물체 자체의 모양과 크기는 바뀌지 않는다고 가정한다.
허용하는 변환은
Translation
Rotation
이다.
3차원에서는 이동이 세 방향 있다.
t_x,t_y,t_z
회전도 세 축에 대해 생각할 수 있다.
\theta_x,\theta_y,\theta_z
따라서 총 6개의 독립적인 파라미터가 있다.
이를 6 degrees of freedom, 줄여서 6-DOF라고 한다.
즉 rigid registration은 대략
(\theta_x,\theta_y,\theta_z,t_x,t_y,t_z)
를 찾아내는 문제다.
두개골처럼 촬영 사이에 형태 자체가 크게 변하지 않는 구조를 정렬할 때 자연스럽게 생각할 수 있는 모델이다.
19. Affine Transformation
Affine transformation은 rigid보다 더 많은 변형을 허용한다.
Rigid에서는
이동
회전
만 가능했다.
Affine에서는 여기에
Scaling
Shear
도 허용한다.
Scaling은 크기를 늘리거나 줄이는 것이다.
예를 들어
(x,y,z) \rightarrow (2x,2y,2z)
처럼 전체 크기를 두 배로 만들 수 있다.
Shear는 직사각형을 비스듬한 평행사변형처럼 만드는 종류의 변형이다.
따라서 일반적인 3차원 affine transformation은
\mathbf{x}'=A\mathbf{x}+\mathbf{t}
형태로 쓸 수 있다.
여기서 A는 일반적인 3\times3 행렬이다.
Rigid transformation에서는 이 A가 순수한 회전행렬이어야 하지만, affine에서는 그 제약이 더 느슨하다.
즉
Rigid
-> 모양과 크기 보존
Affine
-> 직선과 평행 관계는 보존하지만 크기와 각도는 변할 수 있음
정도로 이해하면 된다.
20. Deformable Registration
이번에는 호흡 전후의 폐를 생각해 보자.
들이마셨을 때와 내쉬었을 때 폐는 단순히 통째로 이동하거나 회전하지 않는다.
부분마다 서로 다르게 움직이고 형태도 변한다.
이런 경우 rigid나 affine transformation 하나만으로는 정확히 맞출 수 없다.
그래서 공간의 위치마다 서로 다른 이동을 허용한다.
이를 단순화해서 쓰면
T(\mathbf{x}) = \mathbf{x} + \mathbf{u}(\mathbf{x})
라고 할 수 있다.
여기서
\mathbf{u}(\mathbf{x})
는 위치 \mathbf{x}에서 얼마만큼 움직일지를 나타내는 벡터다.
이런 함수를 displacement field라고 한다.
즉 공간의 각 위치마다
이 점은 오른쪽으로 1.2 mm
이 점은 위로 0.4 mm
이 점은 뒤쪽으로 2.0 mm
처럼 서로 다른 이동량을 가지고 있는 셈이다.
이를 deformable registration 또는 non-rigid registration이라고 부른다.
21. Registration 모델의 차이를 한 번에 정리하면
| 방식 | 허용되는 변화 |
|---|---|
| Translation | 이동 |
| Rigid | 이동 + 회전 |
| Affine | 이동 + 회전 + 크기 변화 + shear |
| Deformable | 공간 위치별 서로 다른 변형 |
자유도가 많을수록 복잡한 변형을 표현할 수 있다.
하지만 자유도가 많다고 항상 좋은 것은 아니다.
모델이 지나치게 자유로우면 실제 해부학적으로 말이 되지 않는 형태로 영상을 억지로 맞출 수도 있기 때문이다.
22. 두 영상이 "잘 맞는다"는 것을 어떻게 측정하는가
Registration에서는 현재 transformation이 좋은지 나쁜지를 숫자로 판단해야 한다.
이를 similarity metric 또는 registration metric이라고 한다.
같은 종류의 CT 두 장을 비교한다고 하자.
가장 단순하게는 같은 위치의 voxel 값 차이를 계산할 수 있다.
예를 들어
E = \sum_{\mathbf{x}} \left( F(\mathbf{x})-M(T(\mathbf{x})) \right)^2
처럼 차이의 제곱을 모두 더할 수 있다.
두 영상이 비슷할수록 이 값은 작아진다.
이런 방식은 Mean Squared Error 계열의 직관과 연결된다.
하지만 항상 이렇게 단순하지는 않다.
23. CT와 MRI는 밝기 자체가 다르다
CT와 CT를 비교하면 같은 조직이 어느 정도 비슷한 영상값을 갖는다고 기대할 수 있다.
하지만 CT와 MRI는 영상이 만들어지는 원리가 다르다.
따라서 같은 조직이라도 두 영상에서 같은 밝기로 나타날 이유가 없다.
예를 들어 어떤 조직이 CT에서는 밝게 보이는데 MRI에서는 어둡게 보일 수 있다.
그러면
F(\mathbf{x})-M(\mathbf{x})
같은 단순한 차이는 좋은 비교 기준이 되지 않는다.
이런 서로 다른 종류의 영상을 multi-modal image라고 한다.
즉 modality가 다르다는 것은 촬영 방식 또는 영상 생성 방식이 다르다는 뜻이다.
24. Mutual Information은 왜 등장하는가
CT와 MRI처럼 밝기 값 자체를 직접 비교하기 어려울 때 자주 등장하는 방법 중 하나가 Mutual Information이다.
한국어로는 상호정보량이라고 한다.
정보이론에서 등장하는 개념이므로 네트워크나 통신 쪽에서 엔트로피를 접했다면 구조가 아주 낯설지는 않을 수 있다.
직관적으로는 다음과 같다.
한 영상의 voxel 값이 주어졌을 때 다른 영상의 voxel 값에 대한 불확실성이 얼마나 줄어드는가?
두 영상이 잘 정렬되어 있다면 CT에서 특정 조직에 해당하는 값과 MRI의 특정 값 사이에 통계적인 관계가 더 뚜렷하게 나타난다.
반대로 완전히 엉뚱하게 어긋나 있으면 그 관계가 흐려진다.
따라서 두 영상의 값이 같을 필요는 없지만, 서로 얼마나 일관된 통계적 관계를 보이는지를 이용해서 정렬 정도를 평가할 수 있다.
면접에서는 보통 이 정도 직관을 이해하면 충분하다.
25. Optimizer는 Transformation parameter를 찾는다
Rigid registration이라면 찾아야 할 값은 예를 들어
\theta_x,\theta_y,\theta_z,t_x,t_y,t_z
이다.
초기값을
(0,0,0,0,0,0)
으로 두었다고 하자.
Optimizer는 이 값을 조금씩 바꾸면서 metric이 좋아지는 방향을 찾는다.
현재 translation x = 0.0 mm
metric = 100
translation x = 0.5 mm
metric = 90
translation x = 1.0 mm
metric = 75
차이를 최소화하는 metric이라면 값이 작아지는 쪽으로 움직이는 것이 좋다.
실제로는 gradient descent, Powell method, L-BFGS 등 다양한 최적화 방법을 사용할 수 있다.
하지만 면접 준비 단계에서는 알고리즘 이름보다 다음 구조를 이해하는 것이 중요하다.
Transformation
-> 무엇을 조절할지 결정
Metric
-> 현재 얼마나 잘 맞는지 평가
Optimizer
-> 더 잘 맞도록 parameter를 찾음
26. Registration 결과는 결국 Transformation이다
Rigid registration을 수행했다고 하자.
최종 결과로 다음과 같은 값이 얻어질 수 있다.
rotation x = ...
rotation y = ...
rotation z = ...
translation x = ...
translation y = ...
translation z = ...
이 값으로 transformation matrix를 만들 수 있다.
즉 Registration이라는 것은 마법처럼 새로운 영상을 생성하는 과정이 아니라, 본질적으로
Moving image의 좌표를 Fixed image 좌표계에 대응시키는 적절한 transformation을 데이터로부터 찾아내는 과정
이라고 볼 수 있다.
이 관점을 잡으면 좌표 변환과 Registration이 별개의 주제가 아니라는 것이 보인다.
27. 그런데 Transformation만 찾았다고 영상이 바로 생기는 것은 아니다
예를 들어 moving image의 voxel 한 점이
(10,20,30)
에 있다고 하자.
Transformation을 적용했더니
(10.37,20.82,29.41)
이라는 좌표로 이동했다고 하자.
문제가 있다.
영상 배열에는
10.37번째 voxel
이라는 것이 없다.
voxel grid는 정수 위치에 존재하기 때문이다.
따라서 이런 실수 좌표에서 어떤 영상값을 사용할지 결정해야 한다.
여기서 interpolation이 등장한다.
28. Interpolation은 격자 사이의 값을 추정하는 것이다
Interpolation은 보간이라고 한다.
이미 알고 있는 주변 값으로 그 사이의 값을 추정하는 것이다.
1차원 예를 들어 보자.
x = 0 x = 1
value 10 value 20
그렇다면 정확히 중간인
x=0.5
의 값을 단순 선형 보간하면
15
라고 추정할 수 있다.
2차원 영상에서는 주변 4개 pixel을 이용할 수 있다.
3차원 영상에서는 주변 8개 voxel을 이용해서 값을 계산할 수 있다.
이 방식을 trilinear interpolation이라고 한다.
즉
3차원 공간에서 주변 8개 voxel의 값을 이용해 그 사이의 값을 계산하는 방법
이라고 이해하면 된다.
29. Nearest Neighbor와 Linear Interpolation
가장 단순한 interpolation은 nearest neighbor다.
말 그대로 가장 가까운 voxel의 값을 그대로 사용한다.
예를 들어 변환된 좌표가
(10.2,20.1,30.4)
라면 가장 가까운
(10,20,30)
의 값을 가져오는 식이다.
장점은 빠르고 원래 값이 그대로 유지된다는 것이다.
그래서 segmentation label처럼
0 = background
1 = liver
2 = kidney
처럼 범주형 값을 가진 영상에서 중요하다.
이런 데이터를 선형 보간하면
1.4
같은 존재하지 않는 label이 생길 수 있기 때문이다.
반면 CT intensity처럼 연속적인 수치 영상에서는 linear 또는 trilinear interpolation이 자연스럽다.
이 차이는 실무에서도 중요하다.
30. Resampling은 새 좌표 격자에 영상을 다시 만드는 과정이다
Interpolation과 함께 자주 나오는 단어가 resampling이다.
Transformation을 통해 좌표 관계를 알게 되었다고 하자.
이제 fixed image와 같은 위치와 크기의 새로운 3D grid를 만든 뒤, 그 각 voxel에 moving image의 값을 채워야 한다.
이 전체 과정을 resampling이라고 한다.
즉
새 output grid를 만든다
|
v
각 output voxel의 물리 좌표를 구한다
|
v
Moving image의 어디에 대응하는지 계산한다
|
v
그 위치의 값을 interpolation으로 구한다
|
v
output voxel에 저장한다
가 resampling의 기본 흐름이다.
31. 왜 역방향으로 좌표를 찾는가
처음 생각하면 moving image의 모든 voxel을 transformation으로 앞으로 보내면 될 것 같다.
Moving Image
|
| T
v
Output Image
하지만 이렇게 하면 문제가 생길 수 있다.
예를 들어 어떤 voxel은 변환 후 정수 grid 사이에 떨어진다.
또 어떤 output voxel은 아무 source voxel도 도달하지 않을 수 있다.
그러면 영상에 구멍이 생긴다.
source
X X X X X
forward transform
\ \ \ \
output
X _ X X _ X
그래서 보통 반대로 생각한다.
출력 영상의 voxel 하나를 정하고
이 voxel의 값은 원래 moving image의 어디에서 가져와야 하는가?
를 계산한다.
즉
Output Coordinate
|
| inverse transformation
v
Moving Image Coordinate
|
| interpolation
v
Pixel/Voxel Value
처럼 처리한다.
이것을 backward mapping 또는 inverse mapping 관점이라고 한다.
32. Transformation 방향이 코드에서 특히 헷갈린다
Registration 관련 라이브러리를 처음 보면 다음 문제가 자주 발생한다.
문서에는
Moving -> Fixed transformation
이라고 적혀 있는데, resampler에서는 반대 방향의 transformation을 요구하는 경우가 있다.
이것은 방금 본 inverse mapping 때문이다.
예를 들어 우리가 알고 싶은 대응관계가
\mathbf{x}_{fixed} = T\mathbf{x}_{moving}
라고 하자.
그런데 fixed image의 output voxel 하나에서 moving image의 값을 찾으려면
\mathbf{x}_{moving} = T^{-1}\mathbf{x}_{fixed}
를 계산해야 한다.
따라서 라이브러리 API를 볼 때는
이 transformation이 점을 어느 방향으로 보내는가?
를 반드시 확인해야 한다.
33. Segmentation과 Registration은 다른 문제다
의료영상에서 함께 자주 등장하기 때문에 혼동하기 쉽다.
Segmentation은 영상 안에서 구조를 구분하는 문제다.
예를 들어 각 voxel에
background
bone
liver
kidney
tumor
등의 label을 붙이는 문제다.
즉 질문은
이 voxel은 무엇인가?
이다.
Registration의 질문은 다르다.
이 영상의 이 위치는 다른 영상의 어느 위치와 대응하는가?
이다.
따라서
Segmentation
-> 구조 또는 영역을 찾는 문제
Registration
-> 서로 다른 영상 사이의 위치 대응을 찾는 문제
라고 구분하면 된다.
두 기술은 함께 사용할 수 있지만 개념적으로는 별개의 문제다.
34. CT와 X-ray의 가장 큰 기하학적 차이
CT는 기본적으로 3차원 volume 데이터로 다룬다.
즉
I(x,y,z)
처럼 3차원 위치마다 값이 있는 것으로 생각할 수 있다.
일반적인 X-ray 영상은 detector에 기록된 2차원 영상이다.
따라서
I(u,v)
처럼 표현할 수 있다.
여기서 일부러 x,y,z가 아니라 u,v를 사용했다.
3D 공간 좌표와 2D 영상 좌표를 구분하기 위해서다.
따라서 CT와 X-ray를 함께 다루는 작업에서는 다음 문제가 중요해진다.
CT의 3차원 점 (x,y,z)가 X-ray 영상에서는 어느 pixel (u,v)에 보이는가?
이것이 3D-to-2D projection 문제다.
35. X-ray를 카메라처럼 생각하면 이해하기 쉽다
기하학적으로는 카메라와 유사하게 볼 수 있다.
X-ray source
*
/|\
/ | \
/ | \
/ patient\
/ | \
+-------------+
detector
X-ray source에서 나온 광선이 환자를 통과하고 detector 평면에 도달한다.
따라서 3차원 공간의 한 점은 detector의 어떤 2차원 위치에 투영된다.
개념적으로
\mathbf{p}_{2D} = P\mathbf{p}_{3D}
와 같은 형태의 projection을 생각할 수 있다.
여기서 P는 3차원 점을 2차원 detector 좌표로 옮기는 projection matrix다.
컴퓨터 비전에서 3D world point를 카메라 image plane에 투영하는 문제와 기본적인 기하 구조가 비슷하다.
36. Perspective Projection을 아주 간단히 보면
단순한 pinhole camera 모델에서는 3차원 점
(X,Y,Z)
가 있을 때 2차원 영상 좌표가 대략
u=f\frac{X}{Z}
v=f\frac{Y}{Z}
처럼 표현된다.
여기서 f는 초점 거리와 관련된 값이다.
핵심은 Z로 나눈다는 점이다.
같은 크기의 물체도 멀리 있으면 작게 보이는 원근법이 여기서 생긴다.
X-ray 시스템의 실제 기하학은 장비의 source와 detector 위치, pixel spacing 등의 정보를 함께 고려하지만, 기본적인 3D-to-2D 투영 개념은 이와 연결된다.
37. CT와 X-ray를 맞추는 Registration도 가능하다
CT는 3D이고 X-ray는 2D다.
따라서 단순히 voxel끼리 직접 비교할 수 없다.
한 가지 접근은 CT를 특정 위치와 방향에서 X-ray처럼 가상 투영한 뒤 실제 X-ray와 비교하는 것이다.
이런 가상 X-ray 영상을 DRR이라고 한다.
DRR은 Digitally Reconstructed Radiograph의 약자다.
쉽게 말하면
CT volume으로부터 계산해서 만든 가상의 X-ray 영상
이다.
그 흐름은 대략 다음과 같다.
3D CT
|
| 현재 추정한 자세로 projection
v
가상 X-ray
|
| 실제 X-ray와 비교
v
similarity metric
|
| optimizer
v
CT 자세 수정
이 과정을 반복하면 3D CT와 2D X-ray 사이의 위치 관계를 추정할 수 있다.
이를 2D-3D Registration이라고 부른다.
38. 의료영상에서 좌표 단위를 꼭 확인해야 한다
일반적인 알고리즘 코드에서는 좌표를 그냥 숫자로 처리할 때가 많다.
하지만 의료영상에서는 단위가 중요하다.
예를 들어
(10,20,30)
이라는 좌표가 있다고 하자.
이게
voxel index
인지,
millimeter
인지에 따라 의미가 완전히 다르다.
특히 z축 spacing이 5 mm라면
z index = 30
은 실제로 150 mm에 해당할 수 있다.
그래서 코드 리뷰나 면접에서 3D 좌표 계산을 보면 다음을 확인하는 습관이 좋다.
Coordinate system은 무엇인가?
단위는 무엇인가?
Voxel index인가 physical coordinate인가?
Spacing이 적용되었는가?
Origin은 무엇인가?
Direction은 무엇인가?
39. 거리 계산도 좌표계가 맞아야 한다
두 voxel index가
(10,10,10)
과
(11,10,10)
이라고 하자.
index 공간에서의 거리는
1
이다.
하지만 spacing이
(0.5,0.5,5.0)\text{ mm}
이라면 x 방향으로 한 칸 차이는 실제로 0.5 mm다.
반대로
(10,10,10)
과
(10,10,11)
사이도 index 거리로는 1이지만 실제 거리는 5 mm다.
즉 voxel index를 그대로 유클리드 거리 공식에 넣으면 물리적 거리를 잘못 계산할 수 있다.
따라서 실제 거리 계산은 physical coordinate에서 수행하는 것이 기본이다.
40. Anisotropic Voxel은 무엇인가
방금 예처럼 voxel의 각 축 크기가 다를 수 있다.
예를 들어
(0.5,0.5,5.0)\text{ mm}
라면 x와 y 방향은 매우 촘촘하지만 z 방향은 훨씬 두껍다.
이처럼 축마다 크기가 다른 voxel을 anisotropic voxel이라고 한다.
반대로
(1,1,1)\text{ mm}
처럼 모든 축의 크기가 같으면 isotropic voxel이라고 한다.
3D 알고리즘에서는 이 차이가 중요하다.
배열에서 한 칸 이동했다는 사실만으로 실제 이동 거리를 판단할 수 없기 때문이다.
41. Registration이 잘 되었는지 어떻게 평가하는가
Registration algorithm이 어떤 transformation을 찾았다고 해서 무조건 맞다고 볼 수는 없다.
평가 방법은 문제에 따라 다르다.
예를 들어 영상 자체의 similarity metric을 볼 수도 있다.
또는 의사가 지정한 대응 landmark를 사용할 수도 있다.
Landmark는 영상에서 식별 가능한 특정 위치다.
예를 들어 두 영상에서 같은 뼈의 특징점을 각각 지정했다고 하자.
Registration 후 두 점 사이의 실제 거리 오차를 계산할 수 있다.
e_i = \left| \mathbf{p}_i-\mathbf{q}_i \right|
여러 landmark의 평균 오차를 사용하면 registration 정확도를 평가하는 하나의 기준이 된다.
이런 맥락에서 TRE라는 용어가 등장할 수 있다.
TRE는 Target Registration Error의 약자이며, Registration 후 대응해야 할 점들이 실제로 얼마나 떨어져 있는지를 나타내는 오차다.
면접에서 깊게 들어가지 않는다면
Registration metric은 최적화 중 사용하는 기준이고, 실제 정확도 평가는 별도의 landmark error 등으로 할 수도 있다.
정도로 이해하면 충분하다.
42. Rigid Transformation에서 거리와 각도가 보존되는 이유
Rigid transformation은
\mathbf{x}'=R\mathbf{x}+\mathbf{t}
형태다.
여기서 R이 rotation matrix라면
R^TR=I
를 만족한다.
따라서 두 점의 차이
\mathbf{x}_1-\mathbf{x}_2
에 대해 이동항 \mathbf{t}는 서로 상쇄되고, 회전은 길이를 보존한다.
즉
\left| R(\mathbf{x}_1-\mathbf{x}_2) \right| = \left| \mathbf{x}_1-\mathbf{x}_2 \right|
이다.
그래서 rigid transformation은 물체의 크기와 형태를 바꾸지 않는다.
이 성질 때문에 두개골이나 수술 도구처럼 실제로 딱딱한 물체의 좌표 변환에 자연스럽게 사용된다.
43. Affine은 무엇을 보존하는가
Affine transformation은 일반적으로 거리와 각도를 보존하지 않는다.
하지만 직선은 직선으로 유지되고, 평행한 선은 변환 후에도 평행하다.
예를 들어 정사각형이
+----+
| |
| |
+----+
였다면 affine transformation 후에는
/----/
/ /
/----/
같은 평행사변형이 될 수 있다.
즉 기하학적 구조를 완전히 자유롭게 찌그러뜨리는 것은 아니지만 rigid보다는 훨씬 많은 변형을 허용한다.
44. Deformable Registration에서는 Regularization이 중요하다
Deformable registration은 각 위치가 자유롭게 움직일 수 있기 때문에 지나치게 자유로운 해가 나올 수 있다.
예를 들어 similarity만 좋아지도록 두면 조직을 비정상적으로 접거나 찢는 형태의 deformation을 만들 수도 있다.
그래서 deformation이 너무 거칠거나 비현실적이지 않도록 제한을 둔다.
이를 regularization이라고 한다.
쉽게 말하면
영상이 잘 맞는 것뿐 아니라 변형 자체도 어느 정도 매끄럽고 합리적이어야 한다
는 조건을 추가하는 것이다.
최적화 문제를 개념적으로 쓰면
E(T) = D(F,M,T) + \lambda R(T)
같은 형태를 생각할 수 있다.
여기서
- D는 영상 불일치 정도
- R은 변형이 얼마나 거칠거나 비정상적인지에 대한 penalty
- \lambda는 둘 사이의 중요도를 조절하는 값
이다.
이 식은 deformable registration의 사고방식을 이해하는 데 도움이 된다.
45. 의료영상 코드에서 자주 보게 될 흐름
Registration 라이브러리의 코드는 구현마다 다르지만 개념적으로는 다음과 비슷하다.
Load Fixed Image
Load Moving Image
Set Transformation Model
Set Similarity Metric
Set Optimizer
Run Registration
Get Final Transformation
Resample Moving Image
Save Result
각 단계의 의미를 이제 연결할 수 있다.
Transformation Model
-> 어떤 종류의 움직임을 허용할 것인가
Similarity Metric
-> 현재 얼마나 잘 맞는가
Optimizer
-> 더 잘 맞도록 transformation을 어떻게 수정할 것인가
Final Transformation
-> 두 좌표계의 대응관계
Resampling
-> 그 transformation으로 실제 output 영상을 생성
46. 면접에서 "Transformation Matrix가 무엇인가요?"라고 물으면
다음 정도로 답하면 된다.
3D 공간에서 한 좌표계의 점을 다른 좌표계로 변환하는 데 사용하는 행렬이라고 이해하고 있습니다. 회전은 3x3 rotation matrix로 표현할 수 있고, translation까지 같은 행렬 연산으로 다루기 위해 homogeneous coordinate를 사용해서 4x4 matrix로 표현하는 경우가 많습니다. 여러 transformation은 행렬 곱으로 합성할 수 있고, 반대 방향 좌표 변환에는 inverse transformation을 사용합니다.
여기에 하나를 덧붙인다면
행렬 곱의 순서에 따라 결과가 달라지기 때문에 어떤 coordinate system에서 어느 coordinate system으로 가는 transformation인지 명확히 관리해야 합니다.
라고 할 수 있다.
47. "Registration이 무엇인가요?"라고 물으면
다음 정도가 적절하다.
서로 다른 영상에서 같은 해부학적 위치가 대응하도록 좌표계를 맞추는 과정이라고 이해하고 있습니다. 하나를 fixed image, 다른 하나를 moving image로 두고, moving image에 적용할 transformation의 parameter를 similarity metric이 좋아지는 방향으로 최적화합니다. Rigid registration은 rotation과 translation만 허용하고, affine은 scaling과 shear까지 허용하며, deformable registration은 위치별 변형까지 표현할 수 있습니다.
그리고 조금 더 물으면
최종 transformation을 실제 영상 grid에 적용할 때는 resampling이 필요하고, 변환된 좌표가 voxel 정수 위치에 정확히 떨어지지 않기 때문에 interpolation을 사용합니다.
라고 이어갈 수 있다.
48. "Rigid와 Affine의 차이가 무엇인가요?"라고 물으면
다음처럼 답할 수 있다.
Rigid transformation은 rotation과 translation만 사용해서 거리와 각도를 보존합니다. 그래서 물체의 크기와 모양이 변하지 않습니다. Affine transformation은 일반적인 선형변환과 translation을 사용하기 때문에 scaling이나 shear도 표현할 수 있고, 따라서 길이나 각도는 변할 수 있지만 직선과 평행 관계는 보존됩니다.
49. "Voxel Coordinate와 Physical Coordinate의 차이는 무엇인가요?"라고 물으면
이 질문은 의료영상 면접에서 상당히 중요하다.
Voxel coordinate는 영상 배열 안의 index이고, physical coordinate는 실제 공간상의 위치입니다. 두 좌표를 변환하려면 voxel spacing뿐 아니라 image origin과 direction도 고려해야 합니다. 따라서 같은 index 차이라도 spacing이 다르면 실제 mm 거리는 다를 수 있습니다.
이 답을 자연스럽게 할 수 있으면 의료영상 좌표계의 기본은 잡혀 있다고 볼 수 있다.
50. "왜 Resampling할 때 inverse transform을 쓰나요?"라고 물으면
조금 더 깊은 질문이다.
Source voxel을 forward transformation으로 직접 output에 보내면 정수 grid 사이에 떨어지면서 빈 voxel이 생길 수 있습니다. 그래서 보통 output grid의 각 voxel을 기준으로 inverse transformation을 사용해서 source image의 어느 위치에서 값을 가져올지 계산하고, 그 위치의 값을 interpolation해서 채우는 backward mapping 방식을 사용합니다.
이 답은 단순 암기보다 실제 구현 흐름을 이해했다는 인상을 줄 수 있다.
51. "CT와 X-ray Registration은 어떻게 생각할 수 있나요?"라고 물으면
CT는 3D volume이고 일반 X-ray는 2D projection image이기 때문에 직접 voxel 대 voxel로 비교할 수 없습니다. CT를 현재 추정한 자세로 X-ray처럼 projection해서 DRR 같은 가상 영상을 만들고, 실제 X-ray와의 similarity를 비교하면서 CT의 pose를 최적화하는 방식으로 2D-3D registration을 구성할 수 있습니다.
여기서 pose는 물체의 위치와 방향을 합친 개념이다.
즉 대략
position + orientation
이라고 보면 된다.
52. 이 분야에서 3D 좌표 계산을 볼 때 체크할 것
새로운 의료영상 코드를 받았다면 먼저 다음을 확인하는 것이 좋다.
- 이 좌표는 voxel index인가, physical coordinate인가?
- 단위가 voxel인가, mm인가?
- 영상의 spacing은 얼마인가?
- origin은 어디인가?
- direction은 어떻게 정의되어 있는가?
- RAS인가 LPS인가?
- transformation은 어느 좌표계에서 어느 좌표계로 가는가?
- forward transformation인가 inverse transformation인가?
- 회전과 이동의 적용 순서는 무엇인가?
- interpolation 방식은 무엇인가?
- 영상 intensity인가 segmentation label인가?
- Registration이라면 fixed image와 moving image는 무엇인가?
복잡한 수학보다 이런 조건을 잘못 잡아서 생기는 문제가 훨씬 흔하다.
53. 전체 개념을 한 번에 연결하면
지금까지 나온 개념은 사실 하나의 흐름이다.
CT는 3D voxel grid다.
|
v
Voxel index만으로는 실제 위치를 알 수 없다.
|
v
Spacing, Origin, Direction이 필요하다.
|
v
이를 통해 Physical Coordinate를 얻는다.
|
v
서로 다른 영상은 서로 다른 Coordinate System을 가질 수 있다.
|
v
Transformation으로 좌표계를 변환한다.
|
v
회전과 이동은 4x4 Transformation Matrix로 함께 표현할 수 있다.
|
v
두 영상이 잘 맞는 Transformation을 찾는 것이 Registration이다.
|
v
Metric으로 얼마나 잘 맞는지 평가한다.
|
v
Optimizer가 Transformation parameter를 찾는다.
|
v
찾은 Transformation으로 output grid를 Resampling한다.
|
v
정수 voxel 사이의 값은 Interpolation으로 계산한다.
이 연결을 이해하는 것이 개별 용어를 외우는 것보다 훨씬 중요하다.
54. 최소한 이것들은 확실하게 기억하자
면접 직전에 모든 공식을 외울 필요는 없다.
다음 정도는 확실히 설명할 수 있으면 좋다.
Voxel
3차원 영상의 한 격자 요소.
Spacing
voxel 한 칸의 실제 물리적 크기.
Origin
영상 좌표계의 시작점이 실제 공간에서 어디에 있는지 나타내는 값.
Direction
영상의 각 축이 실제 공간에서 어느 방향을 향하는지 나타내는 행렬.
Physical Coordinate
실제 환자 공간에서의 위치. 보통 mm 단위로 다룬다.
Transformation
한 좌표계의 점을 다른 좌표계로 변환하는 규칙.
Transformation Matrix
회전, 이동 등의 좌표 변환을 행렬로 표현한 것. 3D에서는 translation까지 함께 표현하기 위해 4\times4 homogeneous matrix를 많이 사용한다.
Rigid Registration
이동과 회전만으로 두 영상을 맞추는 방법.
Affine Registration
이동, 회전뿐 아니라 scaling과 shear까지 허용하는 방법.
Deformable Registration
공간 위치마다 서로 다른 변형을 허용하는 방법.
Similarity Metric
두 영상이 얼마나 잘 정렬되었는지를 숫자로 평가하는 기준.
Optimizer
Metric이 좋아지도록 transformation parameter를 찾는 알고리즘.
Interpolation
격자의 정수 위치 사이에서 영상값을 추정하는 방법.
Resampling
Transformation 후 새로운 grid에 영상을 다시 구성하는 과정.
Projection
3차원 공간의 점이나 volume을 2차원 영상 평면으로 대응시키는 과정.
마무리
의료영상의 3D 기하학은 처음 보면 별개의 전문 용어가 매우 많이 등장한다.
하지만 기본 구조는 비교적 명확하다.
먼저 영상에는 자체적인 voxel 좌표계가 있고, 이를 실제 공간의 mm 좌표와 연결해야 한다.
그 다음 서로 다른 좌표계를 rotation과 translation 등의 transformation으로 연결한다.
두 영상 사이에서 적절한 transformation을 데이터로부터 찾아내는 과정이 Registration이다.
그리고 그 transformation을 실제 영상에 적용하려면 interpolation과 resampling이 필요하다.
결국 가장 중요한 질문은 계속 동일하다.
지금 이 좌표는 어느 공간에 있고, 어느 공간으로 옮기려는가?
3D 의료영상 코드를 읽을 때 이 질문을 먼저 던질 수 있다면, Transformation Matrix와 Registration을 포함한 대부분의 기본 개념을 훨씬 빠르게 이해할 수 있다.