Stationary Cone Beam Translation CT
1 개요
고정된 콘빔 CT 시스템에서 평행 이동하는 물체의 움직임을 고려하여 단면 영상을 복원하는 알고리즘
2 알고리즘 상세 설명
물체의 이동 방향은 이미지의 x 축과 평행한 왼쪽 또는 오른쪽이며, 중심 페이지에서 물체의 중심이 소스 이미지 x 축 중심을 지남을 가정합니다.
Source Images | Destination Image |
---|---|
![]() |
![]() |
Sinogram Keep Ratio 와 Interpolation Coefficient 에 의하여 x 축 복셀 수가 결정되며 Interpolation Coefficient 는 특히 해상도와 직접적인 관련이 있습니다. y 축 복셀 수는 Source ROI 의 높이에 의해 결정됩니다. z 축 복셀 수는 coronal plane 수를 의미하는 Reconstruction Plane Count 를 통해 설정 가능합니다.
Slicing Plane 지정함으로써 단면 종류를 선택할 수 있습니다.
Sigmoid 활성화 시 Sigmoid 가 적용된 이후의 값이 출력되며, 시각화에 유리합니다.
Source ROI X 축 길이에 의하여 angle 범위가 증가합니다. 또한 이 길이에 Sinogram Keep Ratio 를 곱한 값을 하한으로 하는 Optimal FFT Size 가 결정되고 수행되므로, Sinogram Keep Ratio 를 조금씩 변경하며 FFT Factors 를 크지도 작지도 않은 소수들로 구성할 시 연산 시간이 개선될 가능성이 있습니다.
Destination Sinogram Image |
---|
![]() |
Destination Sinogram Image 의 sinogram 품질을 확인하며 Object Translation Distance 와 Principal Delta X Pixel 파라미터를 조절해 결과를 개선할 수 있습니다. Sinogram 이 기울어진 경우 Object Translation Distance 를 조절하여 수직으로 조절할 수 있으며, 한쪽으로 치우친 경우 중심 페이지에서 물체가 중심에 있지 않음을 의미합니다. 위 또는 아래로 갈수록 sinogram 이 두꺼워 지는 현상은 principal delta x 설정으로 개선될 수 있습니다.
Destination 3D Object |
---|
![]() |
Destination 3D Object 는 Object Voxel 에 대하여 Sigmoid 및 Intensity Threshold 가 수행된 point cloud 입니다. 또한 3D View 의 Zoom Fit 상태에서 보다 시각적으로 일치하도록 출력됩니다.
3 파라미터 설정 및 사용 방법
Sinogram Index 설정
const CResult SetDestinationSinogramIndex(int64_t i64DestinationSinogramIndex)
특정 Transverse plane 에 대한 Sinogram 을 출력할 수 있으며, 해당 plane 의 페이지 인덱스를 설정합니다. Sinogram 의 형태를 보며 파라미터를 조절하여 결과를 개선할 수 있습니다.i64DestinationSinogramIndex
: Transverse plane page index
Scan Geometry 설정
const CResult SetObjectTranslateDirection(EObjectTranslateDirection eObjectTranslateDirection)
페이지 증가에 따른 물체의 이동 방향을 설정합니다.eObjectTranslateDirection
: 페이지 증가에 따른 물체의 이동 방향 Default: EObjectTranslateDirection_RightToLeft- EObjectTranslateDirection_LeftToRight: 물체가 왼쪽에서 오른쪽으로 이동합니다.
- EObjectTranslateDirection_RightToLeft: 물체가 오른쪽에서 왼쪽으로 이동합니다.
const CResult SetDetectorCellSizeUnit(double f64DetectorCellSizeUnit)
Detector 단일 cell 의 한 변의 길이 [unit] 를 지정합니다.f64DetectorCellSizeUnit
: Detector 단일 cell 의 한 변의 길이 [unit]
const CResult SetSourceObjectDistanceUnit(double f64SourceObjectDistanceUnit)
Object 의 직선 경로를 포함하는 detector 와 평행한 평면과 source 간 거리인 소스와 물체 간 거리 [unit] 를 지정합니다.f64SourceObjectDistanceUnit
: 소스와 물체 간 거리 [unit]
const CResult SetSourceDetectorDistanceUnit(double f64SourceDetectorDistanceUnit)
Detector 평면과 source 간 거리인 소스와 detector 간 거리 [unit] 를 지정합니다.f64SourceDetectorDistanceUnit
: 소스와 detector 간 거리 [unit]
const CResult SetObjectTranslationDistanceUnit(double f64ObjectTranslationDistanceUnit)
입력 이미지의 전체 페이지 수에 대하여 물체의 총 이동 거리 [degree] 를 설정합니다.f64ObjectTranslationDistanceUnit
: 물체의 총 이동 거리 [unit]\
const CResult SetPrincipalDeltaXPixel(double f64PrincipalDeltaXPixel)
Source 에서 Detector 평면으로 수선을 내렸을 때, 평면과 만나는 점의 위치인 principal point 가 detector 중심과의 x 축 방향 위치 차이인 principal delta x [px] 를 지정합니다. Detector 의 위치에 offset 이 있거나, detector 이미지가 crop 된 경우 또는 detector 평면이 기울어진 경우를 보정하기 위해 사용됩니다.f64PrincipalDeltaXPixel
: principal delta x [px]
Default: 0.00 [px]
입력 데이터 처리 방식 설정
const CResult SetNormalizedAirThreshold(double f64NormalizedAirThreshold)
Air 를 촬영한 detector 의 수치가 소스 이미지 타입을 고려하여 [0, 1] 사이로 정규화 되었을 때 대략 어느정도 수치인지를 의미하는 normalized air threshold 를 설정합니다.f64NormalizedAirThreshold
: normalized air threshold
const CResult SetSinogramKeepRatio(double f64SinogramKeepRatio)
Sinogram 을 중심으로 shift 한 후, 양쪽의 불필요한 공백을 제거하기 위해 중심을 기준으로 남길 비율을 의미하는 Sinogram 유지 비율을 설정합니다.f64SinogramKeepRatio
: sinogram 유지 비율
const CResult SetInterpolationCoefficient(int64_t i64InterpolationCoefficient)
물체의 페이지 당 픽셀 이동 거리가 1 이 아닌 경우 해상도 저하를 방지하기 위해 보간을 수행할 수 있으며, 이를 위한 보간 계수를 설정합니다. Sinogram 의 가로 길이와 직접적으로 관련이 있습니다. 계수가 1 인 경우 보간을 수행하지 않습니다.i64InterpolationCoefficient
: 보간 계수
const CResult SetMergeCoefficient(int64_t i64MergeCoefficient)
Sinogram 의 세로 길이가 과도할 경우 연산 시간 증가에 비해 품질 상승이 미미하므로 이를 병합하여 최적화 하기 위한 병합 계수입니다. 계수가 1 인 경우 병합을 수행하지 않습니다.i64MergeCoefficient
: 병합 계수
const CResult EnableFrequencyRampFilter(bool bEnableFrequencyRampFilter)
FBP 에서 저주파를 억제하기 위하여 주파수 필터링 시 Ramp Filter 의 적용 여부를 설정합니다. 일반적으로 적용하는 것이 권장됩니다.bEnableFrequencyRampFilter
: 주파수 필터링 시 Ramp Filter 의 적용 여부
Default: true
const CResult SetFrequencyWindow(EFrequencyWindow eFrequencyWindow)
FBP 에서 고주파를 억제하기 위하여 주파수 필터링 시 추가적으로 적용할 window 를 설정합니다.eFrequencyWindow
: 주파수 필터링 시 추가적으로 적용할 window
Default: EFrequencyWindow_Gaussian- EFrequencyWindow_None: window 없음
- EFrequencyWindow_Hann: Hann window
- EFrequencyWindow_Hamming: Hamming window
- EFrequencyWindow_Blackman: Blackman window
- EFrequencyWindow_BlackmanNuttall: Blackman Nuttall window
- EFrequencyWindow_BlackmanHarris: Blackman Harris window
- EFrequencyWindow_Gaussian: sigma 를 파라미터로 사용하는 Gaussin window
const CResult SetSigma(double f64Sigma)
Frequency window 가 Gaussian 인 경우 사용 될 sigma 를 설정합니다.f64Sigma
: Frequency window 가 Gaussian 인 경우 사용 될 sigma
출력 데이터 처리 방식 설정
const CResult SetReconstructionPlaneCount(int64_t i64ReconstructionPlaneCount)
출력 coronal plane 수를 결정합니다.i64ReconstructionPlaneCount
: 출력 coronal plane 수
const CResult EnableNegativeClip(bool bEnableNegativeClip)
음수 출력에 대한 0 클리핑 여부를 결정합니다.bEnableNegativeClip
: 음수 출력에 대한 0 클리핑 여부
const CResult EnableCircularMask(bool bEnableCircularMask)
Transverse plane 에서 적용되며, circular mask radius [unit] 보다 회전축 까지의 거리가 가까운 복셀만 남기는 원형 마스킹 처리 여부를 결정합니다.bEnableCircularMask
: 원형 마스킹 처리 여부
const CResult EnableSigmoid(bool bSigmoid)
F32 unlimited 출력 이미지에 Sigmoid 를 적용하여 출력할 것인지 여부를 설정합니다.bSigmoid
: sigmoid 적용 여부 [unit]
const CResult SetSigmoidB(double f64SigmoidB)
Destination 3D object 와 sigmoid 가 활성화 되었을 때의 destination image 에서 Object Voxel 에 적용할 generalized sigmoid 의 growth rate B 파라미터를 설정합니다.f64SigmoidB
: generalized sigmoid 의 growth rate B
const CResult SetSigmoidM(double f64SigmoidM)
Destination 3D object 와 sigmoid 가 활성화 되었을 때의 destination image 에서 Object Voxel 에 적용할 generalized sigmoid 의 horizontal translation M 파라미터를 설정합니다.f64SigmoidM
: generalized sigmoid 의 horizontal translation M
const CResult SetIntensityThreshold(int64_t i64IntensityThreshold)
Destination 3D object 에서 Object Voxel 에 generalized sigmoid 를 적용한 이후 intensity threshold 를 설정합니다.i64IntensityThreshold
: intensity threshold
const CResult SetSlicingPlane(ESlicingPlane eSlicingPlane)
Destination image 에 출력할 slicing plane 을 설정합니다.eSlicingPlane
: slicing plane
Default: ESlicingPlane_Transverse- ESlicingPlane_Transverse: transverse 단면, destination image 의 +x, +y, +page 축은 각각 source image 의 +x, -z, +y 축 방향과 대응됩니다.
- ESlicingPlane_Coronal: coronal 단면, destination image 의 +x, +y, +page 축은 각각 source image 의 +x, +y, +z 축 방향과 대응됩니다.
- ESlicingPlane_Sagittal: sagittal 단면, destination image 의 +x, +y, +page 축은 각각 source image 의 -z, +y, +x 축 방향과 대응됩니다.
4 예제 코드
CStationaryConeBeamTranslationCT stationaryConeBeamTranslationCT;
CFLImage fliSrcImage;
CFLImage fliDstImage;
CFLImage fliDstSinoImage;
CFL3DObject floDstObject;
stationaryConeBeamTranslationCT.SetSourceImage(&fliSrcImage);
stationaryConeBeamTranslationCT.SetDestinationImage(&fliDstImage);
stationaryConeBeamTranslationCT.SetDestinationSinogramImage(&fliDstSinoImage);
stationaryConeBeamTranslationCT.SetDestinationObject(&floDstObject);
stationaryConeBeamTranslationCT.SetDestinationSinogramIndex(15);
stationaryConeBeamTranslationCT.SetDetectorCellSizeUnit(0.16708);
stationaryConeBeamTranslationCT.SetObjectTranslateDirection(CStationaryConeBeamTranslationCT::EObjectTranslateDirection_RightToLeft);
stationaryConeBeamTranslationCT.SetSourceObjectDistanceUnit(13.60);
stationaryConeBeamTranslationCT.SetSourceDetectorDistanceUnit(60.00);
stationaryConeBeamTranslationCT.SetObjectTranslationDistanceUnit(24.00);
stationaryConeBeamTranslationCT.SetPrincipalDeltaXPixel(0.00);
stationaryConeBeamTranslationCT.SetNormalizedAirThreshold(0.60);
stationaryConeBeamTranslationCT.SetSinogramKeepRatio(0.30);
stationaryConeBeamTranslationCT.SetInterpolationCoefficient(6);
stationaryConeBeamTranslationCT.SetMergeCoefficient(21);
stationaryConeBeamTranslationCT.EnableFrequencyRampFilter(true);
stationaryConeBeamTranslationCT.SetFrequencyWindow(CStationaryConeBeamTranslationCT::EFrequencyWindow_Gaussian);
stationaryConeBeamTranslationCT.SetSigma(0.30);
stationaryConeBeamTranslationCT.SetReconstructionPlaneCount(140);
stationaryConeBeamTranslationCT.EnableNegativeClip(true);
stationaryConeBeamTranslationCT.EnableCircularMask(true);
stationaryConeBeamTranslationCT.EnableSigmoid(true);
stationaryConeBeamTranslationCT.SetSigmoidB(1.00);
stationaryConeBeamTranslationCT.SetSigmoidM(0.00);
stationaryConeBeamTranslationCT.SetIntensityThreshold(190));
stationaryConeBeamTranslationCT.SetSlicingPlane(CStationaryConeBeamTranslationCT::ESlicingPlane_Transverse);
stationaryConeBeamTranslationCT.Execute();
5 기타 사항
Supported Feature
- Image
- Source Image
- Destination Image
- Destination Sinogram Image
- 3D Object
- Destination 3D Object
Supported Format
- Source
[in]
- Page
- 1
- Channel
- 1
- Value Type & Depth
- Signed: 8, 9-16, 32
- Unsigned: 8, 9-16, 32
- Floating: 32, 64
- Page
- Destination
[out]
- Page
- Reconstruction Plane Count 와 Slicing Plane 에 의하여 결정
- Channel
- 1
- Value Type & Depth
- F32
- Page
- Destination Sinogram
[out]
- Page
- 1
- Channel
- 1
- Value Type & Depth
- F32
- Page