안녕하세요. 지난 포스팅의 디지털 영상 처리 - 기하 평균 필터에서는 가장 일반화된 복원 필터에 대해서 알아보았습니다. 오늘은 주제를 바꾸어서 CT(Computed Tomography)에 대한 이야기를 해볼까 합니다. CT는 디지털 영상 처리에서 가장 중요하게 다루는 분야 중에 하나이기 때문에 알아둘 필요가 있습니다. 오늘은 이를 위한 전체적인 개념에 대해서 정리하는 시간을 가지도록 하겠습니다. 제가 처음에 CT를 중심으로 설명한다고 했으나 이번 절에서 설명하는 수학적 도구는 SPECT, PET, MRI같은 영상의학 장비에도 동일하게 적용가능합니다.
1. 서론
일단 문제에 대한 정의부터 할 필요가 있습니다. 아래의 그림과 같이 균일한 배경 속에 딱 1개의 단일 객체만 있다고 가정해보도록 하죠. 만약, CT에 적용된다면 3D 인체의 단면이라고도 볼 수 있습니다.
그러면 위에서 오른쪽 그림에서 빔의 방향대로 X-선을 왼쪽에서 오른쪽으로 통과시키고 X-선의 에너지가 배경보다 객체에서 더 많이 흡수한다고 가정하겠습니다. 그리고 오른쪽 끝에 있는 센서가 통과된 X-선을 흡수하여 하나의 스트립을 구성합니다. 따라서 원의 객체가 있는 영역에서만 스트립의 신호 강도가 높은 것을 관찰 할 수 있습니다.
현재 저희가 얻은 정보는 X-선을 왼쪽에서 오른쪽으로 투영시켜 해당 방향에 대해서 객체의 위치는 파악할 수 있으나, 객체가 여러 개인지 단일인지는 알 수 있는 방법이 없습니다. 이를 해결하기 위해서 X-선이 들어왔던 방향(왼쪽에서 오른쪽)의 반대 방향(오른쪽에서 왼쪽)으로 스트립의 신호 강도를 그대로 돌려줍니다.
그러면 위의 그림과 같이 스트립의 신호 강도에 따라서 해당 방향이 동일한 밝기값을 가지게 됩니다. 이번에는 아래에서 위로 X-선을 투영시키도록 하겠습니다.
그러면 위의 그림과 같이 얻을 수 있죠. 현재, 저희는 왼쪽에서 오른쪽, 아래에서 위로의 X-선 투영을 통해 2가지 방향성에 대한 정보를 어느 정도 알아냈습니다. 다음으로 할 것은 위 2개의 정보를 하나로 합칩니다.
가장 처음 그림의 객체의 위치와 바로 위 그림에서 가장 밝은 영역의 위치를 비교해보세요. 어느 정도 비슷한 것을 관찰할 수 있습니다. 하지만, 여전히 만족스럽지 않기 때문에 2가지 방향이 아닌 다양한 방향에 대해서 X-선 투영과 반사를 반복하면 아래와 같이 얻을 수 있습니다.
가장 오른쪽 아래의 사진은 약 5도씩 X-선을 투영 및 반사를 반복하여 얻은 결과입니다. 어느 정도 복원이 가능하다는 것을 볼 수 있습니다. 이와 같이 투영된 신호를 다시 반사시켜 복원하는 일련의 과정을 역투영(Backprojection)이라고 합니다. 이와 같은 역투영은 다중 객체일 때도 어느 정도 좋은 결과를 보여줍니다.
위 그림의 흡수율이 서로 다른 2개의 객체가 공존했을 때 입니다. 당연한 결과이지만, 몇 도의 간격으로 역투영을 하느냐에 따라서 그 성능은 천차만별일 것입니다. 위의 경우에는 약 5도씩 역투영한 (e)보다는 3도씩 역투영한 (f)가 더 좋은 결과를 보여주고 있습니다.
2. 투영과 라돈 변환(Radon Transform)
일반적으로 데카르트 좌표에서의 직선은 기울기-절편 형식으로 아래와 같이 작성합니다.
$$y = ax + b$$
하지만, 허프 변환(Hough Transform)에서도 등장하는 표준 형태로도 쓸 수 있습니다. 이를 그림으로 표현한 것이 아래의 그림입니다. $\rho$는 원점에서부터 가장 짧은 직선까지의 경로의 길이, $\theta$는 $\rho$와 $x$ 축 사이의 각도입니다.
$$x\cos{\theta} + y\sin{\theta} = \rho$$
앞으로 저희는 표준형으로 직선을 표현하도록 하겠습니다. 이전 절에서 보았던 예제를 다시 고려해보도록 하죠. X-선은 스트립에 그대로 투영됩니다. 하지만 그러한 X-선을 자세히 보면 아마도 평행한 광선이 특정 범위만큼 나열되어 있다는 것을 아실 겁니다. 따라서 지금까지 저희가 봤던 예제에서 1개의 각도에 대한 역투영은 표준형 직선 $x\cos{\theta} + y\sin{\theta} = \rho$의 집합으로 모델링할 수 있습니다. 이를 그림으로 표현하면 아래와 같습니다.
우의 그림에서 각도 $\theta_{k}$는 고정되어 있으며 바뀌는 것은 원점에서 직선까지의 거리인 $\rho_{j}$ 밖에 없습니다. 이를 모델링하여 특정 각도 $\theta_{k}$ 중 원점과의 거리가 $\rho_{j}$인 직선을 아래와 같이 쓸 수 있습니다.
$$L(\rho_{j}, \theta_{k}) = x\cos{\theta_{k}} + y\sin{\theta_{k}} - \rho_{j}$$
그리고 특정 각도 $\theta_{k}$ 중 원점과의 거리가 $\rho_{j}$인 직선을 통해 투영된 에너지의 총합은 직선을 따라서 합으로 구성됩니다. 저희는 잠시동안 모든 변수들이 연속임을 가정하겠습니다. 따라서 이 광선의 합은 아래의 선적분으로 구할 수 있습니다.
$$g(\rho_{j}, \theta_{k}) = \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} f(x, y) \delta(x\cos{\theta_{k}} + y\sin{\theta_{k}} - \rho_{j}) \; dxdy$$
이 식에서 $\delta$는 임펄스 함수입니다. 임펄스 함수의 특징 중 하나는 인수가 0이 아니면 0입니다. 따라서 위 적분이 직선 $L(\rho_{j}, \theta_{k})$를 따라서만 적분한다는 것을 의미합니다. 이 식을 일반화시키면 아래와 같습니다. 그리고 이 식이 바로 "라돈 변환(Radon Transform)"입니다.
$$g(\rho, \theta) = \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} f(x, y) \delta(x\cos{\theta} + y\sin{\theta} - \rho) \; dxdy$$
일반적으로 라돈 변환을 간단하게 표현하기 위해서 $\mathcal{R}$이라고 씁니다. 하지만, 당분간은 위의 전체 수식에서 얻을 것이 많기 때문에 기호는 사용하지 않겠습니다. 결국 라돈 변환은 어떤 객체 $f(x, y)$가 주어졌을 때 각도($\theta$)과 영역($\rho$)에 대한 투영값을 추출한다는 것을 의미합니다. 예를 들어 위의 그림의 경우에는 $g(\rho, \theta_{k})$가 특정 각도 $\theta_{k}$에 대한 $f(x, y)$의 라돈 변환이라고 볼 수 있습니다.
이전 절에서도 언급했지만 이번 주제의 핵심은 역투영입니다. 그리고 역투영을 위해서는 투영을 한 결과를 얻어야하지요. 따라서 라돈 변환은 역투영을 통한 복원의 가장 기초적인 개념이라고 볼 수 있습니다. 일반적으로 저희는 디지털 영상을 다루기 때문에 이를 이산화하면 아래와 같습니다.
$$g(\rho, \theta) = \sum_{x = 0}^{M - 1} \sum_{y = 0}^{N - 1} f(x, y) \delta(x\cos{\theta} + y\sin{\theta} - \rho)$$
여기서 변한 것은 $x, y, \rho, \theta$가 모두 이산변수이기 때문에 적분이 아닌 단순 합으로 변화하였습니다. 위 식에서 $\theta$를 고정시키고 $\rho$를 변화시키면 고정된 $\theta$와 변화하는 $\rho$에 의해 결정되는 직선 $L(\rho, \theta)$에 대해서 $f(x, y)$의 화소들을 단순하게 더하기만 합니다.
이때, 라돈 변환 $g(\rho, \theta)$가 $\rho, \theta$를 데카르트 좌표들로 하는 영상으로 표시되면 그 결과를 "시노그램(Sinogram)"이라고 합니다. 예를 들어서 아래의 그림을 보도록 하겠습니다.
저희는 다시 한번 목표를 상기하도록 하겠습니다. 저희의 최종 목표는 투영들로부터 입체에 대한 3D 표현을 추출하는 것입니다. 그리고 그 방법론으로 각 투영을 역투영하고 모든 역투영을 합하여 하나의 영상(또는 박편)을 만드는 것입니다. 그리고 모든 결과의 영상을 쌓으면 3D 영상이 만들어지게 됩니다. 그리고 라돈 변환은 투영 과정을 수학적으로 표현한 것이였습니다. 따라서 이제 저희가 필요한 것은 역투영입니다.
라돈 변환으로부터 역투영된 영상을 추출하기 위해서 고정된 회전값 $\theta_{k}$에 대해서 완전 투영 $g(\rho, \theta_{k})$의 단일 점 $g(\rho_{j}, \theta_{k})$에서부터 시작하도록 하겠습니다. 그리고 $g(\rho_{j}, \theta_{k})$는 시노그램 상에서는 하나의 점으로 표현되고 이 하나의 점을 역투영한다는 것은 직선 $L(\rho_{j}, \theta_{k})$를 따라서 $g(\rho_{j}, \theta_{k})$를 복사하는 것과 동일합니다. 그리고 이 과정을 모든 $\rho_{j}$에 적용하면 아래의 식을 얻을 수 있습니다.
$$f_{\theta_{k}} = g(\rho, \theta_{k}) = g(x\cos{\theta_{k}} + y\sin{\theta_{k}}, \theta_{k})$$
그리고 위 식은 임의의 $\theta_{k}$에 대해서 성립하기 때문에 아래와 같이 일반화하여 표현할 수 있습니다.
$$f_{\theta} = g(\rho, \theta) = g(x\cos{\theta} + y\sin{\theta}, \theta)$$
그리고 이를 모든 0도에서 180도 까지의 모든 각도에 대해서 적분하여 최종 영상을 얻습니다.
$$f(x, y) = \int_{0}^{\pi} f_{\theta}(x, y) \; d\theta$$
이를 이산화하여 표현하면 아래와 같이 표현할 수 있습니다.
$$f(x, y) = \sum_{\theta=0}^{\pi} f_{\theta}(x, y)$$
일반적으로 위와 같이 얻은 역투영 영상을 "래미노그램(Laminogram)"이라고 합니다. 래미노그램은 투영이 만들어진 영상 $f(x, y)$에 대한 근사화라고 볼 수 있습니다. 하지만, 그 결과는 저희가 원하는 대로 좋지 않습니다. 다음 포스팅에서는 이를 해결할 수 있는 푸리에-박편 정리에 대해서 알아보겠습니다.
전체적인 개요를 정리하면 먼저, 영상에서 라돈 변환을 통해 각도들에 대한 투영을 계산합니다. 이를 $\rho, \theta$의 데카르트 좌표계로 표현한 것이 시노그램입니다. 역투영을 계산하기 위해서 각도를 고정하고 $\rho$를 바꾸어가며 계산한 뒤 다음으로 각도를 바꾼 뒤 다시 $\rho$를 바꾸는 과정을 반복하여 래미노그램을 얻습니다.
'image processing' 카테고리의 다른 글
디지털 영상 처리 - 칼라 기초 (0) | 2021.07.12 |
---|---|
디지털 영상 처리 - 투영에 의한 영상 재구성 2 (1) | 2021.07.11 |
디지털 영상 처리 - 기하 평균 필터 (0) | 2021.07.07 |
디지털 영상 처리 - 제한된 최소 제곱 필터링 (0) | 2021.06.23 |
디지털 영상 처리 - 최소 평균 오차(Wiener) 필터링 구현하기 (0) | 2021.06.21 |