[Rtk-users] error on build rtk in visual studio 2012 when rtk use cuda
safdary mohsen
ieee.safdary at gmail.com
Thu Jun 25 01:27:50 EDT 2015
Hi
what is genuine rtkfdk.exe ?
source code is attached to mail and command line is:
rtkfdk --geometry geometry.xml --regexp .*.hnd --path Scan0 --output
slice30.mha --verbose --spacing 0.25,0.25,0.25 --dimension 1024,1,1024
--origin -127.875,30,-127.875 --hardware cuda
On Wed, Jun 24, 2015 at 5:51 PM, Yang-Kyun Park <theday79 at gmail.com> wrote:
> Hi Safdary,
>
> So you might have tried the genuine rtkfdk.exe for your recon. Would you
> give me your command line you used?
>
> Yang
> On Jun 24, 2015 3:48 AM, "safdary mohsen" <ieee.safdary at gmail.com> wrote:
>
>> Hi
>>
>> I cheched projectionreader and i abtained that all projection are readed.
>> ( by using:
>>
>> typedef itk::ImageFileWriter<OutputImageType> WriterType;
>>
>> WriterType::Pointer writer = WriterType::New();
>>
>> writer->SetFileName( "reader.mha" );
>>
>> writer->SetInput( reader->GetOutput() );
>>
>> writer->Update();
>> )
>>
>> and
>>
>> geometry is work for cpu mode means outputs are ok .
>>
>>
>> I am confused for solving this problem!!!!!!!!!!!!!!!!!
>>
>> On Tue, Jun 16, 2015 at 11:09 AM, Cyril Mory <
>> cyril.mory at creatis.insa-lyon.fr> wrote:
>>
>>> Hi Safdary,
>>>
>>> Just to be sure: have you tried reconstructing in a larger volume
>>> (something really huge), just to make sure you are not trying to
>>> reconstruct some portion of space where, indeed, there is nothing ?
>>> You can try that easily, just replace your spacing, dimension and origin
>>> with
>>> --spacing 16,16,16 --dimension 256,256,256 --origin -2040,-2040,-2040
>>> in your rtkfdk command line.
>>>
>>> Cyril
>>>
>>>
>>> On 06/15/2015 05:19 PM, safdary mohsen wrote:
>>>
>>> Hi Yang
>>>
>>>
>>> I am use rtkfdk.exe but the results are same as my code,
>>>
>>> means all pixels are zero!!!
>>>
>>>
>>> regards
>>>
>>>
>>>
>>> safdari
>>>
>>> On Mon, Jun 15, 2015 at 7:10 PM, Yang K Park <theday79 at gmail.com> wrote:
>>>
>>>> Hi Safdary,
>>>>
>>>>
>>>>
>>>> Again, please cc rtk-users at openrtk.org when you send your email, since
>>>> other users (much better experts than me!) can give us any suggestions.
>>>>
>>>>
>>>>
>>>> Thanks.
>>>>
>>>>
>>>>
>>>> Yang
>>>>
>>>>
>>>>
>>>> *From:* Yang K Park [mailto:theday79 at gmail.com]
>>>> *Sent:* Monday, June 15, 2015 10:37 AM
>>>> *To:* 'safdary mohsen'
>>>> *Cc:* rtk-users at openrtk.org
>>>> *Subject:* RE: [Rtk-users] error on build rtk in visual studio 2012
>>>> when rtk use cuda
>>>>
>>>>
>>>>
>>>> Hi Safdary,
>>>>
>>>>
>>>>
>>>> I recommend you to try rtkfdk.exe first (with cuda option) to see if it
>>>> works for you.
>>>>
>>>>
>>>>
>>>> The example of the command line would be:
>>>>
>>>>
>>>>
>>>> rtkfdk --geometry geom.xml --path proj_dir --regexp .*.his --output
>>>> test_output.mha --verbos --spacing 1,1,1 --dimension 512,10,512 --origin
>>>> -127.875,29.5,-127.875 --hardware cuda
>>>>
>>>>
>>>>
>>>> If it works for your image, then you can mimic the original rtkfdk code
>>>> to make your own one.
>>>>
>>>>
>>>>
>>>> Good luck!
>>>>
>>>>
>>>>
>>>> Yang
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> *From:* safdary mohsen [mailto:ieee.safdary at gmail.com
>>>> <ieee.safdary at gmail.com>]
>>>> *Sent:* Saturday, June 13, 2015 11:58 PM
>>>> *To:* Yang K Park
>>>> *Subject:* Re: [Rtk-users] error on build rtk in visual studio 2012
>>>> when rtk use cuda
>>>>
>>>>
>>>>
>>>> Hi Yang
>>>>
>>>>
>>>>
>>>> I have tried to adjust the window/level to see something inside of the
>>>> image but all pixels set to zero.
>>>>
>>>> *My code is:*
>>>>
>>>> #define USE_CUDA
>>>>
>>>> int main(int , char **)
>>>>
>>>> {
>>>>
>>>> //// variable
>>>>
>>>> const unsigned int Dimension = 3;
>>>>
>>>> typedef float OutputPixelType;
>>>>
>>>> #ifdef USE_CUDA
>>>>
>>>> typedef itk::CudaImage< OutputPixelType, Dimension > OutputImageType;
>>>>
>>>> #else
>>>>
>>>> typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
>>>>
>>>> #endif
>>>>
>>>>
>>>> ////////////////////////////////////////////////////////////////////////////////////////////////////
>>>>
>>>> // Generate file names of projections
>>>>
>>>> itk::RegularExpressionSeriesFileNames::Pointer names = itk::
>>>> RegularExpressionSeriesFileNames::New();
>>>>
>>>> names->SetDirectory(std::string("d://RTK/build/bin/Release/Scan1/"));
>>>>
>>>> names->SetRegularExpression(std::string("Proj_.*.hnd"));
>>>>
>>>>
>>>> ////////////////////////////////////////////////////////////////////////////////////////////////////
>>>>
>>>> //// geometry
>>>>
>>>> // Defines the RTK geometry object
>>>>
>>>> typedef rtk::ThreeDCircularProjectionGeometry GeometryType;
>>>>
>>>> GeometryType::Pointer geometry = GeometryType::New();
>>>>
>>>> // Projection matrices
>>>>
>>>> unsigned int numberOfProjections = 86;
>>>>
>>>> unsigned int firstAngle = 0;
>>>>
>>>> unsigned int angularArc = 360;
>>>>
>>>> unsigned int sid = 1000;
>>>>
>>>> unsigned int sdd = 1200;
>>>>
>>>> int isox = 0;
>>>>
>>>> int isoy = 0 ;
>>>>
>>>> for(unsigned int noProj=0; noProj<numberOfProjections; noProj++)
>>>>
>>>> {
>>>>
>>>> double angle = (float)firstAngle + (float)noProj * angularArc / (float
>>>> )numberOfProjections;
>>>>
>>>> geometry->AddProjection(sid,
>>>>
>>>> sdd,
>>>>
>>>> angle,
>>>>
>>>> isox,
>>>>
>>>> isoy);
>>>>
>>>> }
>>>>
>>>>
>>>> /////////////////////////////////////////////////////////////////////////////////////////////////////
>>>>
>>>>
>>>> ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
>>>>
>>>> // Projections reader
>>>>
>>>> typedef rtk::ProjectionsReader< OutputImageType > ReaderType;
>>>>
>>>> ReaderType::Pointer reader = ReaderType::New();
>>>>
>>>> reader->SetFileNames(names->GetFileNames());
>>>>
>>>> ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
>>>>
>>>>
>>>> // Create reconstructed image ////////////////////////////////////
>>>>
>>>> typedef rtk::ConstantImageSource< OutputImageType >
>>>> ConstantImageSourceType;
>>>>
>>>> ConstantImageSourceType::Pointer ImageSource = ConstantImageSourceType
>>>> ::New();
>>>>
>>>> ConstantImageSourceType::PointType origin;
>>>>
>>>> ConstantImageSourceType::SizeType sizeOutput;
>>>>
>>>> ConstantImageSourceType::SpacingType spacing;
>>>>
>>>> origin[0] = -127.75;
>>>>
>>>> origin[1] = -127.75;
>>>>
>>>> origin[2] = -127.75;
>>>>
>>>>
>>>>
>>>> sizeOutput[0] = 512;
>>>>
>>>> sizeOutput[1] = 512;
>>>>
>>>> sizeOutput[2] = 512;
>>>>
>>>> spacing[0] = .5;
>>>>
>>>> spacing[1] = .5;
>>>>
>>>> spacing[2] = .5;
>>>>
>>>> ImageSource->SetOrigin( origin );
>>>>
>>>> ImageSource->SetSpacing( spacing );
>>>>
>>>> ImageSource->SetSize( sizeOutput );
>>>>
>>>> ImageSource->SetConstant( 0. );
>>>>
>>>> // getchar(); //////////////////////////////////////
>>>>
>>>> /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
>>>>
>>>>
>>>> std::cout << "Performing reconstruction" << std::endl;
>>>>
>>>> // FDK reconstruction filtering
>>>>
>>>> // FDK reconstruction filtering
>>>>
>>>> #ifdef USE_CUDA
>>>>
>>>> typedef rtk::CudaFDKConeBeamReconstructionFilter FDKType;
>>>>
>>>> #elif USE_OPENCL
>>>>
>>>> typedef rtk::OpenCLFDKConeBeamReconstructionFilter FDKType;
>>>>
>>>> #else
>>>>
>>>> typedef rtk::FDKConeBeamReconstructionFilter< OutputImageType >
>>>> FDKType;
>>>>
>>>> #endif
>>>>
>>>> FDKType::Pointer feldkamp = FDKType::New();
>>>>
>>>> feldkamp->SetInput( 0, ImageSource->GetOutput() );
>>>>
>>>> feldkamp->SetInput( 1, reader->GetOutput());
>>>>
>>>> feldkamp->SetGeometry( geometry);
>>>>
>>>> TRY_AND_EXIT_ON_ITK_EXCEPTION( feldkamp->Update() );
>>>>
>>>> std::cout << "Writing output image" << std::endl;
>>>>
>>>> // Writer
>>>>
>>>> typedef itk::Image< float, 3 > ImageType;
>>>>
>>>> typedef itk::ImageFileWriter<ImageType> WriterType;
>>>>
>>>> WriterType::Pointer writer = WriterType::New();
>>>>
>>>> writer->SetFileName( "output11.mha" );
>>>>
>>>> writer->SetInput( feldkamp->GetOutput() );
>>>>
>>>> writer->Update();
>>>>
>>>>
>>>>
>>>> getchar();
>>>>
>>>> return 0;
>>>>
>>>> }
>>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Rtk-users mailing listRtk-users at public.kitware.comhttp://public.kitware.com/mailman/listinfo/rtk-users
>>>
>>>
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/rtk-users/attachments/20150625/1a5f9dbb/attachment-0010.html>
-------------- next part --------------
#include "rtkConfiguration.h"
#include <rtkFDKBackProjectionImageFilter.h>
#include <rtkConstantImageSource.h>
#include <rtkThreeDCircularProjectionGeometry.h>
#include <rtkRayEllipsoidIntersectionImageFilter.h>
#include <rtkDisplacedDetectorImageFilter.h>
#include <rtkParkerShortScanImageFilter.h>
#include <rtkFDKConeBeamReconstructionFilter.h>
#include "rtkProjectionsReader.h"
#include "rtkMacro.h"
#include "rtkVarianObiGeometryReader.h"
#include "rtkThreeDCircularProjectionGeometryXMLFile.h"
#include <itkRegularExpressionSeriesFileNames.h>
#include "rtkImagXImageIOFactory.h"
//GPU CUDA
#include <rtkCudaFDKConeBeamReconstructionFilter.h>
// ITK includes
#include <itkImageFileWriter.h>
#include <itkStreamingImageFilter.h>
#include <itkRegularExpressionSeriesFileNames.h>
#define USE_CUDA
//using namespace std;
int main(int , char **)
{
//// variable
const unsigned int Dimension = 3;
typedef float OutputPixelType;
#ifdef USE_CUDA
typedef itk::CudaImage< OutputPixelType, Dimension > OutputImageType;
#else
typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
#endif
itk::RegularExpressionSeriesFileNames::Pointer names = itk::RegularExpressionSeriesFileNames::New();
names->SetDirectory(std::string("d://RTK/build/bin/Release/Scan1/"));
names->SetRegularExpression(std::string("Proj_.*.hnd"));
typedef rtk::ThreeDCircularProjectionGeometry GeometryType;
GeometryType::Pointer geometry = GeometryType::New();
// Projection matrices
unsigned int numberOfProjections = 86;
unsigned int firstAngle = 0;
unsigned int angularArc = 360;
unsigned int sid = 1000; // source to isocenter distance in mm //pgm 452//560 //fibr 1000 1100
unsigned int sdd = 1200; // source to detector distance in mm
int isox = 0; // X coordinate on the projection image of isocenter// for tiff bam -48.9505 //dcm head -80 //bmp fibr -1 -20//pgm plastich -47 -20
//mohtasham tif -97.5 -80
int isoy = 0 ;// Y coordinate on the projection image of isocenter// for tiff bam -47.952 // dcm head 30
for(unsigned int noProj=0; noProj<numberOfProjections; noProj++)
{
double angle = (float)firstAngle + (float)noProj * angularArc / (float)numberOfProjections;
geometry->AddProjection(sid,
sdd,
angle,
isox,
isoy);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Projections reader
typedef rtk::ProjectionsReader< OutputImageType > ReaderType;
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileNames(names->GetFileNames());
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Create reconstructed image ////////////////////////////////////
typedef rtk::ConstantImageSource< OutputImageType > ConstantImageSourceType;
ConstantImageSourceType::Pointer ImageSource = ConstantImageSourceType::New();
ConstantImageSourceType::PointType origin;
ConstantImageSourceType::SizeType sizeOutput;
ConstantImageSourceType::SpacingType spacing;
origin[0] = -127.75;
origin[1] = -127.75;
origin[2] = -127.75;
// Adjust size according to geometry
sizeOutput[0] = 512;
sizeOutput[1] = 512;
sizeOutput[2] = 512;
spacing[0] = .5;
spacing[1] = .5;
spacing[2] = .5;
ImageSource->SetOrigin( origin );
ImageSource->SetSpacing( spacing );
ImageSource->SetSize( sizeOutput );
ImageSource->SetConstant( 0. );
// getchar(); //////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
std::cout << "Performing reconstruction" << std::endl;
// FDK reconstruction filtering
// FDK reconstruction filtering
#ifdef USE_CUDA
typedef rtk::CudaFDKConeBeamReconstructionFilter FDKType;
#elif USE_OPENCL
typedef rtk::OpenCLFDKConeBeamReconstructionFilter FDKType;
#else
typedef rtk::FDKConeBeamReconstructionFilter< OutputImageType > FDKType;
#endif
FDKType::Pointer feldkamp = FDKType::New();
feldkamp->SetInput( 0, ImageSource->GetOutput() );
feldkamp->SetInput( 1, reader->GetOutput());
feldkamp->SetGeometry( geometry);
//feldkamp->GetRampFilter()->SetTruncationCorrection(1.);
//feldkamp->GetRampFilter()->SetHannCutFrequency(0.5);
// getchar();
//feldkamp->Update();
TRY_AND_EXIT_ON_ITK_EXCEPTION( feldkamp->Update() );
std::cout << "Writing output image" << std::endl;
// Writer
typedef itk::Image< float, 3 > ImageType;
typedef itk::ImageFileWriter<ImageType> WriterType;
WriterType::Pointer writer = WriterType::New();
writer->SetFileName( "output11.mha" );//mha
//writer->SetUseCompression(true);
writer->SetInput( feldkamp->GetOutput() );
writer->Update();
getchar();
return 0;
}
More information about the Rtk-users
mailing list