PET 원리 ⑥ Sinogram — 수억 개의 직선을 표 하나로
5편에서 동시계수로 얻은 직선(LOR)이 한 번 검사에 수억 개씩 쌓인다고 했습니다. 이걸 그냥 쌓아두기만 하면 영상을 만들 수 없습니다. 이번 편에서는 LOR을 체계적으로 정리하는 방법인 사이노그램(sinogram)을 다룹니다.
이전 글 PET 영상재구성 학습 데이터 만들기에서 영상을 Radon 변환해 sinogram을 만드는 과정을 다뤘습니다. 이번 편은 반대 방향입니다. 실제 스캐너가 측정한 데이터가 어떻게 sinogram이 되는지를 봅니다.
직선 하나를 숫자 두 개로
평면 위의 직선 하나는 숫자 두 개로 정확하게 표현할 수 있습니다.
- φ (각도): 직선이 어느 방향으로 기울어져 있는가
- r (거리): 링 중심에서 직선까지 얼마나 떨어져 있는가
왼쪽: 같은 각도 φ로 기울어진 평행한 LOR 세 개. 오른쪽: 이 LOR들은 사이노그램의 같은 행(φ = 30°)에 있는 서로 다른 칸에 대응합니다.
그러니 모든 LOR을 가로축 r, 세로축 φ인 표에 배치할 수 있습니다. LOR 하나가 표의 칸 하나입니다. 그 칸에는 그 LOR에서 동시계수가 몇 번 잡혔는지를 적습니다. 이 표가 사이노그램입니다.
엑셀로 비유하면 이렇습니다. 행은 각도, 열은 위치이고, 각 셀에는 “그 직선에서 몇 번 맞았나”라는 개수가 들어 있습니다. 수억 개의 사건 기록이 크기가 정해진 표 하나로 정리됩니다.
한 행 = 한 방향에서 본 그림자
같은 행에 있는 칸들은 모두 같은 방향의 평행한 직선들입니다. 그러니 한 행 전체를 보면 “그 방향에서 몸을 봤을 때의 그림자”, 즉 투영(projection) 이 됩니다. 각 직선의 계수는 그 직선 위에 있는 방사능을 모두 더한 값에 비례하기 때문입니다.
\[p(r, \varphi) \;\propto\; \int_{\text{LOR}(r,\varphi)} f(x, y)\, d\ell\]\(f(x,y)\)는 우리가 알고 싶은 방사능 분포(영상), \(p(r,\varphi)\)는 측정한 사이노그램입니다. 영상을 모든 각도에서 선을 따라 적분한 것, 이것이 Radon 변환입니다. PET 스캐너는 물리적으로 Radon 변환을 측정하는 장치라고 할 수 있습니다.
왜 “사인”그램인가
영상 속의 점 하나를 생각해 봅시다. 그 점을 지나는 LOR들을 사이노그램에 표시하면 사인 곡선이 그려집니다.
\[r = x \cos\varphi + y \sin\varphi\]각도를 돌려 가며 보면, 점이 중심에서 멀리 있을수록 그림자 속 위치가 크게 흔들리기 때문입니다. 위 그림 오른쪽의 굵은 곡선 세 개는 각각 영상 속 작은 원 하나에 해당합니다. 이 관계는 이전 글에서 그림으로 자세히 다뤘습니다.
φ는 0°~180°만 있으면 충분합니다. 180°를 넘어가면 같은 직선을 반대 방향에서 다시 보는 것이기 때문입니다. 직선에는 앞뒤가 없습니다.
실제 스캐너의 사이노그램
실제 링에서는 검출기가 띄엄띄엄 놓여 있으므로, LOR도 “검출기 i와 검출기 j의 쌍”으로만 존재합니다. 검출기 번호 두 개가 곧 사이노그램의 좌표로 바뀝니다.
- 두 검출기 번호의 합(\(i + j\))이 각도 φ를 정합니다.
- 두 검출기 번호의 차(\(j - i\))가 거리 r을 정합니다.
이 구조 때문에 재미있는 일이 생깁니다. 검출기 하나가 고장 나면 그 검출기가 속한 LOR이 모두 사라지는데, 사이노그램에서는 이게 대각선 줄로 나타납니다.
실제 링 구조로 계산한 사이노그램. 오른쪽은 검출기 블록 하나가 고장 난 경우입니다. 그 검출기가 속한 LOR이 대각선을 따라 사라집니다.
검출기 i를 고정하고 짝 j를 하나씩 바꾸면, 합과 차가 동시에 하나씩 바뀌니 대각선을 따라 움직입니다. 그래서 실제로 스캐너 품질 관리를 할 때 사이노그램을 눈으로 확인하는 경우가 많습니다. 영상에서는 찾기 어려운 검출기 고장이 사이노그램에서는 한눈에 보입니다.
링 가장자리로 갈수록 LOR 간격이 조금씩 좁아지는 arc 효과도 있습니다. 검출기는 원을 따라 같은 간격으로 놓여 있지만, 이를 직선 거리 r로 바꾸면 간격이 일정하지 않게 됩니다. 재구성 전에 이를 균일한 간격으로 다시 맞추는 과정(arc correction)을 거칩니다.
검출기마다 감도가 조금씩 다른 것도 사이노그램에 무늬로 나타납니다. 이걸 맞춰주는 정규화(normalization) 는 7편에서 다룹니다.
링이 여러 개일 때: 3D PET
지금까지는 링 하나, 즉 2차원 단면 하나만 생각했습니다. 실제 스캐너는 링 수십 개가 몸의 축 방향으로 나란히 붙어 있어서, 한 번에 몸의 일정 길이(보통 15~30 cm)를 찍습니다.
옆에서 본 모습. 같은 링 안의 LOR(파랑)뿐 아니라 서로 다른 링 사이의 비스듬한 LOR(주황)도 받습니다.
- 직접 LOR(direct): 같은 링 안의 두 검출기를 잇습니다. 각 링마다 2D 사이노그램이 하나씩 생깁니다.
- 경사 LOR(oblique): 서로 다른 링의 검출기를 잇습니다. 몸을 비스듬히 가로지릅니다.
예전 스캐너는 링 사이에 납 칸막이(septa) 를 세워 경사 LOR을 막고 2D 단면만 받았습니다(2D 모드). 지금은 거의 모든 스캐너가 칸막이 없이 경사 LOR까지 모두 받는 3D 모드입니다. 받는 LOR이 훨씬 많아서 감도가 몇 배 높아지는 대신, 산란과 랜덤도 함께 늘어나고 데이터가 엄청나게 커집니다.
그래서 3D 데이터는 몇 가지 방식으로 줄여서 다룹니다.
- 링 번호 두 개의 조합을 격자로 그려 어떤 조합을 합칠지 정하는 미켈로그램(Michelogram)
- 비슷한 기울기의 LOR을 묶는 span
- 경사 LOR을 가까운 2D 단면으로 옮겨 담는 리비닝(rebinning). SSRB, FORE 같은 방법이 있습니다.
최신 전신 PET의 사이노그램은 칸 수가 수천만 개이고, 뒤에 나올 TOF 정보까지 포함하면 수억 개가 됩니다. 요즘은 사이노그램 대신 리스트 모드 데이터로 바로 재구성하는 경우도 많습니다.
딥러닝 관점에서 본 사이노그램
영상 AI를 하는 입장에서 사이노그램의 성질을 정리해 두면 쓸모가 있습니다.
| 성질 | 의미 |
|---|---|
| 값은 개수(count) | 밝기가 아니라 셈입니다. 음수가 없고 Poisson 잡음을 따릅니다 |
| 영상과 전역적으로 연결 | 영상의 한 픽셀이 사이노그램 전체에 사인 곡선으로 퍼집니다. CNN의 국소 수용 영역과 맞지 않습니다 |
| 대응 관계는 기하학으로 결정 | 어느 픽셀이 어느 칸에 기여하는지는 스캐너 구조로 이미 알려져 있습니다 |
| 결손과 무늬가 구조적 | 고장, 감도 차이, 틈이 대각선이나 주기적 무늬로 나타납니다 |
두 번째와 세 번째 성질 때문에, 사이노그램에서 영상으로 바로 가는 딥러닝 모델은 이미 아는 기하학 관계를 네트워크 안에 넣어주는 방향으로 발전했습니다. 이 이야기는 9편에서 이어집니다.
정리
- LOR 하나는 각도 φ와 거리 r, 숫자 두 개로 표현됩니다. 이걸 좌표로 쓰는 표가 사이노그램이고, 각 칸에는 계수가 들어 있습니다.
- 사이노그램의 한 행은 한 방향에서 본 투영(그림자)입니다. PET은 물리적으로 Radon 변환을 측정합니다.
- 영상 속 점 하나는 사이노그램에서 사인 곡선이 됩니다.
- 실제 스캐너에서는 검출기 쌍이 곧 사이노그램 좌표입니다. 고장 난 검출기는 대각선 줄로 보입니다.
- 3D PET은 링 사이의 비스듬한 LOR까지 받아 감도가 높습니다. 대신 데이터가 방대해집니다.
다음 편에서는 사이노그램에 섞여 있는 감쇠, 산란, 랜덤, 검출기 감도 차이를 보정하는 방법을 다룹니다.
참고문헌
이 글의 내용은 기하학(좌표 변환)이라 별도 수치 인용이 없습니다. 그림은 실제 링 구조와 Radon 변환을 Python으로 직접 계산해 그렸습니다. 사이노그램을 만드는 과정은 이전 글에 코드와 함께 정리했습니다.
PET 원리 시리즈