[Insight-users] questions about generate and display sparse point
cloud
Luis Ibanez
luis . ibanez at kitware . com
Fri, 03 Oct 2003 13:00:14 -0400
Hi Shaohua,
You could use the FastMarchingLevelSet class in
order to create a LevelSet from your set of points.
FastMarching accepts a list of seed points as input.
This is described in the SoftwareGuide
http://www . itk . org/ItkSoftwareGuide . pdf
Section 9.3.1, pdf-page 365, paper-page 339.
About Generic Programming, you may want to take
a look at the book:
"Generic Programming and the STL"
by Matthew H. Austern
Luis
--------------------
Shaohua Fan wrote:
> Hi Luis,
>
> Thank you very much for answering my questions. I
> enclosed the VTK file behind. I will take your advices
> and generate/display the sparse points that way.
> Currently I just want to get my program run and see
> something on the screen, instead of worrying about the
> efficiency:-).
>
> I am writing some codes to approximate a 3D surface
> using level set method from a point cloud input. The
> sample and application codes in ITK seem either for
> segmentation or registration, not one for 3D
> reconstruction. The deformation in the
> SimpleLevelSetsExample only use regular geometric
> objects, i.e. those can be represented with analytical
> form. I am not sure how to efficiently update the
> distance funciton for irregular surface yet. Do you
> have some suggestions about what application codes I
> should look into which may be helpful for my project?
>
> A side question: I think I have quite extensive c++
> programming experience, but still feel kind of
> difficult to write my own codes in ITk( I have some
> STL experience, no generic programming experience).
> What would be a relatively easy way for me to start?
> -- I scanned the ITK user manual and am reading a book
> about generic programming.
>
> Thanks,
>
> Shaohua
>
> ==============
> viewSparsePointsVTK.tcl
>
> package require vtkinteraction
>
> set X 63
> set Y 63
> set Z 63
>
> #
> # This script renders the initial and the final
> images from
> # itk3DSimpleLevelSetsExample. The zero level set is
> the
> # surface of interest.
> #
> #
>
> set img_data1 "sparse_spherePoints_3D.raw"
>
> vtkImageReader imgReader1
> imgReader1 SetDataExtent 0 $X 0 $Y 0 $Z
> imgReader1 SetFileName $img_data1
> imgReader1 SetDataByteOrderToLittleEndian
> imgReader1 SetNumberOfScalarComponents 1
> imgReader1 SetFileDimensionality 3
> imgReader1 SetDataScalarTypeToFloat
>
> vtkContourFilter marcher1
> marcher1 SetNumberOfContours 1
> marcher1 SetValue 0 0.0
> marcher1 SetInput [imgReader1 GetOutput]
>
> vtkOpenGLPolyDataMapper map1
> map1 ScalarVisibilityOff
> map1 ImmediateModeRenderingOn
> map1 SetInput [marcher1 GetOutput]
>
> vtkRenderer ren1
> ren1 SetViewport 0 0 1 1
>
> vtkRenderWindow renWin1
> renWin1 AddRenderer ren1
> renWin1 SetSize 256 256
>
> vtkActor blob1
> blob1 SetMapper map1
> eval [blob1 GetProperty] SetColor 1.0 0.8 0.5
>
> ren1 AddActor blob1
>
>
> frame .windows
> frame .buttons
>
> vtkTkRenderWidget .windows.r1 -width 256 -height 256
> -rw renWin1
> pack .windows.r1 -side left -expand true -fill both
> -padx 1 -pady 1
>
> pack .windows .buttons -expand true -fill both
>
> BindTkRenderWidget .windows.r1
>
>
> --- Luis Ibanez <luis . ibanez at kitware . com> wrote:
>
>>Hi Shaohua
>>
>>
>> You will have to post the code of the VTK
>>pipeline
>> that you are using for visualization if you want
>>to
>> get some guidance on it.
>>
>> Without lookit at the code it is quite hard to
>>figure
>> out why you see are seeing a mesh and not a set
>>of
>> points. :-)
>>
>> Your attached program only contains the ITK code
>> related to the generation of the sparse points.
>>
>>---
>>
>> Why do you want to visualize the spare points as
>>an image ?
>>
>> You probably will get better performance by
>>saving
>> the coordinates of the spare points and loading
>>them in a
>>
>> vtkPolyData
>>
>>
>
> http://www . vtk . org/doc/nightly/html/classvtkPolyData . html
>
>> then pass them to a Glyp filter
>>
>>
>
> http://www . vtk . org/doc/nightly/html/classvtkGlyph3D . html
>
>>
>>
>>Some lateral advice:
>>
>> in lines 177 to 190 you are initializing the
>>image
>> to a value using three nested for-loops and
>>SetPixel().
>> This is very, very inefficient. You can simple
>>invoke
>>
>> image->FillBuffer( value );
>>
>> or,
>> use an ImageRegioniterator and a single while
>>loop.
>> (FillBuffer will be faster anyways).
>>
>>
>>
>>
>> You will get a better interface to VTK if you
>> save the image in VTK format instead of RAW.
>>
>> You can save in VTK format by simply using the
>> extension ".vtk" in the filename. You don't
>> even need to explicitly instantiate a
>>VTKImageIO
>> class.
>>
>>
>>
>>
>>
>>Regards,
>>
>>
>>
>> Luis
>>
>
>
>
>
> __________________________________
> Do you Yahoo!?
> The New Yahoo! Shopping - with improved product search
> http://shopping . yahoo . com
>