[vtkusers] Copy image data into vtkImageData from a textfile

Lizeth Castellanos castellanoslizan at gmail.com
Wed Jul 25 11:14:46 EDT 2018


Thanks for your answers!

For the case *2)* I have one more question: How can I add the scalar values
from the intensity ('Field 3') to the data?

I have added those two lines to your code:

scalar = probeFilter.GetOutput().GetPointData().GetArray('Field 3')
probeFilter.GetOutput().GetPointData().SetScalars(scalar)

But when I render the volume, nothing is displayed in the render window.

Thanks

Lizeth





On Tue, Jul 24, 2018 at 11:29 PM, kenichiro yoshimi <rccm.kyoshimi at gmail.com
> wrote:

> Hi,
>
> 1)  You need to specify PYTHON_INCLUDE_DIR and PYTHON_LIBRARY to suit
> your own system in the 'advanced options' in cmake.
>
> PYTHON_INCLUDE_DIR will be the name of the directory containing the
> Python.h:
>  e.g. /usr/include/python2.7
> PYTHON_LIBRARY will be the full path to libpython2.7.so (or.a):
>  e.g. /usr/lib64/libpython2.7.so
>
> 2) For example, if you apply vtkProbeFilter to sample.csv in the
> previous my post, script is something like below.
>
> ---
> import vtk
>
>
> def main():
>
>     reader = vtk.vtkDelimitedTextReader()
>     reader.SetFileName('sample.csv')
>     reader.DetectNumericColumnsOn()
>     reader.SetFieldDelimiterCharacters(' ')
>     reader.MergeConsecutiveDelimitersOn()
>
>     tableToPoints = vtk.vtkTableToPolyData()
>     tableToPoints.SetInputConnection(reader.GetOutputPort())
>     tableToPoints.SetXColumn('Field 0')
>     tableToPoints.SetYColumn('Field 1')
>     tableToPoints.SetZColumn('Field 2')
>
>     imageData = vtk.vtkImageData()
>     imageData.SetDimensions(3, 3, 3)
>     imageData.SetOrigin(0.0, 0.0, 0.0)
>     imageData.SetSpacing(1.0, 1.0, 1.0)
>
>     probeFilter = vtk.vtkProbeFilter()
>     probeFilter.SetSourceConnection(tableToPoints.GetOutputPort())
>     probeFilter.SetInputData(imageData)
>     probeFilter.Update()
>
>     writer = vtk.vtkXMLImageDataWriter()
>     writer.SetInputData(probeFilter.GetOutput())
>     writer.SetFileName('out.vti')
>     writer.Write()
>
>
> if __name__ == '__main__':
>     main()
> ---
>
> For your reference.
> 2018年7月25日(水) 4:10 Lizeth Castellanos <castellanoslizan at gmail.com>:
> >
> > Thanks for your help Kenichiro Yoshimi
> >
> > I was able to reproduce some part of your code. However, I encountered
> new issues.
> >
> > 1)I have all my project under VTK 5.10.1 with python 2.7.12 in linux. I
> got this error: 'module' object has no attribute 'vtkResampleToImage'.
> >  So I guess that the vtkResampleToImage class is not avaliable for my
> VTK version.
> >  I tried to build a newer VTK version but I didn't get success. I tried
> with VTK 7.1.1 and I got  errors related to the python libs Could NOT find
> PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS).
> >
> > 2) I read that  vtkResampleToImage  samples a dataset on a uniform grid
> and it internally uses vtkProbeFilter to do the probing. So,  Is there any
> way to use vtkProbeFilter instead of vtkResampleToImage?
> > I have tested some examples from vtkProbeFilter  but I am confused about
> how use it  in my specific problem.
> >
> > Thanks,
> >
> > Lizeth
> >
> > On Thu, Jul 19, 2018 at 12:38 AM, kenichiro yoshimi <
> rccm.kyoshimi at gmail.com> wrote:
> >>
> >> Hi Lizeth,
> >>
> >> Because vtkDelimitedTextReader outputs a vtkTable, you firstly need to
> >> convert it to a vtkPolyData using vtkTableToPolyData. And then you can
> >> use vtkResampleToImage to map the polyData to vtkImageData.
> >>
> >> ---sample.csv---
> >> 0 0 0 60.7635
> >> 1 0 0 107.555
> >> 2 0 0 80.5241
> >> 0 1 0 85.9694
> >> 1 1 0 156.706
> >> 2 1 0 105.73
> >> 0 2 0 37.3531
> >> 1 2 0 84.1445
> >> 2 2 0 57.1137
> >> 0 0 1 100.634
> >> 1 0 1 171.37
> >> 2 0 1 120.395
> >> 0 1 1 149.785
> >> 1 1 1 260
> >> 2 1 1 169.546
> >> 0 2 1 77.2238
> >> 1 2 1 147.96
> >> 2 2 1 96.9844
> >> 0 0 2 60.7635
> >> 1 0 2 107.555
> >> 2 0 2 80.5241
> >> 0 1 2 85.9694
> >> 1 1 2 156.706
> >> 2 1 2 105.73
> >> 0 2 2 37.3531
> >> 1 2 2 84.1445
> >> 2 2 2 57.1137
> >>
> >> ---
> >> import vtk
> >>
> >>
> >> def main():
> >>     colors = vtk.vtkNamedColors()
> >>
> >>     reader = vtk.vtkDelimitedTextReader()
> >>     reader.SetFileName('sample.csv')
> >>     reader.DetectNumericColumnsOn()
> >>     reader.SetFieldDelimiterCharacters(' ')
> >>     reader.MergeConsecutiveDelimitersOn()
> >>
> >>     tableToPoints = vtk.vtkTableToPolyData()
> >>     tableToPoints.SetInputConnection(reader.GetOutputPort())
> >>     tableToPoints.SetXColumn('Field 0')
> >>     tableToPoints.SetYColumn('Field 1')
> >>     tableToPoints.SetZColumn('Field 2')
> >>
> >>     resample = vtk.vtkResampleToImage()
> >>     resample.SetInputConnection(tableToPoints.GetOutputPort())
> >>     resample.SetSamplingDimensions(3, 3, 3)
> >>     resample.Update()
> >>
> >>     scalar = resample.GetOutput().GetPointData().GetArray('Field 3')
> >>     resample.GetOutput().GetPointData().SetScalars(scalar)
> >>
> >>     writer = vtk.vtkMetaImageWriter()
> >>     writer.SetInputData(resample.GetOutput())
> >>     writer.SetFileName('out.mha')
> >>     writer.SetCompression(True)
> >>     writer.Write()
> >>
> >>
> >> if __name__ == '__main__':
> >>     main()
> >> ---
> >>
> >> Best
> >> 2018年7月19日(木) 3:43 Lizeth Castellanos <castellanoslizan at gmail.com>:
> >> >
> >> > Hi!
> >> >
> >> > I'd like to copy image data from a textfile (csv) into vtkImageData.
> >> > The textfile have voxel values for x,y,z  and image intensity. I
> already have read the textfile into VTK with the vtkDelimitedTextReader
> class:
> >> >
> >> > Table loaded from CSV file:
> >> > +-----------+-----------+-----------+------------+
> >> > | Field 0   | Field 1   | Field 2   | Field 3    |
> >> > +-----------+-----------+-----------+------------+
> >> > | 510       | 291       | 0             | 32           |
> >> > | 511       | 291       | 0             | 128         |
> >> > | 510       | 292       | 0             | 104         |
> >> > | 511       | 292       | 0             | 104         |
> >> > | 510       | 293       | 0             | 40           |
> >> > | 511       | 293       | 0             | 240         |
> >> > | 510       | 294       | 0             | 104         |
> >> > | 511       | 294       | 0             | 96           |
> >> > | 506       | 295       | 0             | 64           |
> >> > | 507       | 295       | 0             | 16           |
> >> >  .....
> >> >  .....
> >> > The file is an exported segmented dataset.
> >> >
> >> > I am following the tips from this similar question
> http://vtk.1045678.n5.nabble.com/importing-image-data-into-V
> TK-from-textfile-mimics-td1243332.html
> >> > I have created an appropriate  vtkimagedata (volume):
> >> >
> >> > imageData = vtk.vtkImageData()
> >> > imageData.SetDimensions(512, 512, 192)
> >> > imageData.SetOrigin(0.0, 0.0, 0.0)
> >> > imageData.SetSpacing(1, 1, 1)
> >> > imageData.SetNumberOfScalarComponents(1)
> >> > imageData.Update()
> >> >
> >> > However I don't know how to copy the data loaded from
> vtkDelimitedTextReader into vtkImageData. How do I copy the x,y,z voxel
> values into vtkImageData? How do I copy the intensity valuesVtkImageData?
> >> >
> >> > Any help provided for this would be greatly appreciated!
> >> >
> >> > Lizeth
> >> >
> >> >
> >> > _______________________________________________
> >> > Powered by www.kitware.com
> >> >
> >> > Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
> >> >
> >> > Please keep messages on-topic and check the VTK FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
> >> >
> >> > Search the list archives at: http://markmail.org/search/?q=vtkusers
> >> >
> >> > Follow this link to subscribe/unsubscribe:
> >> > https://public.kitware.com/mailman/listinfo/vtkusers
> >
> >
> >
> >
> > --
> >
> >
> >
>



--
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://public.kitware.com/pipermail/vtkusers/attachments/20180725/b24f4233/attachment.html>


More information about the vtkusers mailing list