[vtkusers] Fixing vtkPolyDataToImageStencil
Dr. Roman Grothausmann
grothausmann.roman at mh-hannover.de
Tue Jan 6 03:41:51 EST 2015
Hi David,
On 05/01/15 16:00, David Gobbi wrote:
> Do the attached images match the artifacts that you see?
Yes.
> The output of vtkPolyDataToImageStencil is binary (each voxel is "on" or "off"), so
> it is impossible for it, on its own, to produce different shades of grey.
That's a good point, though I thought it only creates the stencil to pass to
vtkImageStencil which then should only return a binary image.
> What filters are you using downstream of vtkPolyDataToImageStencil?
Well, basically only vtkImageStencil and the meta-image writer see below:
def voxelizer_vol_naa(selection, scale):
""" volume voxelization not anti-aliased """
# Get selection boundaries.
(minX, maxX, minY, maxY, minZ, maxZ) = [int(x*scale) for x in
selection.GetBounds()] #convert tuple of floats to ints
(minX, maxX, minY, maxY, minZ, maxZ) = (minX-1, maxX+1, minY-1, maxY+1,
minZ-1, maxZ+1)
print_info(VERB, " Selection bounds are %s\n"%str((minX, maxX, minY, maxY,
minZ, maxZ)) ) #dimensions of the resulting image
ps1= 1.0/scale # pixel size for the stencil, make sure it's a float division!
ps2= 1.0 # pixel size for the image
## Convert a surface mesh into an image stencil that can be used to mask an
image with vtkImageStencil.
polyToStencilFilter = vtk.vtkPolyDataToImageStencil()
polyToStencilFilter.SetInputData(selection)
polyToStencilFilter.SetOutputWholeExtent(minX, maxX, minY, maxY, minZ, maxZ)
polyToStencilFilter.SetOutputSpacing(ps1, ps1, ps1)
polyToStencilFilter.SetOutputOrigin(0.0, 0.0, 0.0)
add_progress_observer(polyToStencilFilter)
polyToStencilFilter.Update()
# Create an empty (3D) image of appropriate size.
image = vtk.vtkImageData();
image.SetSpacing(ps2, ps2, ps2);
image.SetOrigin(0.0, 0.0, 0.0);
image.SetExtent(minX, maxX, minY, maxY, minZ, maxZ);
# image.SetScalarTypeToUnsignedChar();
# image.AllocateScalars(); # this causes blender to crash if not enough
space can be allocated
##see patch:
http://vtk.1045678.n5.nabble.com/Re-patch-for-turning-almost-all-VTK-errors-into-Python-exceptions-IMPROVED-td1251918.html
image.AllocateScalars(vtk.VTK_UNSIGNED_CHAR, 1) #vtk-6.x
# Mask the empty image with the image stencil.
stencil = vtk.vtkImageStencil()
stencil.SetInputData(image)
#stencil.SetStencil(polyToStencilFilter.GetOutput())
stencil.SetStencilConnection(polyToStencilFilter.GetOutputPort()) #vtk-6.x
stencil.ReverseStencilOn()
stencil.SetBackgroundValue(255)
add_progress_observer(stencil)
stencil.Update()
return stencil.GetOutput()
The result is then passed to the writer:
def write_image(image, filename):
"""Write vtk image data to file."""
aWriter = vtk.vtkMetaImageWriter()
aWriter.SetInputData(image)
aWriter.SetFileName(filename)
aWriter.SetFileDimensionality(3) #blender only knows 3D
aWriter.SetCompression(False)
add_progress_observer(aWriter)
aWriter.Write()
Am I doing something inappropriate somewhere that could cause the varying grey
values?
Many thanks for looking into this.
Roman
>
> On Mon, Jan 5, 2015 at 7:33 AM, Dr. Roman Grothausmann
> <grothausmann.roman at mh-hannover.de <mailto:grothausmann.roman at mh-hannover.de>>
> wrote:
>
> Hi David,
>
> On 05/01/15 15:20, David Gobbi wrote:
> > The .mha file that you attached is giving me an error:
> >
> > MetaImage: M_ReadElementsData: data not read completely
> > ideal = 1316134911 : actual = 87431
>
> Sorry, it was compressed with my MHA plugin for fiji which does not
> recompute CompressedDataSize because ITK happily ignores any mismatches
> except for reporting;-)
> Attached the file compressed with ITK itself (possible because the data is
> less than 4GB, see https://issues.itk.org/jira/__browse/ITK-3321
> <https://issues.itk.org/jira/browse/ITK-3321>).
>
> Just noticed: it also contains artifacts in slices 130 to 142.
>
> Many thanks for looking into this.
> Roman
>
>
> On Mon, Jan 5, 2015 at 5:55 AM, Dr. Roman Grothausmann
> <grothausmann.roman at mh-__hannover.de
> <mailto:grothausmann.roman at mh-hannover.de>
> <mailto:grothausmann.roman at mh-__hannover.de
> <mailto:grothausmann.roman at mh-hannover.de>>>
> wrote:
>
> Hi David,
>
>
> Many thanks for improving vtkPolyDataToImageStencil. I tested the
> git branch
> on 141229 in conjunction with my Voxelizer plug-in for Blender
> (http://www.midasjournal.org/____browse/publication/882
> <http://www.midasjournal.org/__browse/publication/882>
> <http://www.midasjournal.org/__browse/publication/882
> <http://www.midasjournal.org/browse/publication/882>>) and I still get some
> artifacts in the result (see first two slices of attached MHA) with
> e.g. an
> icosahedron (scale set to 100) as found in the attachment. Is that
> related
> to the bugs of vtkPolyDataToImageStencil?
>
> Kind regards,
> Roman
>
--
Dr. Roman Grothausmann
Tomographie und Digitale Bildverarbeitung
Tomography and Digital Image Analysis
Institut für Funktionelle und Angewandte Anatomie, OE 4120
Medizinische Hochschule Hannover
Carl-Neuberg-Str. 1
D-30625 Hannover
Tel. +49 511 532-9574
More information about the vtkusers
mailing list