[Rtk-users] Error Result by using FDK algorithm to Reconstruction 2D X- ray Scan projection images into 2D CT Slice image
何明哲
m10512067 at yuntech.org.tw
Thu Jan 12 08:40:48 CET 2023
HI Everyone ,
I have a question
that When I was refer to the official example "Firstcudareconstruction.cpp",
then I tried to modify the code and reconstruction 2D x ray projection
image to 2D ct slice,
the code is worked but I got the wrong result too,
I don't understand what the problem I'm have ?
it's possible that the setting of reconstruction output image size or
origin is wrong?
here is my code and result (I was tried to only reconstruction just a slice
NO.100 of the whole volume)
--------------------------------------------------------------------------------------------
using GeometryType = rtk::ThreeDCircularProjectionGeometry;
GeometryType::Pointer geometry = GeometryType::New();
unsigned int numberOfProjections = 280;
double firstAngle = 0;
double angularArc = 280;
unsigned int sid = 510;
unsigned int sdd = 690;
for (unsigned int noProj = 0; noProj < numberOfProjections; noProj++)
{
double angle = firstAngle + noProj * angularArc / numberOfProjections;
geometry->AddProjection(sid, sdd, angle);
}
rtk::ThreeDCircularProjectionGeometryXMLFileWriter::Pointer xmlWriter;
xmlWriter = rtk::ThreeDCircularProjectionGeometryXMLFileWriter::New();
xmlWriter->SetFilename(".\\RTK_Geometry.xml");
xmlWriter->SetObject(geometry);
xmlWriter->WriteFile();
using NameGeneratorType = itk::NumericSeriesFileNames;
NameGeneratorType::Pointer nameGenerator = NameGeneratorType::New();
nameGenerator->SetSeriesFormat(ProjectionInage +"\\%d.tif");
nameGenerator->SetStartIndex(1);
nameGenerator->SetEndIndex(280);
nameGenerator->SetIncrementIndex(1);
using IutputImageType = itk::CudaImage<float, 3>;
using ReaderType = rtk::ProjectionsReader<IutputImageType>;
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileNames(nameGenerator->GetFileNames());
reader->Update();
using ConstantImageSourceType = rtk::ConstantImageSource<OutputImageType>;
ConstantImageSourceType::PointType origin;
ConstantImageSourceType::SpacingType spacing;
ConstantImageSourceType::SizeType sizeOutput;
ConstantImageSourceType::Pointer recoVolume =
ConstantImageSourceType::New();
sizeOutput[0] = Imagewidth;
sizeOutput[1] = Imageheigh;
sizeOutput[2] = numofproj;
spacing[0] = 0.25;
spacing[1] = 0.25;
spacing[2] = 0.25;
origin[0] = Imagewidth*spacing[0]*0.5*-1;
origin[1] = Imageheigh*spacing[0]*0.5*-1;
origin[2] = spacing[2]*SliceN*-1;
recoVolume->SetSize(sizeOutput);
recoVolume->SetSpacing(spacing);
recoVolume->SetOrigin(origin);
recoVolume->SetConstant(0);
using FDKGPUType = rtk::CudaFDKConeBeamReconstructionFilter;
FDKGPUType::Pointer feldkamp = FDKGPUType::New();
feldkamp->SetInput(0, recoVolume->GetOutput());
feldkamp->SetInput(1, reader->GetOutput());
feldkamp->SetGeometry(geometry);
feldkamp->SetNumberOfThreads(7);
feldkamp->Update();
using WriterType = itk::ImageFileWriter<OutputImageType>;
WriterType::Pointer writer = WriterType::New();
writer->SetFileName("C:\\RTK.mhd");
writer->SetInput(feldkamp->GetOutput());
writer->Update();
[image: 20230112_100.PNG]
it should be look like this
[image: 20230109.PNG]
thanks for your reply
BR,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.creatis.insa-lyon.fr/pipermail/rtk-users/attachments/20230112/37202182/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 20230112_100.PNG
Type: image/png
Size: 104500 bytes
Desc: not available
URL: <http://www.creatis.insa-lyon.fr/pipermail/rtk-users/attachments/20230112/37202182/attachment-0002.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 20230109.PNG
Type: image/png
Size: 221917 bytes
Desc: not available
URL: <http://www.creatis.insa-lyon.fr/pipermail/rtk-users/attachments/20230112/37202182/attachment-0003.png>
More information about the Rtk-users
mailing list