Stationary Cone Beam Generalized CT

1 개요

고정된 콘빔 CT 시스템에서 프로젝션마다 임의의 물체 움직임을 허용하는 단면 재구성 알고리즘

2 알고리즘 상세 설명

Source Images Destination Image
Source Image 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
Destination 3D Object
Fig. Destination 3D Object

3 파라미터 설정 및 사용 방법

Scan Geometry 설정 (Load CSV)

Scan Geometry 설정 (API)

공통 파라미터 설정

입력 데이터 처리 방식 설정

출력 데이터 처리 방식 설정

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();
CStationaryConeBeamGeneralizedCT stationaryConeBeamGeneralizedCT = new CStationaryConeBeamGeneralizedCT();

CFLImage fliSrcImage = new CFLImage();
CFLImage fliDstImage = new CFLImage();
CFL3DObject floDestination = new CFL3DObject();

stationaryConeBeamGeneralizedCT.LoadCSV("../../ExampleImages/StationaryConeBeamGeneralizedCT/geometry.csv");
stationaryConeBeamGeneralizedCT.SetSourceImage(ref fliSrcImage);
stationaryConeBeamGeneralizedCT.SetDestinationImage(ref fliDstImage);
stationaryConeBeamGeneralizedCT.SetDestinationObject(ref floDestination);
stationaryConeBeamGeneralizedCT.SetAngleUnit(EAngleUnit.Degree);
TPoint3<double> tpObjectVoxelSize = new TPoint3<double>();
tpObjectVoxelSize.x = 0.02;
tpObjectVoxelSize.y = 0.02;
tpObjectVoxelSize.z = 0.02;
stationaryConeBeamGeneralizedCT.SetObjectVoxelSize(tpObjectVoxelSize);
TPoint3<Int32> tpObjectVoxelCount = new TPoint3<Int32>();
tpObjectVoxelCount.x = 150;
tpObjectVoxelCount.y = 150;
tpObjectVoxelCount.z = 150;
stationaryConeBeamGeneralizedCT.SetObjectVoxelCount(tpObjectVoxelCount);
TPoint3<Int32> tpObjectVoxelSubdivisionCount = new TPoint3<Int32>();
tpObjectVoxelSubdivisionCount.x = 1;
tpObjectVoxelSubdivisionCount.y = 1;
tpObjectVoxelSubdivisionCount.z = 1;
stationaryConeBeamGeneralizedCT.SetObjectVoxelSubdivisionCount(tpObjectVoxelSubdivisionCount);
TPoint3<Int32> tpObjectVoxelOffset = new TPoint3<Int32>();
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();
stationaryConeBeamGeneralizedCT = CStationaryConeBeamGeneralizedCT()

fliSrcImage = CFLImage()
fliDstImage = CFLImage()
floDestination = CFL3DObject()

stationaryConeBeamGeneralizedCT.LoadCSV("../../ExampleImages/StationaryConeBeamGeneralizedCT/geometry.csv")
stationaryConeBeamGeneralizedCT.SetSourceImage(fliSrcImage)[0]).IsFail()
stationaryConeBeamGeneralizedCT.SetDestinationImage(fliDstImage)[0]).IsFail()
stationaryConeBeamGeneralizedCT.SetDestinationObject(floDestination)[0]).IsFail()

stationaryConeBeamGeneralizedCT.SetAngleUnit(EAngleUnit.Degree)
tpObjectVoxelSize = TPoint3[Double]()
tpObjectVoxelSize.x = 0.02
tpObjectVoxelSize.y = 0.02
tpObjectVoxelSize.z = 0.02
stationaryConeBeamGeneralizedCT.SetObjectVoxelSize(tpObjectVoxelSize)
tpObjectVoxelCount = TPoint3[Int32]()
tpObjectVoxelCount.x = 150
tpObjectVoxelCount.y = 150
tpObjectVoxelCount.z = 150
stationaryConeBeamGeneralizedCT.SetObjectVoxelCount(tpObjectVoxelCount)
tpObjectVoxelSubdivisionCount = TPoint3[Int32]()
tpObjectVoxelSubdivisionCount.x = 1
tpObjectVoxelSubdivisionCount.y = 1
tpObjectVoxelSubdivisionCount.z = 1
stationaryConeBeamGeneralizedCT.SetObjectVoxelSubdivisionCount(tpObjectVoxelSubdivisionCount)
tpObjectVoxelOffset = TPoint3[Int32]()
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

Supported Format

6 관련 알고리즘

Stationary Cone Beam Rotation CT Stationary Cone Beam Translation CT