<DIV>
<DIV>Hi:</DIV>
<DIV>&nbsp;I am a beginner.Now I do a CT series Image processing(DICOM).</DIV>
<DIV>Source codes as follow:</DIV>
<DIV>*************************************************************</DIV>
<DIV>#if defined(_MSC_VER)<BR>#pragma warning ( disable : 4786 )<BR>#endif</DIV>
<DIV>#ifdef __BORLANDC__<BR>#define ITK_LEAN_AND_MEAN<BR>#endif</DIV>
<DIV>// ITK include<BR>#include "itkBinaryThresholdImageFilter.h"<BR>#include "itkCannySegmentationLevelSetImageFilter.h"<BR>#include "itkCastImageFilter.h"<BR>#include "itkConfidenceConnectedImageFilter.h"<BR>#include "itkCurvatureAnisotropicDiffusionImageFilter.h"<BR>#include "itkFastMarchingImageFilter.h"<BR>#include "itkGDCMImageIO.h"<BR>#include "itkGDCMSeriesFileNames.h"<BR>#include "itkGradientMagnitudeRecursiveGaussianImageFilter.h"<BR>#include "itkImageFileWriter.h"<BR>#include "itkImageSeriesReader.h"<BR>#include "itkImageToVTKImageFilter.h"<BR>#include "itkImportImageFilter.h"<BR>#include "itkIntensityWindowingImageFilter.h"<BR>#include "itkOrientedImage.h"<BR>#include "itkRescaleIntensityImageFilter.h"<BR>#include "itkSigmoidImageFilter.h"</DIV>
<DIV>// VTK include<BR>#include "vtkActor.h"<BR>#include "vtkBoxWidget.h"<BR>#include "vtkCamera.h"<BR>#include "vtkCommand.h"<BR>#include "vtkColorTransferFunction.h"<BR>#include "vtkContourFilter.h"<BR>#include "vtkDataSetMapper.h"<BR>#include "vtkDICOMImageReader.h"<BR>#include "vtkGeometryFilter.h"<BR>#include "vtkGPUVolumeRayCastMapper.h"<BR>#include "vtkImageData.h"<BR>#include "vtkImageResample.h"<BR>#include "vtkImageViewer.h"<BR>#include "vtkMetaImageReader.h"<BR>#include "vtkPiecewiseFunction.h"<BR>#include "vtkPlanes.h"<BR>#include "vtkPolyData.h"<BR>#include "vtkPolyDataMapper.h"<BR>#include "vtkProperty.h"<BR>#include "vtkRenderer.h"<BR>#include "vtkRenderWindow.h"<BR>#include "vtkRenderWindowInteractor.h"<BR>#include "vtkVolume.h"<BR>#include "vtkVolumeProperty.h"<BR>#include "vtkXMLImageDataReader.h"</DIV>
<DIV>//#include "vvITKFilterModuleBase.h"<BR>//#include "vtkVVPluginAPI.h"<BR>//#include "vvITKCannySegmentationLevelSetModule.cxx"</DIV>
<DIV>#define VTI_FILETYPE 1<BR>#define MHA_FILETYPE 2</DIV>
<DIV>class vtkBoxWidgetCallback : public vtkCommand<BR>{<BR>public:<BR>&nbsp;static vtkBoxWidgetCallback *New()<BR>&nbsp;&nbsp;&nbsp; { <BR>&nbsp;&nbsp;return new vtkBoxWidgetCallback; <BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;virtual void Execute(vtkObject *caller, unsigned long, void*)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;vtkBoxWidget *widget = reinterpret_cast&lt;vtkBoxWidget*&gt;(caller);<BR>&nbsp;&nbsp;if (this-&gt;Mapper)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;vtkPlanes *planes = vtkPlanes::New();<BR>&nbsp;&nbsp;&nbsp;widget-&gt;GetPlanes(planes);<BR>&nbsp;&nbsp;&nbsp;this-&gt;Mapper-&gt;SetClippingPlanes(planes);<BR>&nbsp;&nbsp;&nbsp;planes-&gt;Delete();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;<BR>&nbsp;void SetMapper(vtkGPUVolumeRayCastMapper* m) <BR>&nbsp;&nbsp;&nbsp; { <BR>&nbsp;&nbsp;this-&gt;Mapper = m; <BR>&nbsp;}</DIV>
<DIV>protected:<BR>&nbsp;vtkBoxWidgetCallback() <BR>&nbsp;&nbsp;&nbsp; { <BR>&nbsp;&nbsp;this-&gt;Mapper = 0; <BR>&nbsp;}</DIV>
<DIV>&nbsp;vtkGPUVolumeRayCastMapper *Mapper;<BR>};</DIV>
<DIV>int main(int argc, char *argv[])<BR>{<BR>&nbsp;// reader and connector<BR>&nbsp;typedef signed short&nbsp;&nbsp;&nbsp; PixelType;<BR>&nbsp;const unsigned int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dimension = 3;<BR>&nbsp;typedef itk::OrientedImage&lt; PixelType, Dimension &gt;&nbsp;&nbsp;&nbsp; ImageType;<BR>&nbsp;typedef itk::ImageSeriesReader&lt; ImageType &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReaderType;<BR>&nbsp;typedef itk::ImageToVTKImageFilter&lt; ImageType &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ConnectType;<BR>&nbsp;<BR>&nbsp;ReaderType::Pointer reader = ReaderType::New();<BR>&nbsp;&nbsp;&nbsp; ConnectType::Pointer connector = ConnectType::New();</DIV>
<DIV>&nbsp;// set reader to DICOM <BR>&nbsp;typedef itk::GDCMImageIO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageIOType;<BR>&nbsp;ImageIOType::Pointer dicomIO = ImageIOType::New();<BR>&nbsp;reader-&gt;SetImageIO( dicomIO );</DIV>
<DIV>&nbsp;typedef itk::GDCMSeriesFileNames NamesGeneratorType;<BR>&nbsp;NamesGeneratorType::Pointer nameGenerator = NamesGeneratorType::New();</DIV>
<DIV>&nbsp;nameGenerator-&gt;SetUseSeriesDetails( true );<BR>&nbsp;nameGenerator-&gt;AddSeriesRestriction( "0008|0021" );</DIV>
<DIV>&nbsp;nameGenerator-&gt;SetDirectory( "dicom4" );<BR>&nbsp;&nbsp;<BR>/*&nbsp; <BR>&nbsp;&nbsp;&nbsp; //typedef unsigned char MaskPixelType;<BR>&nbsp;typedef signed short MaskPixelType;<BR>&nbsp;&nbsp;&nbsp; typedef itk::OrientedImage&lt; MaskPixelType, Dimension &gt; MaskImageType;<BR>&nbsp;typedef itk::ConfidenceConnectedImageFilter&lt; ImageType, MaskImageType &gt; SegmentationFilterType;<BR>&nbsp;SegmentationFilterType::Pointer filter = SegmentationFilterType::New(); <BR>*/&nbsp;<BR>&nbsp;try<BR>&nbsp;{<BR>&nbsp;&nbsp;std::cout &lt;&lt; std::endl &lt;&lt; "The directory: " &lt;&lt; std::endl;<BR>&nbsp;&nbsp;std::cout &lt;&lt; std::endl &lt;&lt; "dicom4" &lt;&lt; std::endl &lt;&lt; std::endl;<BR>&nbsp;&nbsp;std::cout &lt;&lt; "Contains the following DICOM Series: ";<BR>&nbsp;&nbsp;std::cout &lt;&lt; std::endl &lt;&lt; std::endl;</DIV>
<DIV>&nbsp;&nbsp;typedef std::vector&lt; std::string &gt;&nbsp;&nbsp;&nbsp; SeriesIdContainer;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;const SeriesIdContainer &amp; seriesUID = nameGenerator-&gt;GetSeriesUIDs();&nbsp;&nbsp; <BR>&nbsp;&nbsp;SeriesIdContainer::const_iterator seriesItr = seriesUID.begin();<BR>&nbsp;&nbsp;SeriesIdContainer::const_iterator seriesEnd = seriesUID.end();<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;while( seriesItr != seriesEnd )<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;std::cout &lt;&lt; seriesItr-&gt;c_str() &lt;&lt; std::endl;<BR>&nbsp;&nbsp;&nbsp;seriesItr++;<BR>&nbsp;&nbsp;}</DIV>
<DIV>&nbsp;&nbsp;std::string seriesIdentifier;<BR>&nbsp;&nbsp;seriesIdentifier = seriesUID.begin()-&gt;c_str();</DIV>
<DIV>&nbsp;&nbsp;std::cout &lt;&lt; std::endl &lt;&lt; std::endl;<BR>&nbsp;&nbsp;std::cout &lt;&lt; "Now reading series: " &lt;&lt; std::endl &lt;&lt; std::endl;<BR>&nbsp;&nbsp;std::cout &lt;&lt; seriesIdentifier &lt;&lt; std::endl;<BR>&nbsp;&nbsp;std::cout &lt;&lt; std::endl &lt;&lt; std::endl;</DIV>
<DIV>&nbsp;&nbsp;typedef std::vector&lt; std::string &gt;&nbsp;&nbsp; FileNamesContainer;<BR>&nbsp;&nbsp;FileNamesContainer fileNames;<BR>&nbsp;&nbsp;fileNames = nameGenerator-&gt;GetFileNames( seriesIdentifier );&nbsp;<BR>&nbsp;&nbsp;reader-&gt;SetFileNames( fileNames );</DIV>
<DIV>&nbsp;&nbsp;try<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;reader-&gt;Update();<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;catch (itk::ExceptionObject &amp;ex)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;std::cout &lt;&lt; ex &lt;&lt; std::endl;<BR>&nbsp;&nbsp;&nbsp;return EXIT_FAILURE;<BR>&nbsp;&nbsp;}<BR>&nbsp; <BR>////////////////////////////////////////////////////////////</DIV>
<DIV>/* &nbsp;&nbsp;filter-&gt;SetInput( reader-&gt;GetOutput() );<BR>&nbsp;&nbsp;filter-&gt;SetNumberOfIterations(0);<BR>&nbsp;&nbsp;filter-&gt;SetReplaceValue(255);<BR>&nbsp;&nbsp;filter-&gt;SetMultiplier(2.5);<BR>&nbsp;&nbsp;ImageType::IndexType seed;<BR>&nbsp;&nbsp;seed[0]=50;<BR>&nbsp;&nbsp;seed[1]=50;<BR>&nbsp;&nbsp;seed[2]=50;<BR>&nbsp;&nbsp;filter-&gt;SetSeed(seed); */<BR>&nbsp;&nbsp;//filter-&gt;Update();<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;// Fast Marching started...<BR>&nbsp;&nbsp;typedef float RealPixelType;<BR>&nbsp;&nbsp;typedef itk::OrientedImage&lt; RealPixelType,3 &gt;&nbsp;&nbsp;&nbsp; RealImageType;<BR>&nbsp;&nbsp;typedef unsigned char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutputPixelType;<BR>&nbsp;&nbsp;typedef itk::OrientedImage&lt; OutputPixelType, 3 &gt; OutputImageType;</DIV>
<DIV>&nbsp;&nbsp;typedef itk::BinaryThresholdImageFilter&lt; RealImageType, RealImageType&gt;&nbsp;&nbsp;&nbsp; ThresholdingFilterType;<BR>&nbsp;&nbsp;ThresholdingFilterType::Pointer thresholder = ThresholdingFilterType::New();</DIV>
<DIV>&nbsp;&nbsp;const PixelType&nbsp; timeThreshold = 130;<BR>&nbsp; <BR>&nbsp;&nbsp;// Threshold setting<BR>&nbsp;&nbsp;thresholder-&gt;SetLowerThreshold(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0&nbsp; );<BR>&nbsp;&nbsp;thresholder-&gt;SetUpperThreshold( timeThreshold&nbsp; );</DIV>
<DIV>&nbsp;&nbsp;// Value setting<BR>&nbsp;&nbsp;thresholder-&gt;SetOutsideValue(&nbsp; 0&nbsp; );<BR>&nbsp;&nbsp;thresholder-&gt;SetInsideValue(&nbsp; 255 );</DIV>
<DIV>&nbsp;&nbsp;typedef itk::ImageFileReader&lt; ImageType &gt; ReaderType;<BR>&nbsp;&nbsp;typedef itk::ImageFileWriter&lt;&nbsp; OutputImageType&nbsp; &gt; WriterType;<BR>&nbsp;&nbsp;typedef itk::RescaleIntensityImageFilter&lt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImageType, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutputImageType &gt;&nbsp;&nbsp; CastFilterType;<BR>&nbsp;&nbsp;typedef itk::CurvatureAnisotropicDiffusionImageFilter&lt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RealImageType, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RealImageType &gt;&nbsp; SmoothingFilterType; <BR>&nbsp;&nbsp;SmoothingFilterType::Pointer smoothing = SmoothingFilterType::New();</DIV>
<DIV>&nbsp;&nbsp;typedef itk::GradientMagnitudeRecursiveGaussianImageFilter&lt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RealImageType, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RealImageType &gt;&nbsp; GradientFilterType;<BR>&nbsp;&nbsp;typedef itk::SigmoidImageFilter&lt;&nbsp;&nbsp;RealImageType, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RealImageType &gt;&nbsp; SigmoidFilterType;</DIV>
<DIV>&nbsp;&nbsp;GradientFilterType::Pointer&nbsp; gradientMagnitude = GradientFilterType::New();<BR>&nbsp;&nbsp;SigmoidFilterType::Pointer sigmoid = SigmoidFilterType::New();</DIV>
<DIV>&nbsp;&nbsp;sigmoid-&gt;SetOutputMinimum( 0 );<BR>&nbsp;&nbsp;sigmoid-&gt;SetOutputMaximum( 1 );</DIV>
<DIV>&nbsp;&nbsp;typedef&nbsp; itk::FastMarchingImageFilter&lt; RealImageType, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RealImageType &gt;&nbsp;&nbsp;&nbsp; FastMarchingFilterType;<BR>&nbsp;&nbsp;FastMarchingFilterType::Pointer fastMarching = FastMarchingFilterType::New();</DIV>
<DIV>&nbsp;&nbsp;typedef itk::CastImageFilter&lt; ImageType,RealImageType&gt; Image_to_Real_Type;<BR>&nbsp;&nbsp;Image_to_Real_Type::Pointer image_to_real_Filter = Image_to_Real_Type::New();</DIV>
<DIV>&nbsp;&nbsp;image_to_real_Filter-&gt;SetInput(reader-&gt;GetOutput() );<BR>&nbsp;&nbsp;smoothing-&gt;SetInput( image_to_real_Filter-&gt;GetOutput());<BR>&nbsp;&nbsp;//real_to_image_Filter-&gt;SetInput(smoothing-&gt;GetOutput());<BR>&nbsp;&nbsp;gradientMagnitude-&gt;SetInput( smoothing-&gt;GetOutput() );<BR>&nbsp;&nbsp;sigmoid-&gt;SetInput( gradientMagnitude-&gt;GetOutput() );<BR>&nbsp;&nbsp;fastMarching-&gt;SetInput( sigmoid-&gt;GetOutput() );<BR>&nbsp;&nbsp;//fastMarching-&gt;SetInput( gradientMagnitude-&gt;GetOutput() );<BR>&nbsp;&nbsp;thresholder-&gt;SetInput( fastMarching-&gt;GetOutput() );</DIV>
<DIV>&nbsp;&nbsp;smoothing-&gt;SetTimeStep( 0.0625 );<BR>&nbsp;&nbsp;smoothing-&gt;SetNumberOfIterations(&nbsp; 3 );<BR>&nbsp;&nbsp;smoothing-&gt;SetConductanceParameter( 3 );</DIV>
<DIV>&nbsp;&nbsp;const double sigma = 3;</DIV>
<DIV>&nbsp;&nbsp;gradientMagnitude-&gt;SetSigma(&nbsp; sigma&nbsp; );</DIV>
<DIV>&nbsp;&nbsp;sigmoid-&gt;SetAlpha( 20 );<BR>&nbsp;&nbsp;sigmoid-&gt;SetBeta( 170 );</DIV>
<DIV>&nbsp;&nbsp;typedef FastMarchingFilterType::NodeContainer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NodeContainer;<BR>&nbsp;&nbsp;typedef FastMarchingFilterType::NodeType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NodeType;<BR>&nbsp;&nbsp;NodeContainer::Pointer seeds = NodeContainer::New();</DIV>
<DIV>&nbsp;&nbsp;ImageType::IndexType&nbsp; seedPosition;<BR>&nbsp; <BR>&nbsp;&nbsp;seedPosition[0] = 250;<BR>&nbsp;&nbsp;seedPosition[1] = 250;<BR>&nbsp;&nbsp;seedPosition[2] = 50;</DIV>
<DIV>&nbsp;&nbsp;NodeType node;<BR>&nbsp;&nbsp;const double seedValue = 0.0;<BR>&nbsp; <BR>&nbsp;&nbsp;node.SetValue( seedValue );<BR>&nbsp;&nbsp;node.SetIndex( seedPosition );</DIV>
<DIV>&nbsp;&nbsp;seeds-&gt;Initialize();<BR>&nbsp;&nbsp;seeds-&gt;InsertElement( 0, node );</DIV>
<DIV>&nbsp;&nbsp;fastMarching-&gt;SetTrialPoints(&nbsp; seeds&nbsp; );<BR>&nbsp;&nbsp;fastMarching-&gt;SetOutputSize( reader-&gt;GetOutput()-&gt;GetBufferedRegion().GetSize() );<BR>&nbsp;&nbsp;reader-&gt;Update();<BR>&nbsp;&nbsp;fastMarching-&gt;SetStoppingValue(&nbsp; 100&nbsp; );<BR>&nbsp;&nbsp;</DIV>
<DIV>&nbsp;&nbsp;typedef itk::CastImageFilter&lt; RealImageType,ImageType&gt; Real_to_Image_Type;<BR>&nbsp;&nbsp;Real_to_Image_Type::Pointer real_to_image_Filter = Real_to_Image_Type::New();<BR>&nbsp;&nbsp;real_to_image_Filter-&gt;SetInput(fastMarching-&gt;GetOutput());<BR>&nbsp;&nbsp;//connector-&gt;SetInput(real_to_image_Filter-&gt;GetOutput());<BR>&nbsp;&nbsp;//connector-&gt;SetInput(thresholder-&gt;GetOutput());<BR>&nbsp;&nbsp;connector-&gt;SetInput(reader-&gt;GetOutput());<BR>&nbsp;&nbsp;connector-&gt;Update();<BR>&nbsp;&nbsp;// Fast Marching Ends.</DIV>
<DIV>&nbsp; <BR>/*<BR>&nbsp;image_to_real_Filter-&gt;SetInput( reader-&gt;GetOutput() );</DIV>
<DIV>&nbsp;typedef itk::FastMarchingImageFilter&lt; RealImageType,RealImageType &gt;&nbsp; FastMarchingFilterType;<BR>&nbsp;FastMarchingFilterType::Pointer m_FastMarchingImageFilter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = FastMarchingFilterType::New();<BR>&nbsp;m_FastMarchingImageFilter-&gt;SetSpeedConstant( 1.0 );<BR>&nbsp;m_FastMarchingImageFilter-&gt;SetInput(image_to_real_Filter-&gt;GetOutput());<BR>&nbsp;typedef&nbsp; itk::CannySegmentationLevelSetImageFilter&lt;itk::Image&lt; RealPixelType,&nbsp;&nbsp; 3 &gt;,itk::Image&lt; RealPixelType,&nbsp;&nbsp; 3 &gt;&gt; CannySegmentationLevelSetFilterType;<BR>&nbsp;CannySegmentationLevelSetFilterType::Pointer m_CannySegmentationLevelSetFilter&nbsp; = CannySegmentationLevelSetFilterType::New();</DIV>
<DIV>&nbsp;m_CannySegmentationLevelSetFilter-&gt;SetInput( m_FastMarchingImageFilter-&gt;GetOutput() );<BR>&nbsp;<BR>&nbsp;m_CannySegmentationLevelSetFilter-&gt;SetFeatureImage(&nbsp; image_to_real_Filter -&gt;GetOutput() );<BR>&nbsp;real_to_image_Filter-&gt;SetInput(m_CannySegmentationLevelSetFilter-&gt;GetOutput());<BR>&nbsp;connector-&gt;SetInput(real_to_image_Filter-&gt;GetOutput());<BR>*/&nbsp;<BR>&nbsp;}<BR>&nbsp;catch (itk::ExceptionObject &amp;ex)<BR>&nbsp;{<BR>&nbsp;&nbsp;std::cout &lt;&lt; ex &lt;&lt; std::endl;<BR>&nbsp;&nbsp;return EXIT_FAILURE;<BR>&nbsp;&nbsp;&nbsp; }</DIV>
<DIV>&nbsp;// Parse the parameters<BR>&nbsp;int count = 1;<BR>&nbsp;char *dirname = NULL;<BR>&nbsp;double opacityWindow = 4096;<BR>&nbsp;double opacityLevel = 2048;<BR>&nbsp;int blendType = 0;<BR>&nbsp;int clip = 0;<BR>&nbsp;double reductionFactor = 1.0;<BR>&nbsp;double frameRate = 10.0;<BR>&nbsp;char *fileName = 0;<BR>&nbsp;int fileType = 0; </DIV>
<DIV>&nbsp;bool independentComponents = true;<BR>&nbsp; <BR>&nbsp;// Create the renderer, render window and interactor<BR>&nbsp;vtkRenderer *renderer = vtkRenderer::New();<BR>&nbsp;vtkRenderWindow *renWin = vtkRenderWindow::New();<BR>&nbsp;renWin-&gt;AddRenderer(renderer);</DIV>
<DIV>&nbsp;// Connect it all. Note that funny arithmatic on the <BR>&nbsp;// SetDesiredUpdateRate - the vtkRenderWindow divides it<BR>&nbsp;// allocated time across all renderers, and the renderer<BR>&nbsp;// divides it time across all props. If clip is<BR>&nbsp;// true then there are two props<BR>&nbsp;vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();<BR>&nbsp;iren-&gt;SetRenderWindow(renWin);<BR>&nbsp;iren-&gt;SetDesiredUpdateRate(frameRate / (1+clip)); </DIV>
<DIV>&nbsp;iren-&gt;GetInteractorStyle()-&gt;SetDefaultRenderer(renderer);</DIV>
<DIV>&nbsp;// Read the data<BR>&nbsp; &nbsp;//typedef itk::VTKImageExport&lt; MaskImageType&nbsp; &gt; ExportFilter2Type;<BR>&nbsp;//ExportFilter2Type::Pointer itkExporter2 = ExportFilter2Type::New();<BR>&nbsp;//itkExporter2-&gt;SetInput( filter-&gt;GetOutput() );<BR>&nbsp;&nbsp;&nbsp; vtkDataSetMapper* geom = vtkDataSetMapper::New();<BR>&nbsp;geom-&gt;SetInput(connector-&gt;GetOutput());<BR>&nbsp;&nbsp;&nbsp; geom-&gt;Update();<BR>&nbsp;&nbsp;&nbsp; vtkContourFilter * contour = vtkContourFilter::New();<BR>&nbsp;&nbsp;&nbsp; contour-&gt;SetInput( connector-&gt;GetOutput() );<BR>&nbsp;&nbsp;&nbsp; contour-&gt;SetValue(0, 128); // edges of a binary image with values 0,255<BR>&nbsp;vtkPolyDataMapper * polyMapper = vtkPolyDataMapper::New();<BR>&nbsp;&nbsp;&nbsp; vtkActor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * polyActor&nbsp; = vtkActor::New();</DIV>
<DIV>&nbsp;&nbsp;&nbsp; //polyActor-&gt;SetMapper( polyMapper );<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; //polyMapper-&gt;SetInput( contour-&gt;GetOutput() );<BR>&nbsp;//polyMapper-&gt;SetInput( geom-&gt;GetOutput() );<BR>&nbsp;&nbsp;&nbsp; //polyMapper-&gt;ScalarVisibilityOff();<BR>&nbsp;<BR>&nbsp;// Set the scene<BR>&nbsp;polyActor-&gt;SetMapper( geom );<BR>&nbsp;&nbsp;&nbsp; vtkProperty * vtkproperty = vtkProperty::New();<BR>&nbsp;&nbsp;&nbsp; vtkproperty-&gt;SetAmbient(0.5);<BR>&nbsp;&nbsp;&nbsp; vtkproperty-&gt;SetDiffuse(0.1);<BR>&nbsp;&nbsp;&nbsp; vtkproperty-&gt;SetSpecular(0.5);<BR>&nbsp;&nbsp;&nbsp; vtkproperty-&gt;SetColor(0.5,0.4,0.0);<BR>&nbsp;&nbsp;&nbsp; vtkproperty-&gt;SetLineWidth(2.0);<BR>&nbsp;&nbsp;&nbsp; vtkproperty-&gt;SetRepresentationToWireframe();<BR>&nbsp;vtkproperty-&gt;SetOpacity(0.1);</DIV>
<DIV>&nbsp;&nbsp;&nbsp; polyActor-&gt;SetProperty( vtkproperty );<BR>&nbsp; <BR>&nbsp;&nbsp;&nbsp; //renderer-&gt;AddActor( polyActor );</DIV>
<DIV>&nbsp;vtkImageData *input = 0;<BR>&nbsp;input = connector-&gt;GetOutput();</DIV>
<DIV>&nbsp;&nbsp;&nbsp; vtkImageResample *resample = vtkImageResample::New();<BR>&nbsp;if ( reductionFactor &lt; 1.0 )<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;resample-&gt;SetInput(input);<BR>&nbsp;&nbsp;resample-&gt;SetAxisMagnificationFactor(0, reductionFactor);<BR>&nbsp;&nbsp;resample-&gt;SetAxisMagnificationFactor(1, reductionFactor);<BR>&nbsp;&nbsp;resample-&gt;SetAxisMagnificationFactor(2, reductionFactor);<BR>&nbsp;&nbsp;&nbsp; }</DIV>
<DIV>&nbsp;// Create our volume and mapper<BR>&nbsp;vtkVolume *volume = vtkVolume::New();<BR>&nbsp;vtkGPUVolumeRayCastMapper *mapper = vtkGPUVolumeRayCastMapper::New();<BR>&nbsp; <BR>&nbsp;// Add a box widget if the clip option was selected<BR>&nbsp;vtkBoxWidget *box = vtkBoxWidget::New();<BR>&nbsp;if (clip)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;box-&gt;SetInteractor(iren);<BR>&nbsp;&nbsp;box-&gt;SetPlaceFactor(1.01);<BR>&nbsp;&nbsp;if ( reductionFactor &lt; 1.0 )<BR>&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;box-&gt;SetInput(resample-&gt;GetOutput());<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;else<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;box-&gt;SetInput(input);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;box-&gt;SetDefaultRenderer(renderer);<BR>&nbsp;&nbsp;box-&gt;InsideOutOn();<BR>&nbsp;&nbsp;box-&gt;PlaceWidget();<BR>&nbsp;&nbsp;vtkBoxWidgetCallback *callback = vtkBoxWidgetCallback::New();<BR>&nbsp;&nbsp;callback-&gt;SetMapper(mapper);<BR>&nbsp;&nbsp;box-&gt;AddObserver(vtkCommand::InteractionEvent, callback);<BR>&nbsp;&nbsp;callback-&gt;Delete();<BR>&nbsp;&nbsp;box-&gt;EnabledOn();<BR>&nbsp;&nbsp;box-&gt;GetSelectedFaceProperty()-&gt;SetOpacity(0.0);<BR>&nbsp;&nbsp;&nbsp; }</DIV>
<DIV>&nbsp;if ( reductionFactor &lt; 1.0 )<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;mapper-&gt;SetInputConnection( resample-&gt;GetOutputPort() );<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;else<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;mapper-&gt;SetInput(input);<BR>&nbsp;&nbsp;//mapper-&gt;SetInputConnection( read-&gt;GetOutputPort() );<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;// Set the sample distance on the ray to be 1/2 the average spacing<BR>&nbsp;double spacing[3];<BR>&nbsp;if ( reductionFactor &lt; 1.0 )<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;resample-&gt;GetOutput()-&gt;GetSpacing(spacing);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;else<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;input-&gt;GetSpacing(spacing);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp; <BR>//&nbsp; mapper-&gt;SetSampleDistance( (spacing[0]+spacing[1]+spacing[2])/6.0 );<BR>//&nbsp; mapper-&gt;SetMaximumImageSampleDistance(10.0);<BR>&nbsp; <BR>&nbsp;// Create our transfer function<BR>&nbsp;vtkColorTransferFunction *colorFun = vtkColorTransferFunction::New();<BR>&nbsp;vtkPiecewiseFunction *opacityFun = vtkPiecewiseFunction::New();<BR>&nbsp; <BR>&nbsp;// Create the property and attach the transfer functions<BR>&nbsp;vtkVolumeProperty *property = vtkVolumeProperty::New();<BR>&nbsp;property-&gt;SetIndependentComponents(independentComponents);<BR>&nbsp;property-&gt;SetColor( colorFun );<BR>&nbsp;property-&gt;SetScalarOpacity( opacityFun );<BR>&nbsp;property-&gt;SetInterpolationTypeToLinear();</DIV>
<DIV>&nbsp;// connect up the volume to the property and the mapper<BR>&nbsp;volume-&gt;SetProperty( property );<BR>&nbsp;volume-&gt;SetMapper( mapper );</DIV>
<DIV>&nbsp;// Depending on the blend type selected as a command line option, <BR>&nbsp;// adjust the transfer function<BR>&nbsp;switch ( blendType )<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; // MIP<BR>&nbsp;&nbsp;&nbsp; // Create an opacity ramp from the window and level values.<BR>&nbsp;&nbsp;&nbsp; // Color is white. Blending is MIP.<BR>&nbsp;&nbsp;&nbsp; case 0:<BR>&nbsp;&nbsp;colorFun-&gt;AddRGBSegment(0.0, 1.0, 1.0, 1.0, 255.0, 1.0, 1.0, 1.0 );<BR>&nbsp;&nbsp;opacityFun-&gt;AddSegment( opacityLevel - 0.5*opacityWindow, 0.0, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opacityLevel + 0.5*opacityWindow, 1.0 );<BR>&nbsp;&nbsp;mapper-&gt;SetBlendModeToMaximumIntensity();<BR>&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; // CompositeRamp<BR>&nbsp;&nbsp;&nbsp; // Create a ramp from the window and level values. Use compositing<BR>&nbsp;&nbsp;&nbsp; // without shading. Color is a ramp from black to white.<BR>&nbsp;&nbsp;&nbsp; case 1:<BR>&nbsp;&nbsp;colorFun-&gt;AddRGBSegment( opacityLevel - 0.5*opacityWindow, 0.0, 0.0, 0.0, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opacityLevel + 0.5*opacityWindow, 1.0, 1.0, 1.0 );<BR>&nbsp;&nbsp;opacityFun-&gt;AddSegment( opacityLevel - 0.5*opacityWindow, 0.0, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opacityLevel + 0.5*opacityWindow, 1.0 );<BR>&nbsp;&nbsp;mapper-&gt;SetBlendModeToComposite();<BR>&nbsp;&nbsp;property-&gt;ShadeOff();<BR>&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; // CompositeShadeRamp<BR>&nbsp;&nbsp;&nbsp; // Create a ramp from the window and level values. Use compositing<BR>&nbsp;&nbsp;&nbsp; // with shading. Color is white.<BR>&nbsp;&nbsp;&nbsp; case 2:<BR>&nbsp;&nbsp;colorFun-&gt;AddRGBSegment( 0.0, 1.0, 1.0, 1.0, 255.0, 1.0, 1.0, 1.0 );<BR>&nbsp;&nbsp;opacityFun-&gt;AddSegment( opacityLevel - 0.5*opacityWindow, 0.0, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opacityLevel + 0.5*opacityWindow, 1.0 );<BR>&nbsp;&nbsp;mapper-&gt;SetBlendModeToComposite();<BR>&nbsp;&nbsp;property-&gt;ShadeOn();<BR>&nbsp;&nbsp;break;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; // CT_Skin<BR>&nbsp;&nbsp;&nbsp; // Use compositing and functions set to highlight skin in CT data<BR>&nbsp;&nbsp;&nbsp; // Not for use on RGB data<BR>&nbsp;&nbsp;&nbsp; case 3:<BR>&nbsp;&nbsp;colorFun-&gt;AddRGBPoint( -3024, 0, 0, 0, 0.5, 0.0 );<BR>&nbsp;&nbsp;colorFun-&gt;AddRGBPoint( -1000, .62, .36, .18, 0.5, 0.0 );<BR>&nbsp;&nbsp;colorFun-&gt;AddRGBPoint( -500, .88, .60, .29, 0.33, 0.45 );<BR>&nbsp;&nbsp;colorFun-&gt;AddRGBPoint( 3071, .83, .66, 1, 0.5, 0.0 );<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint(-3024, 0, 0.5, 0.0 );<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint(-1000, 0, 0.5, 0.0 );<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint(-500, 1.0, 0.33, 0.45 );<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint(3071, 1.0, 0.5, 0.0);</DIV>
<DIV>&nbsp;&nbsp;mapper-&gt;SetBlendModeToComposite();<BR>&nbsp;&nbsp;property-&gt;ShadeOn();<BR>&nbsp;&nbsp;property-&gt;SetAmbient(0.1);<BR>&nbsp;&nbsp;property-&gt;SetDiffuse(0.9);<BR>&nbsp;&nbsp;property-&gt;SetSpecular(0.2);<BR>&nbsp;&nbsp;property-&gt;SetSpecularPower(10.0);<BR>&nbsp;&nbsp;property-&gt;SetScalarOpacityUnitDistance(0.8919);<BR>&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; // CT_Bone<BR>&nbsp;&nbsp;&nbsp; // Use compositing and functions set to highlight bone in CT data<BR>&nbsp;&nbsp;&nbsp; // Not for use on RGB data<BR>&nbsp;&nbsp;&nbsp; case 4:<BR>&nbsp;&nbsp;colorFun-&gt;AddRGBPoint( -3024, 0, 0, 0, 0.5, 0.0 );<BR>&nbsp;&nbsp;colorFun-&gt;AddRGBPoint( -16, 0.73, 0.25, 0.30, 0.49, .61 );<BR>&nbsp;&nbsp;colorFun-&gt;AddRGBPoint( 641, .90, .82, .56, .5, 0.0 );<BR>&nbsp;&nbsp;colorFun-&gt;AddRGBPoint( 3071, 1, 1, 1, .5, 0.0 );<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint( -3024, 0, 0.5, 0.0 );<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint( -16, 0, .49, .61 );<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint( 641, .72, .5, 0.0 );<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint( 3071, .71, 0.5, 0.0 );</DIV>
<DIV>&nbsp;&nbsp;mapper-&gt;SetBlendModeToComposite();<BR>&nbsp;&nbsp;property-&gt;ShadeOn();<BR>&nbsp;&nbsp;property-&gt;SetAmbient(0.1);<BR>&nbsp;&nbsp;property-&gt;SetDiffuse(0.9);<BR>&nbsp;&nbsp;property-&gt;SetSpecular(0.2);<BR>&nbsp;&nbsp;property-&gt;SetSpecularPower(10.0);<BR>&nbsp;&nbsp;property-&gt;SetScalarOpacityUnitDistance(0.8919);<BR>&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; // CT_Muscle<BR>&nbsp;&nbsp;&nbsp; // Use compositing and functions set to highlight muscle in CT data<BR>&nbsp;&nbsp;&nbsp; // Not for use on RGB data<BR>&nbsp;&nbsp;&nbsp; case 5:<BR>&nbsp;&nbsp;colorFun-&gt;AddRGBPoint(-3024, 0, 0, 0, 0.5, 0.0);<BR>&nbsp;&nbsp;colorFun-&gt;AddRGBPoint(-155, .55, .25, .15, 0.5, .92);<BR>&nbsp;&nbsp;colorFun-&gt;AddRGBPoint(217, .88, .60, .29, 0.33, 0.45);<BR>&nbsp;&nbsp;colorFun-&gt;AddRGBPoint(420, 1, .94, .95, 0.5, 0.0);<BR>&nbsp;&nbsp;colorFun-&gt;AddRGBPoint(3071, .83, .66, 1, 0.5, 0.0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint(-3024, 0, 0.5, 0.0);<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint(-155, 0, 0.5, 0.92);<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint(217, .68, 0.33, 0.45);<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint(420,.83, 0.5, 0.0);<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint(3071, .80, 0.5, 0.0);</DIV>
<DIV>&nbsp;&nbsp;mapper-&gt;SetBlendModeToComposite();<BR>&nbsp;&nbsp;property-&gt;ShadeOn();<BR>&nbsp;&nbsp;property-&gt;SetAmbient(0.1);<BR>&nbsp;&nbsp;property-&gt;SetDiffuse(0.9);<BR>&nbsp;&nbsp;property-&gt;SetSpecular(0.2);<BR>&nbsp;&nbsp;property-&gt;SetSpecularPower(10.0);<BR>&nbsp;&nbsp;property-&gt;SetScalarOpacityUnitDistance(0.8919);<BR>&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; // RGB_Composite<BR>&nbsp;&nbsp;&nbsp; // Use compositing and functions set to highlight red/green/blue regions<BR>&nbsp;&nbsp;&nbsp; // in RGB data. Not for use on single component data<BR>&nbsp;&nbsp;&nbsp; case 6:<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint(0, 0.0);<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint(5.0, 0.0);<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint(30.0, 0.05);<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint(31.0, 0.0);<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint(90.0, 0.0);<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint(100.0, 0.3);<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint(110.0, 0.0);<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint(190.0, 0.0);<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint(200.0, 0.4);<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint(210.0, 0.0);<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint(245.0, 0.0);<BR>&nbsp;&nbsp;opacityFun-&gt;AddPoint(255.0, 0.5);</DIV>
<DIV>&nbsp;&nbsp;mapper-&gt;SetBlendModeToComposite();<BR>&nbsp;&nbsp;property-&gt;ShadeOff();<BR>&nbsp;&nbsp;property-&gt;SetScalarOpacityUnitDistance(1.0);<BR>&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp; default:<BR>&nbsp;&nbsp;vtkGenericWarningMacro("Unknown blend type.");<BR>&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp; <BR>&nbsp;// Set the default window size<BR>&nbsp;renWin-&gt;SetSize(600,600);<BR>&nbsp;renWin-&gt;Render();</DIV>
<DIV>&nbsp;if ( !mapper-&gt;IsRenderSupported(renWin, property) )<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;cout &lt;&lt; "This mapper is unsupported on this platform" &lt;&lt; endl;<BR>&nbsp;&nbsp;exit(EXIT_FAILURE);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp; </DIV>
<DIV>&nbsp;// Add the volume to the scene<BR>&nbsp;renderer-&gt;AddVolume( volume );</DIV>
<DIV>&nbsp;renderer-&gt;ResetCamera();<BR>&nbsp;// interact with data<BR>&nbsp;renWin-&gt;Render();</DIV>
<DIV>&nbsp;iren-&gt;Start();</DIV>
<DIV>&nbsp;opacityFun-&gt;Delete();<BR>&nbsp;colorFun-&gt;Delete();<BR>&nbsp;property-&gt;Delete();<BR>&nbsp; <BR>&nbsp;box-&gt;Delete();<BR>&nbsp;volume-&gt;Delete();<BR>&nbsp;mapper-&gt;Delete();<BR>&nbsp;//reader-&gt;Delete();<BR>&nbsp;resample-&gt;Delete();<BR>&nbsp;renderer-&gt;Delete();<BR>&nbsp;renWin-&gt;Delete();<BR>&nbsp;iren-&gt;Delete();<BR>&nbsp;contour-&gt;Delete();<BR>&nbsp;geom-&gt;Delete();<BR>&nbsp;polyMapper-&gt;Delete();<BR>&nbsp;polyActor-&gt;Delete();<BR>&nbsp;vtkproperty-&gt;Delete();<BR>&nbsp;<BR>&nbsp;return 0; <BR>}<BR></DIV>
<DIV>***********************************************************************************************</DIV>
<DIV>&nbsp;</DIV>
<DIV>But when I do the <SPAN>executable program( Navogation.exe )</SPAN></DIV>
<DIV><SPAN>
<P>Picture a flash,then disappear.</P>
<P>system prompt:&lt;This mapper is unsurpported on this paltform&gt;</P>
<P>my graphics card&nbsp;as:ATI Radeon HD 4350</P>
<P>Need I change my&nbsp; graphics card&nbsp;?</P>
<P>thanks.</P></SPAN></DIV></DIV><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>