Stationary Cone Beam Generalized CT
1 개요
고정된 콘빔 CT 시스템에서 프로젝션마다 임의의 물체 움직임을 허용하는 단면 재구성 알고리즘
2 알고리즘 상세 설명
| Source Images | Destination Image |
|---|---|
![]() |
![]() |
Fig. Source, Destination image.
Object Voxel Count 와 일치하는 크기의 단면 이미지들을 출력합니다.
Slicing Plane 지정함으로써 단면 종류를 선택할 수 있습니다.
Output Format 을 지정함으로써 출력 단면 이미지의 타입을 지정할 수 있습니다. Output Format 이 F32 인 경우 unlimited 타입이며, Sigmoid 가 적용되기 전의 복셀 값을 출력합니다. U8 과 U16 은 F32 의 수치에 Sigmoid 가 적용된 이후의 값이며, 저장 및 시각화에 유리합니다.
| Destination 3D Object |
|---|
![]() |
Fig. Destination 3D Object
3 파라미터 설정 및 사용 방법
Scan Geometry 설정 (Load CSV)
const CResult LoadCSV(const Base::CFLString<wchar_t>& flsFileName)
예제와 동일한 양식의 CSV 데이터를 로드하여 Scan Geometry 를 지정할 수 있습니다.flsFileName: CSV file path
Scan Geometry 설정 (API)
const CResult SetDetectorCount(int64_t i64DetectorCount)
Detector 수를 지정합니다. 디텍터 셀 사이즈 또는 측정치의 스케일이 다른 경우에 별도로 처리할 수 있습니다.i64DetectorCount: Detector 수
const CResult SetDetectorPageCounts(const Base::CFLArray<int32_t>& flaDetectorPageCounts)
Detector 별 source image 에서 점유하고 있는 page 수를 지정합니다.flaDetectorPageCounts: Detector 별 페이지 수
const CResult SetDetectorCellXSizes(const Base::CFLArray<double>& flaDetectorCellXSizes)
Detector 별 X 방향 셀사이즈를 지정합니다.flaDetectorCellXSizes: Detector 별 X 방향 셀사이즈 [unit]
const CResult SetDetectorCellYSizes(const Base::CFLArray<double>& flaDetectorCellYSizes)
Detector 별 Y 방향 셀사이즈를 지정합니다.flaDetectorCellYSizes: Detector 별 Y 방향 셀사이즈 [unit]
const CResult SetDetectorNormalizers(const Base::CFLArray<double>& flaDetectorNormalizers)
Detector 별 수치 정규화용 값을 지정합니다. 곱한 이후 1 을 넘어서는 값은 1 로 클램핑 됩니다.flaDetectorNormalizers: Detector 별 수치 정규화용 값
const CResult SetSourceLocations(const Base::CFLArray<Base::TPoint3<float>>& flaSourceLocations)
페이지 별 Source Location 을 지정합니다.flaSourceLocations: 페이지 별 Source Location [unit]
const CResult SetObjectLocations(const Base::CFLArray<Base::TPoint3<float>>& flaObjectLocations)
페이지 별 Object Location 을 지정합니다.flaObjectLocations: 페이지 별 Object Location [unit]
const CResult SetDetectorLocations(const Base::CFLArray<Base::TPoint3<float>>& flaDetectorLocations)
페이지 별 Detector Location 을 지정합니다.flaDetectorLocations: 페이지 별 Detector Location [unit]
const CResult SetSourceEulerAngles(const Base::CFLArray<Base::TPoint3<float>>& flaSourceEulerAngles)
페이지 별 Source Euler Angle 을 지정합니다. AngleUnit 과 Euler Sequence 를 참고하여 해석됩니다. Source 는 점광원을 가정하므로 0 으로 설정해도 무관합니다.flaSourceEulerAngles: 페이지 별 Source Euler Angle [AngleUnit]
const CResult SetObjectEulerAngles(const Base::CFLArray<Base::TPoint3<float>>& flaObjectEulerAngles)
페이지 별 Object Euler Angle 을 지정합니다. AngleUnit 과 Euler Sequence 를 참고하여 해석됩니다.flaObjectEulerAngles: 페이지 별 Object Euler Angle [AngleUnit]
const CResult SetDetectorEulerAngles(const Base::CFLArray<Base::TPoint3<float>>& flaDetectorEulerAngles)
페이지 별 Detector Euler Angle 을 지정합니다. AngleUnit 과 Euler Sequence 를 참고하여 해석됩니다.flaDetectorEulerAngles: 페이지 별 Detector Euler Angle [AngleUnit]
const CResult SetSourceEulerSequences(const Base::CFLArray<int32_t>& flaSourceEulerSequences)
페이지 별 Source Euler Sequence 를 지정합니다.flaSourceEulerSequences: 페이지 별 Source Euler Sequence
const CResult SetObjectEulerSequences(const Base::CFLArray<int32_t>& flaObjectEulerSequences)
페이지 별 Object Euler Sequence 를 지정합니다.flaObjectEulerSequences: 페이지 별 Object Euler Sequence
const CResult SetDetectorEulerSequences(const Base::CFLArray<int32_t>& flaDetectorEulerSequences)
페이지 별 Detector Euler Sequence 를 지정합니다.flaDetectorEulerSequences: 페이지 별 Detector Euler Sequence
const CResult SetFilteringAngles(const Base::CFLArray<float>& flaFilteringAngles)
페이지 별 이미지의 주파수 필터링 각도를 지정합니다. AngleUnit 을 참고하여 해석됩니다.flaFilteringAngles: 페이지 별 이미지의 주파수 필터링 각도 [AngleUnit]
공통 파라미터 설정
const CResult SetAngleUnit(ImageProcessing::EAngleUnit eAngleUnit)
사용되는 각도들의 단위를 지정합니다.eAngleUnit: 사용되는 각도들의 단위
Default: EAngleUnit_Radian- EAngleUnit_Degree
- EAngleUnit_Radian
const CResult SetObjectVoxelSize(const Base::TPoint3<double> tp3ObjectVoxelSize)
Object voxel size 를 지정합니다. 출력 복셀 당 크기를 의미합니다.tp3ObjectVoxelSize: Object voxel size [unit]
Default: { 0.1, 0.1, 0.1 }
const CResult SetObjectVoxelCount(const Base::TPoint3<int32_t>& tpObjectVoxelCount)
Object voxel count 를 지정합니다. 출력 이미지의 크기 및 페이지 수와 일치합니다.tpObjectVoxelCount: Object voxel count
Default: { 1024, 200, 1024 }
const CResult SetObjectVoxelSubdivisionCount(const Base::TPoint3<int32_t>& tpObjectVoxelSubdivisionCount)
Object voxel subdivision count 를 지정합니다. 역투영 시 sub voxel 로 분할하여 연산합니다.tpObjectVoxelSubdivisionCount: Object voxel subdivision count
Default: { 1, 1, 1 }
const CResult SetObjectVoxelOffset(const Base::TPoint3<int32_t>& tpObjectVoxelOffset)
Object voxel offset 을 지정합니다. 복원하고 싶은 복셀의 위치를 복셀 단위로 이동하는데 사용됩니다.tpObjectVoxelOffset: Object voxel offset
Default: { 0, 0, 0 }
입력 데이터 처리 방식 설정
const CResult EnableFrequencyRampFilter(bool bEnableFrequencyRampFilter)
FDK 에서 저주파를 억제하기 위하여 주파수 필터링 시 Ramp Filter 의 적용 여부를 설정합니다. 일반적으로 적용하는 것이 권장됩니다.bEnableFrequencyRampFilter: 주파수 필터링 시 Ramp Filter 의 적용 여부
Default: true
const CResult SetFrequencyWindow(EFrequencyWindow eFrequencyWindow)
FDK 에서 고주파를 억제하기 위하여 주파수 필터링 시 추가적으로 적용할 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
Default: 0.5 (0.00, 0.50]
출력 데이터 처리 방식 설정
const CResult SetOutputFormat(EOutputFormat eOutputFormat)
Slicing plane 의 출력 형식을 지정합니다. F32 는 unlimited 타입이며 수치를 확인하고 적절한 Sigmoid 값을 지정할 때 유용합니다.
U8 과 U16 은 실행 시간 절감 및 데이터 저장 용량 감소와 시각화에 유리합니다.eOutputFormat: 출력 형식
Default: EOutputFormat_U8- EOutputFormat_U8: unsigned 8 bit 타입
- EOutputFormat_U16: unsigned 16 bit 타입
- EOutputFormat_F32: floating point 32 bit 타입, unlimited
const CResult SetSigmoidB(double f64SigmoidB)
Destination 3D object 와 U8/U16 destination image 에서 Object Voxel 에 적용할 generalized sigmoid 의 growth rate B 파라미터를 설정합니다.f64SigmoidB: generalized sigmoid 의 growth rate B
Default: 1000.00
const CResult SetSigmoidM(double f64SigmoidM)
Destination 3D object 와 U8/U16 destination image 에서 Object Voxel 에 적용할 generalized sigmoid 의 horizontal translation M 파라미터를 설정합니다.f64SigmoidM: generalized sigmoid 의 horizontal translation M
Default: 0.00
const CResult SetIntensityThreshold(int64_t i64IntensityThreshold)
Destination 3D object 에서 Object Voxel 에 generalized sigmoid 를 적용한 이후 intensity threshold 를 설정합니다.i64IntensityThreshold: intensity threshold
Default: 180, [0, 255]
const CResult SetSlicingPlane(ESlicingPlane eSlicingPlane)
Destination image 에 출력할 slicing plane 을 설정합니다.eSlicingPlane: slicing plane
Default: ESlicingPlane_Transverse- ESlicingPlane_Transverse: transverse 단면, 이미지의 +x, +y 축은 각각 object local coordinates 의 +x, -z 축과 대응됩니다. +page 축은 +y 축에 대응됩니다.
- ESlicingPlane_Coronal: coronal 단면, 이미지의 +x, +y 축은 각각 object local coordinates 의 +x, +y 축과 대응됩니다. +page 축은 +z 축에 대응됩니다.
- ESlicingPlane_Sagittal: sagittal 단면, 이미지의 +x, +y 축은 각각 object local coordinates 의 -z, +y 축과 대응됩니다. +page 축은 +x 축에 대응됩니다.
4 예제 코드
CStationaryConeBeamGeneralizedCT stationaryConeBeamGeneralizedCT;
CFLImage fliSrcImage;
CFLImage fliDstImage;
CFL3DObject floDstObject;
stationaryConeBeamGeneralizedCT.LoadCSV(L"../../ExampleImages/StationaryConeBeamGeneralizedCT/geometry.csv");
stationaryConeBeamGeneralizedCT.SetSourceImage(&fliSrcImage);
stationaryConeBeamGeneralizedCT.SetDestinationImage(&fliDstImage);
stationaryConeBeamGeneralizedCT.SetDestinationObject(&floDstObject);
stationaryConeBeamGeneralizedCT.SetAngleUnit(ImageProcessing::EAngleUnit_Degree);
Base::TPoint3<double> tpObjectVoxelSize;
tpObjectVoxelSize.x = 0.02;
tpObjectVoxelSize.y = 0.02;
tpObjectVoxelSize.z = 0.02;
stationaryConeBeamGeneralizedCT.SetObjectVoxelSize(tpObjectVoxelSize);
Base::TPoint3<int32_t> tpObjectVoxelCount;
tpObjectVoxelCount.x = 150;
tpObjectVoxelCount.y = 150;
tpObjectVoxelCount.z = 150;
stationaryConeBeamGeneralizedCT.SetObjectVoxelCount(tpObjectVoxelCount);
Base::TPoint3<int32_t> tpObjectVoxelSubdivisionCount;
tpObjectVoxelSubdivisionCount.x = 1;
tpObjectVoxelSubdivisionCount.y = 1;
tpObjectVoxelSubdivisionCount.z = 1;
stationaryConeBeamGeneralizedCT.SetObjectVoxelSubdivisionCount(tpObjectVoxelSubdivisionCount);
Base::TPoint3<int32_t> tpObjectVoxelOffset;
tpObjectVoxelOffset.x = 0;
tpObjectVoxelOffset.y = 0;
tpObjectVoxelOffset.z = 0;
stationaryConeBeamGeneralizedCT.SetObjectVoxelOffset(tpObjectVoxelOffset);
stationaryConeBeamGeneralizedCT.EnableFrequencyRampFilter(true);
stationaryConeBeamGeneralizedCT.SetFrequencyWindow(CStationaryConeBeamGeneralizedCT::EFrequencyWindow_Gaussian);
stationaryConeBeamGeneralizedCT.SetSigma(0.50);
stationaryConeBeamGeneralizedCT.SetOutputFormat(CStationaryConeBeamGeneralizedCT::EOutputFormat_U8);
stationaryConeBeamGeneralizedCT.SetSigmoidB(1000.00);
stationaryConeBeamGeneralizedCT.SetSigmoidM(0.00);
stationaryConeBeamGeneralizedCT.SetIntensityThreshold(200);
stationaryConeBeamGeneralizedCT.SetSlicingPlane(CStationaryConeBeamGeneralizedCT::ESlicingPlane_Coronal);
stationaryConeBeamGeneralizedCT.Execute();
5 기타 사항
Supported Feature
- Image
- Source Image
- Destination Image
- 3D Object
- Destination 3D Object
Supported Format
- Source
[in]- Page
- 1
- Channel
- 1
- Value Type & Depth
- Unsigned: 8, 9-16, 32
- Floating: 32, 64
- Page
- Destination
[out]- Page
- Object Voxel Count 및 Slicing Plane 에 의하여 결정
- Channel
- 1
- Value Type & Depth
- Output Format 파라미터 설정에 따라 U8, U16, F32 지원
- Page
6 관련 알고리즘
Stationary Cone Beam Rotation CT
Stationary Cone Beam Translation CT


