TriangleMeshToBinaryImageFilter In Python

itkv5
python
(Roger) #1

Hi, I’m trying to get a 3D binary image from a mesh stl file. I found an example in c++ using the TriangleMeshToBinaryImageFilter function. I was wondering if this function is available from the Python interface?
Thanks!

(Matt McCormick) #2

Hi Roger,

This patch adds Python wrapping for TriangleMeshToBinaryImageFilter:

https://github.com/InsightSoftwareConsortium/ITK/pull/516

Since you are interested in STL files, it is worth noting that Python packages for ITKIOMeshSTL were recently released. Install with:

python -m pip install itk-iomeshstl

Then, read a mesh file, e.g.:

import itk
MeshType = itk.Mesh[itk.F, 3]
reader = itk.MeshFileReader[MeshType].New()
meshIO = itk.STLMeshIO.New()
reader.SetMeshIO(meshIO)
reader.SetFileName("/path/to/mymesh.stl")
reader.Update()
mesh = reader.GetOutput()
(Roger) #3

Hi Matt, thanks for thi addition! Could you please explain to me how can I install it? usually I would just use pip
python -m pip install --upgrade --pre itk
but I am not sure if I have to install from source?

(Matt McCormick) #4

Hi Roger,

This will be available in the upcoming ITK 5.0 Release Candidate 2 – in the meantime, if you have Linux, you could try the nightly Python package builds:

python -m pip install --upgrade pip numpy
python -m pip install itk --upgrade --no-index \
  -f https://github.com/InsightSoftwareConsortium/ITKPythonPackage/releases/tag/latest
(Buaaduke) #5

I used the above code, but get the error like Segmentation fault (core dumped).

(Matt McCormick) #6

Hi @buaaduke,

Thanks for the note.

We an issue we are resolving with remote module Python packages in ITK 5.0 RC 2 that causes this segmentation fault. We aim to have these resolved with the 5.0.0 release.

The itk-iomeshstl package will encounter this issue, but the itk.TriangleMeshToBinaryImageFilter should be available in the 5.0 RC 2 packages. It is possible to write the result with one of the other mesh file formats supported by ITK in the meantime.

CC: @fbudin

(Buaaduke) #7

Hi @matt.mccormick,

Thank you for your reply. I also tried to use ITKIOMeshOBJ to load the mesh file (.obj), code as follows,

import itk
meshType = itk.Mesh[itk.F, 3]
meshReader = itk.MeshFileReader[meshType].New()
meshIO = itk.OBJMeshIO.New()
meshReader.SetMeshIO(meshIO)
meshReader.SetFileName(‘bunny.obj’)
meshReader.Update()

but got error like ‘Bus error (core dumped)’. I used itk-5.0rc2.

(Matt McCormick) #8

@buaaduke thanks for the follow-up - this issue was created to track progress on the updated reading.

(Francois Budin) #9

@buaaduke: I tried to reproduce your error using ITK Python v5.0rc2 and it actually worked on my machine with the model that I provided. Would you be able to share the model that you used that creates the error?

(Buaaduke) #10

ok, see the attachment.
bunny.obj (386.3 KB)

1 Like
(Francois Budin) #11

I was able to reproduce the error on my machine. Thanks for sharing the data.

(Francois Budin) #12

For some reason this objfile has more vertex normals (4968) than vertices (2503) which makes ITK crash. I fixed ITK so it does not crash, but I don’t know what the correct behavior should be: Error message, ignore,… My Work-In-Progress pull request is here.

(Dženan Zukić) #13

Is the number of vertex normals equal to number of faces, or triple number of faces?