[vtkusers] 3D modeling .. some more help plzzzz ...

Florent.Chandelier at USherbrooke.ca Florent.Chandelier at USherbrooke.ca
Wed Sep 29 17:24:18 EDT 2004


First of all, ppl told me the samples I'm working on were defatted 
before being imaged so the attenuaiton of the beam is due to bone only, 
so no soft tissue ... that what to can see using matlab histogram of the 
images ...
I only have bmp images, not the raw data .. but all my lab work with the 
bmp files ... but I'm the only one using VTK in the lab (others use 
licenced soft )
The aim of my job so far is to  get cavities ( everything but bone 
structure) to analyse the fluid movements in bone .. using an 
appropriate model, that I'll have to design after getting the 3D model 
of the non-bone structure .. that's why I'm not interesting to the bone 
structure directly.

Well Here is the answer of your mail :

here is what I put in my code :
// read bmp file
  vtkBMPReader *imagein=vtkBMPReader::New();
  imagein->SetFilePrefix ("slices"); // name of the files to read
  imagein->SetDataExtent(0, 255, 0, 255,0,5);

  float* range = imagein->GetOutput()->GetScalarRange();
 
  printf("range 0:%10.3f\n",range[0]);
  printf("range 1:%10.3f\n",range[1]);

coz it is float and not double ( imagein is float and I got an error 
using the double thing) ..... and I may say I'm quite surprised coz the 
results were respectively 0 and 1 .... but I'm doing the thresholding  
on 100-220 that works fine ..; and looking under matlab give me a range 
of 60-255 !!!

BTW
a set value of 255 render bone structure
a setValue of 254 render the bone structure ??? and I don t get why ( 
I've never try before)
a set value of 101 render bone structure ??
a set value of  100 render nothing
a set value of 99 render nothing, and neither for 97,90,80,60,40,20

Well I may say I'm quite confused now ...!!! my threshold seems not to 
work or at least gives me something that I don't understand ... and all 
the float values I have are between 0 and 1 ... well Thx for pointing 
this out to me !!

If you have the time to take a look at it I can send you few slices

I resend my code in case something have change:

#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkStructuredPointsReader.h"
#include "vtkPiecewiseFunction.h"
#include "vtkVolumeProperty.h"
#include "vtkVolumeRayCastCompositeFunction.h"
#include "vtkVolumeRayCastMapper.h"
#include "vtkVolume.h"
#include "vtkBMPReader.h"
#include "vtkCamera.h"
#include "vtkContourFilter.h"
#include "vtkPolyDataNormals.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkProperty.h"
#include "vtkDecimatePro.h"
#include "vtkSmoothPolyDataFilter.h"
#include "vtkSTLWriter.h"
#include "vtkTriangleFilter.h"
#include "vtkImageThreshold.h"
#include "vtkImageShiftScale.h"
#include "vtkTriangleFilter.h"
#include "vtkSTLWriter.h"
#include "vtkImageData.h"




void main( int argc, char *argv[] )

{

  vtkRenderer *aRenderer = vtkRenderer::New();
  vtkRenderWindow *renWinf = vtkRenderWindow::New();
  renWinf->AddRenderer(aRenderer);
  vtkRenderWindowInteractor *irenf = vtkRenderWindowInteractor::New();
  irenf->SetRenderWindow(renWinf);


  // read bmp file
  vtkBMPReader *imagein=vtkBMPReader::New();
  imagein->SetFilePrefix ("slices"); // name of the files to read
  imagein->SetDataExtent(0, 255, 0, 255,0,5);

  float* range = imagein->GetOutput()->GetScalarRange();
 
  printf("range 0:%10.3f\n",range[0]);
  printf("range 1:%10.3f\n",range[1]);
 

  // thresholding and "binarising" the images

  int TissueLow;
  int TissueHigh;

  TissueLow=100;
  TissueHigh=220;

  vtkImageThreshold *binimg=vtkImageThreshold::New();
  binimg->SetInput(imagein->GetOutput());   
  binimg->ThresholdBetween(TissueLow,TissueHigh);
  binimg->SetInValue(255); // bone value -> bone will appeared bright
  binimg->SetOutValue(100); // tissue value -> tissue will be light-gray

  
  // rendering
  vtkContourFilter *Extractor = vtkContourFilter::New();
  Extractor->SetInput((vtkDataSet *) binimg->GetOutput());
  Extractor->SetValue(0,97);
 

 
  vtkPolyDataMapper *Mapper = vtkPolyDataMapper::New();
  Mapper->SetInput(Extractor->GetOutput());
  Mapper->ScalarVisibilityOff();


 
  vtkActor *result = vtkActor::New();
  result->SetMapper(Mapper);
  aRenderer->AddActor(result);
  //aRenderer->SetBackground(1,1,1);


  // Interact with the data at 3 frames per second
  irenf->SetDesiredUpdateRate(1.0);
  irenf->SetStillUpdateRate(0.001);
  irenf->Start();


  // Set the size of the render window (expressed in pixels).
  renWinf->SetSize(300, 300);
  renWinf->Render();
  // Start the Interactor
  irenf->Start();

 

  // Clean up
  renWinf->Delete();
  aRenderer->Delete();
  irenf->Delete();
  imagein->Delete();
  result->Delete();
  Mapper->Delete();
  Extractor->Delete();
 
 
}



-- 
Florent Chandelier - florent.chandelier at usherbrooke.ca
PhD Student at the university of Sherbrooke (QC, Canada)
Bio mechanical research department - http://www.biomec.gme.usherb.ca/

Lab Phone : (001) (819)-821-7000




More information about the vtkusers mailing list