Coder Social home page Coder Social logo

stl2nii's Introduction

STL to NIFTI file converter

This Python file will convert your STL meshes into NIFTI files. This "tool" is intended for researchers working on biomedical imaging, so the code is structured in a way that requires you to provide an input image to map the "labels" to. Please, if you've found this code useful don't forget to give it a star!

Installation

To install stl2nii, first clone this repository, and then cd to it, i.e.:

git clone https://github.com/vcasellesb/stl2nii
cd stl2nii

Then, run the following command:

pip install -e .

This will install a binary file in your environment (I recommend using conda), whereby you'll be able it to call it as stl2nii (see next section).

Usage

stl2nii -i [.stl file(s)] \
        -ref [.nii/.nii.gz file to map stl to its space (usually the image the stl comes from)] \
        -o [/path/to/desired/output/folder]

Example Usage:

Let's say I want to convert a bunch of STL meshes I've obtained by segmenting the image corresponding to patient 225 using my favourite automatic segmentation tool. These are in my Downloads folder, and I want to generate NIFTI files mapped to the original image. I'd do it like this:

stl2nii -i ~/Downloads/P225/*.stl \
        -ref data/P225/image/data_P225.nii.gz \
        -o data/P225/labels/nii

Disclosures

A few things in the code were hardcoded, and now have been hidden away with a flag. You can still activate them with the --weird_behavior flag. Namely, these were:

  • Rotating the converted stl array (see lines 100 and 133-138).
  • At the start of the .vtk -> .nii conversion, I used to set the origin of the output sitk.Image to (0, 0, 0). I've been told that this is not optimal, since obviously you wanna set the so that it matches the reference, so now the default behavior is using the reference origin. However, in my use case, the only way to successfully convert the stl meshes is to set it to (0, 0, 0). Please consider this point if the code doesn't work in your case.

If the default, not-doing-these-things behavior does not work, consider activating the aforementioned hardcoded parameters with said flag. They work for my .stl files (which I'm starting to think suck), so it might work in your case too.

stl2nii's People

Contributors

vcasellesb avatar

Stargazers

 avatar

Watchers

 avatar

stl2nii's Issues

Code Efficiency Recommendations

Thanks for your great jobs!
I found this code to be very inefficient:

for i in range(image.GetNumberOfPoints()):
image.GetPointData().GetScalars().SetTuple1(i, inval)

Maybe you can try the following code:

scalars = image.GetPointData().GetScalars()

from vtkmodules.util.numpy_support import vtk_to_numpy

scalar_array = vtk_to_numpy(scalars)

scalar_array[:] = inval

scalars.Modified()

The result is not quite right

thanks your works, i have one stl file label, want to convert .nii file. i only Modify the following code。but result is not quite。
image

Get empty result

Nice work! But when I try to use your _main_.py to convert my .stl file to .nii,the result .nii is all empty. Could you help me see what the problem is? I have sent the corresponding documents to your email, I hope you can try it in your busy schedule.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.