[vtkusers] Re: Re: Re: Creating a Volume from 2D BMP files.

Amy Squillacote amy.squillacote at kitware.com
Wed Sep 13 13:30:31 EDT 2006


Ashish Singh wrote:
> Hi Amy,
>
> I don't remember if VTK_USE_RENDERING variable was ON or not. Is there 
> a way to confirm that? However I am able to compile and run other 
> programs from the examples/tutorials directory such as cones etc. as 
> well as read and display single dicom image and interact with it using 
> renderwindowinteractor.
>
If you are able to render and use the render window interactor, then 
VTK_USE_RENDERING was turned on, so that isn't the problem.
> The cmakelists.txt file that I use for dicom volume problem is :
> ----
> PROJECT (multiimagereader)
>
> INCLUDE (${CMAKE_ROOT}/Modules/FindVTK.cmake)
> IF (USE_VTK_FILE)
>   INCLUDE(${USE_VTK_FILE})
> ENDIF (USE_VTK_FILE)
>
> ADD_EXECUTABLE(multiimagereader multiimagereader.cxx )
> TARGET_LINK_LIBRARIES(multiimagereader vtkRendering)
> ----
> Is there anything that I need to modify in this file?
>
In the above TARGET_LINK_LIBRARIES line, add vtkVolumeRendering before 
the closing ")". The line should look like the following.

TARGET_LINK_LIBRARIES(multiimagereader vtkRendering vtkVolumeRendering)
> Thanks,
> Ashish
>
>
> On 9/13/06, * Amy Squillacote* <amy.squillacote at kitware.com 
> <mailto:amy.squillacote at kitware.com>> wrote:
>
>     Hi Ashish,
>
>     When you built VTK, was the VTK_USE_RENDERING CMake variable set
>     to ON? If it was, are you linking against the vtkVolumeRendering
>     library?
>
>     - Amy
>
>     Ashish Singh wrote:
>     Hi Yixun and Sharwari,
>
>     I am trying to solve exactly similar problem but using DICOM
>     images rather than bmp. But I am getting errors and I can't figure
>     out why. My code is based on your previous conversation so far.
>     The error that I get is:
>     (1)error LNK2019: unresolved external symbol "public: static class
>     vtkVolumeRayCastCompositeFunction * __cdecl
>     vtkVolumeRayCastCompositeFunction::New(void)"
>     (?New at vtkVolumeRayCastCompositeFunction@@SAPAV1 at XZ ) referenced in
>     function _main
>      (2)error LNK2019: unresolved external symbol "public: static
>     class vtkVolumeRayCastMapper * __cdecl
>     vtkVolumeRayCastMapper::New(void)"
>     (?New at vtkVolumeRayCastMapper@@SAPAV1 at XZ) referenced in function _main
>     (3)fatal error LNK1120: 2 unresolved externals
>
>     Can you please help me figure out what's going wrong here?
>
>     My code is as follows:
>     -----
>     #include "vtkConeSource.h"
>     #include "vtkPolyDataMapper.h "
>     #include "vtkRenderWindow.h"
>     #include "vtkCamera.h"
>     #include "vtkActor.h"
>     #include "vtkImageActor.h"
>     #include "vtkOutlineFilter.h"
>     #include " vtkProperty.h"
>     #include "vtkPolyDataNormals.h"
>     #include "vtkContourFilter.h"
>     #include "vtkDataSetMapper.h"
>     #include "vtkImageMapper.h"
>     #include "vtkPiecewiseFunction.h "
>     #include "vtkVolumeProperty.h"
>     #include "vtkRenderer.h"
>     #include "conio.h"
>     #include "vtkDICOMImageReader.h"
>     #include "vtkImageViewer2.h"
>     #include " vtkJPEGReader.h"
>     #include "vtkRenderWindowInteractor.h"
>     #include "vtkVolumeMapper.h"
>     #include "vtkActor2D.h"
>     #include "vtkPolyDataMapper.h"
>     #include "vtkVolumeRayCastCompositeFunction.h "
>     #include "vtkVolumeRayCastMapper.h"
>
>     void main()
>     {
>      
>       vtkRenderer *arenderer = vtkRenderer::New();
>       vtkRenderWindow *renwin = vtkRenderWindow::New();
>       vtkDICOMImageReader *img1=vtkDICOMImageReader::New();
>
>       img1->SetFilePrefix("D:\\testimages\\dicomset\\IM");
>       img1->SetFilePattern("%s%d.dcm");
>       img1->SetFileNameSliceOffset(1);
>       img1->SetFileNameSliceSpacing(1);
>       img1->SetDataExtent(0,511,0,511,1,10);//512x512 images and 10
>     slices
>       img1->SetDataSpacing(360.0/512,360.0/512,1.0); //my image is
>     36cm x 36cm and 512x512
>       img1->SetDataOrigin(0.0,0.0,0.0);
>       img1->Update();
>
>       vtkVolume *vol=vtkVolume::New();
>       vtkVolumeRayCastMapper *volumemapper =
>     vtkVolumeRayCastMapper::New();
>       vtkVolumeRayCastCompositeFunction
>     *rcf=vtkVolumeRayCastCompositeFunction::New();
>       volumemapper->SetVolumeRayCastFunction(rcf);
>       volumemapper->SetInput(img1->GetOutput());
>       vol->SetMapper(volumemapper);
>
>       vtkCamera *cam=vtkCamera::New();
>       cam->SetViewUp(0,0,-1);
>       cam->SetPosition(0,1,0);
>       cam->SetFocalPoint(0,0,0);
>       cam->ComputeViewPlaneNormal();
>
>       arenderer->AddActor(vol);
>       arenderer->SetActiveCamera(cam);
>       arenderer->ResetCamera();
>       arenderer->SetBackground(1,1,1);
>      
>       renwin->AddRenderer(arenderer);
>       vtkRenderWindowInteractor *iren=vtkRenderWindowInteractor::New();
>       iren->SetRenderWindow(renwin);
>       renwin->Render();
>       iren->Initialize();
>       iren->Start();
>
>       img1->Delete();
>       iren->Delete();
>     }
>     --------
>     I would really appreciate if anyone can help me.
>
>     Regards,
>     Ashish
>
>     On 9/7/06, *Sharwari Mavalankar* < sharwari at gmail.com
>     <mailto:sharwari at gmail.com>> wrote:
>
>         hi Yixun,
>         I'll try and look into why the volume appears darker.
>          
>         However I'll there are many lines that are appearing on the
>         volume (they look like striations).
>         Do you know what the reason for that could be?
>          
>          
>         Also if I have to visualize color bmp slices (24 bit ) I need
>         vtkFixedPointVolumeRayCastMapper right?
>         Thanks
>         Sharwari
>
>          
>         On 9/6/06, *Yixun Liu* <yxliu at fudan.edu.cn
>         <mailto:yxliu at fudan.edu.cn> > wrote:
>
>             Hi,
>             You are right and alwayse taking mm as the unit.
>             SpacingX = 5.12*10/256;
>             SpacingY = 5.12*10/256;
>              
>             Many reason can make the volume look darker.
>             You can change the opacity and color interpolation
>             function to adjust the appearance of the volume. If you
>             use shade you can also change ambient or diffusion
>             coefficient to make the volume look more lighter. Another
>             method is to change the vtkLight in the renderer. vtkLight
>             is a virtual light for 3D rendering. It provides methods
>             to locate and point the light, turn it on and off, and set
>             its brightness and color.
>              
>             Cheers,
>              
>             Yixun Liu
>             ----- Original Message -----
>             *From:* Sharwari Mavalankar <mailto:sharwari at gmail.com>
>             *To:* Yixun Liu <mailto:yxliu at fudan.edu.cn>
>             *Cc:* VTK <mailto:vtkusers at vtk.org>
>             *Sent:* Thursday, September 07, 2006 1:43 AM
>             *Subject:* Re: Re: Re: Creating a Volume from 2D BMP files.
>
>              
>             hi Yixun,
>             Thank you very much for your email.
>             What exactly do you mean by the physical size of the image?
>             Does it mean the size of the image in cm or mm?
>              
>             For example if my original images are 5.12 cm * 5.12 cm
>             and are 256 * 256 images.
>             What will the data spacing be?
>              
>              
>             Also can you tell me the reason why the 3D volume seems
>             darker than the original images? 
>             Is there any way I can scale the intensity of the images?
>             Thanks again,
>             Sharwari
>
>              
>             On 9/3/06, *Yixun Liu* <yxliu at fudan.edu.cn
>             <mailto:yxliu at fudan.edu.cn> > wrote:
>
>                 Hi,
>                 If you read color bmp files you should update vtk to
>                 5.0 version and use
>                 vtkFixedPointVolumeRayCastMapper(see last mail).
>                 Otherwise, you should not call
>                 br->SetNumberOfScalarComponents(3);
>                  
>                 1. You can decide the physical spacing accroding to
>                 the image extent(pixel unit) and its physical
>                 size(mm): spacing = size/(extent-1); If no physical
>                 size you have to give a estimation for the spacing.
>                  
>                 2.The point1 and point2 will define a linear opacity
>                 function, which can be interpolated from the two
>                 points. For example, define two points (intensity1,
>                 opacity1)and (intensity2, opacity2) you can get the
>                 opacity3 at intensity3 by opacity3 =
>                 (intensity3-intensity1)/(intensity2-intensity1)*(opacity2-opacity1)
>                 + opacity1
>                  
>                 Hope it help.
>                  
>                 Cheers,
>                  
>                 Yixun Liu
>
>                 ----- Original Message -----
>                 *From:* Sharwari Mavalankar <mailto:sharwari at gmail.com>
>                 *To:* Yixun Liu <mailto:yxliu at fudan.edu.cn>
>                 *Cc:* VTK <mailto:vtkusers at vtk.org>
>                 *Sent:* Monday, September 04, 2006 6:50 AM
>                 *Subject:* Re: Re: Creating a Volume from 2D BMP files.
>
>                  
>                 hi Yixun,
>                 I implemented the suggestions that you had made.
>                 Now I am getting a 3D volume but it doesnt look
>                 anything like the original 2D slices.
>                 It is much darker in appearance and it's got lines all
>                 over it ( it looks as though it's some kind of aliasing).
>                  
>                 I have the following questions to ask you
>                 1.While using the function SetDataSpacing(x,y,z) how
>                 do I decide the values of the parameters x,y and z.
>                  
>                 2.While using the Addpoint()  function of class
>                 vtkPiecewiseFunction what do the two parameters in the
>                 Addpoint function mean?
>                 How do they affect the output?
>                  
>                  
>                 This is code I have used. Do let me know if you can
>                 make any more sugestions.
>                  
>                  
>
>                 //This program reads a single BMP file and plots it as
>                 an image.
>                 //The same program will be extended to read multiple
>                 images and create a 3D volume out of 2D slices.
>
>
>                 #include "vtkRenderer.h"
>                 #include "vtkRenderWindow.h"
>                 #include "vtkRenderWindowInteractor.h"
>                 #include "vtkBMPReader.h"
>                 #include "vtkPolyDataMapper.h"
>                 #include "vtkActor.h"
>                 #include "vtkActor2D.h"
>                 #include "vtkImageActor.h"
>                 #include "vtkOutlineFilter.h"
>                 #include "vtkCamera.h"
>                 #include "vtkProperty.h"
>                 #include "vtkPolyDataNormals.h"
>                 #include "vtkContourFilter.h"
>                 #include "vtkDataSetMapper.h"
>                 #include "vtkImageMapper.h"
>                 #include "vtkVolumeMapper.h"
>                 #include " vtkVolumeRayCastMapper.h"
>                 #include "vtkVolumeRayCastCompositeFunction.h"
>                 #include "vtkPiecewiseFunction.h"
>                 #include "vtkVolumeProperty.h"
>
>
>                 void main (void)
>                 {
>                  
>                  vtkRenderer *aRenderer = vtkRenderer::New();
>                     vtkRenderWindow *renWin = vtkRenderWindow::New();
>                    
>                  renWin->AddRenderer(aRenderer);
>                     vtkRenderWindowInteractor *iren =
>                 vtkRenderWindowInteractor::New();
>                     iren->SetRenderWindow(renWin);
>
>
>                  //create an instance of the class vtkBMPReader
>                  vtkBMPReader *br = vtkBMPReader::New();
>                  
>                  br->SetFilePrefix("C:\\Images\\conductivities\\slice");
>                  br->SetFilePattern("%s%d.bmp");
>                  br->SetFileNameSliceOffset(1);
>                  br->SetFileNameSliceSpacing(1);
>                  br->SetNumberOfScalarComponents(3);
>                  br->SetDataSpacing(0.4,0.4,10);
>                  br->SetDataOrigin(0,0,0);
>                  br->SetDataExtent(0,255,0,255,0,7);
>                  br->Update();
>                   
>                     vtkPiecewiseFunction *opacityTransferFunction =
>                 vtkPiecewiseFunction::New();
>                  opacityTransferFunction->AddPoint(20,0.2);
>                  opacityTransferFunction->AddPoint(255,1.0);
>
>                  vtkVolumeProperty *volumeProperty =
>                 vtkVolumeProperty::New();
>                  volumeProperty->SetScalarOpacity(opacityTransferFunction);
>                  
>
>
>                  
>                  vtkVolumeRayCastMapper *VolumeMapper =
>                 vtkVolumeRayCastMapper::New();
>                     vtkVolumeRayCastCompositeFunction *RayCastFunction
>                 = vtkVolumeRayCastCompositeFunction::New();
>                    
>                 VolumeMapper->SetVolumeRayCastFunction(RayCastFunction);
>                     VolumeMapper->SetInput(br->GetOutput());
>
>                    
>                  vtkVolume *volume = vtkVolume::New();
>                    
>                     VolumeMapper->SetInput(br->GetOutput());
>                    volume->SetMapper(VolumeMapper);
>
>                     vtkCamera *aCamera = vtkCamera::New();
>                     aCamera->SetViewUp (0, 0,-1);
>                     aCamera->SetPosition (0, 1, 0);
>                     aCamera->SetFocalPoint (0, 0, 0);
>                     aCamera->ComputeViewPlaneNormal();
>
>
>                   aRenderer->AddActor(volume);
>                  aRenderer->SetActiveCamera(aCamera);
>                     aRenderer->ResetCamera ();
>                  aRenderer->SetBackground(1,1,1);
>                  renWin->Render();
>                  
>                     iren->Initialize();
>                     iren->Start();
>                  
>                 }
>
>                  
>                 Thanks again for all your help.
>                 Sharwari
>
>                  
>                 On 8/31/06, *Yixun Liu* <yxliu at fudan.edu.cn
>                 <mailto:yxliu at fudan.edu.cn>> wrote:
>
>                     Hi,
>                     Assuming image is 256x256x100. The first file name
>                     is image1 and the last file name is image100. So,
>                     SetDataExtent(0, 255, 0, 255, 1, 100); The access
>                     violation may be caused by wrong extent setting.
>                      
>                     If you use vtkVolume, use
>                     vtkVolumeRayCastMapper(vtk4.2.2) or use
>                     vtkFixedPointVolumeRayCastMapper(vtk5.0). Note
>                     that if you use vtkFixedPointVolumeRayCastMapper
>                     you no need to call SetVolumeRayCastFunction();
>                      
>                     Hope it help.
>                      
>                     Yixun Liu
>
>                         ----- Original Message -----
>                         *From:* Sharwari Mavalankar
>                         <mailto:sharwari at gmail.com>
>                         *To:* Yixun Liu <mailto:yxliu at fudan.edu.cn>
>                         *Cc:* VTK <mailto:vtkusers at vtk.org>
>                         *Sent:* Thursday, August 31, 2006 6:37 PM
>                         *Subject:* Re: Creating a Volume from 2D BMP
>                         files.
>
>                          
>                         hi Yixun,
>                         Thanks for your email.I had a couple of more
>                         questions though.
>                         1.I do not want to visualize colour
>                         slices.They are grey level images.
>                          
>                         2.Also if I put SetDataExtent() before the
>                         Update() then I am getting an access violation
>                         error.What does the Update function do exactly?
>                         Also can you tell me what the five parameters
>                         in SetDataExtent() mean?
>                          
>                         3.If I use vtkVolume what mapper should I use
>                         to visualize the slices?
>                          
>                          
>                         Thanks again for all your help.
>                         Sharwari
>
>
>                          
>                         On 8/23/06, *Yixun Liu* <yxliu at fudan.edu.cn
>                         <mailto:yxliu at fudan.edu.cn>> wrote:
>
>                             Hi,
>                              
>                             If you want to visualize color slices, you
>                             need to
>                             1. read these slices. You need to put the
>                             SetDataExtent(0, 111, 0, 127, 1, 300);
>                             before Update();
>                              
>                              vtkTIFFReader *v16 = vtkTIFFReader::New();
>                              v16->SetFilePrefix("D:\\MyVC\\VTKtest\\Raycasting\\Data\\BrainColor\\brain");
>                              v16->SetFilePattern("%s%d.TIF");
>                              v16->SetDataExtent(0, 111, 0, 127, 1, 300);
>                              v16->SetDataSpacing(1.2,1.2,0.5);
>                              v16->SetDataOrigin(0.0, 0.0, 0.0);
>                              v16->SetNumberOfScalarComponents(3);
>                              v16->Update();
>                              
>                             2. Add the 4th component. The first three
>                             components are color and the 4th is used
>                             to map to opacity. I compute the luminancy
>                             according to the firft three components
>                             and take it as the 4th component.
>                              
>                             3. Opacity map using vtkPiecewiseFunction
>                              
>                             4. no need color map function
>                              
>                             5. you need vtk5.0
>                              
>                             Regads,
>                              
>                             Yixun Liu
>
>                              
>                              
>
>
>
>
>
>
>         _______________________________________________
>         This is the private VTK discussion list.
>         Please keep messages on-topic. Check the FAQ at:
>         http://www.vtk.org/Wiki/VTK_FAQ
>         Follow this link to subscribe/unsubscribe:
>         http://www.vtk.org/mailman/listinfo/vtkusers
>         <http://www.vtk.org/mailman/listinfo/vtkusers>
>
>
>
>     ------------------------------------------------------------------------
>
>     _______________________________________________ This is the
>     private VTK discussion list. Please keep messages on-topic. Check
>     the FAQ at: http://www.vtk.org/Wiki/VTK_FAQ Follow this link to
>     subscribe/unsubscribe: http://www.vtk.org/mailman/listinfo/vtkusers
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20060913/2c32d4b9/attachment.htm>


More information about the vtkusers mailing list