[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-0002.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