<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2016-04-12 15:56 GMT+02:00 Elvis Stansvik <span dir="ltr"><<a href="mailto:elvis.stansvik@orexplore.com" target="_blank">elvis.stansvik@orexplore.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div>Hi all,<br><br></div>Following Berk Geveci's great blog post from 2014 on writing a custom HDF5 reader in Python [1], I tried to take his code and modify it to load HDF5 files where the densities are float32 and vary between 0 and 64.<br><br></div>The only change I did to his reader was to modify RequestData to scale the loaded data and convert it to uint16, like this:<br><br>    data = (data * 1023).astype(uint16)<br><br></div><div>(should get me roughly in the range 0-65535).<br><br></div><div>I then generated a test HDF5 file containing a cylindrical volume like this:<br><br>def create_cylinder_file(filename, height, radius):<br>    """Create a cylindrical volume and save it in test.hdf5.<br><br>    The densities are saved as float32 and will vary sinusoidically<br>    from 0 to 64 along the cylinder height.<br><br>    The result is saved in the "test" dataset in the output file.<br>    """<br>    z_values = 32 + 32 * sin(linspace(0, 2*pi, height))<br>    diameter = radius * 2<br>    data = zeros(shape=(diameter, diameter, height), dtype=float32)<br><br>    for x in range(diameter):<br>        for y in range(diameter):<br>            if (x - radius)**2 + (y - radius)**2 <= radius**2:<br>                data[x, y, :] = z_values<br><br>    # Write array to HDF5 file.<br>    with h5py.File(filename, 'w') as file_:<br>        data_set = file_.create_dataset(<br>            name='test',<br>            shape=data.shape,<br>            dtype=data.dtype,<br>            data=data<br>        )<br><br></div><div>I then test it all out using a vtkVolumeRayCastMapper based pipeline like this:<br><br>    reader = HDF5Source()<br>    reader.SetFileName('test.hdf5')<br><br>    rayCastFunction = vtk.vtkVolumeRayCastCompositeFunction()<br><br>    mapper = vtk.vtkVolumeRayCastMapper()<br>    mapper.SetVolumeRayCastFunction(rayCastFunction)<br>    mapper.SetInputConnection(reader.GetOutputPort())<br><br>    colorTransferFunction = vtk.vtkColorTransferFunction()<br>    colorTransferFunction.AddRGBPoint(0, 0, 0, 0)     # Black<br>    colorTransferFunction.AddRGBPoint(20000, 1, 0, 0) # Red<br>    colorTransferFunction.AddRGBPoint(40000, 0, 1, 0) # Green<br>    colorTransferFunction.AddRGBPoint(65535, 0, 0, 1) # Blue<br><br>    opacityTransferFunction = vtk.vtkPiecewiseFunction()<br>    opacityTransferFunction.AddPoint(0, 0)     # Transparent<br>    opacityTransferFunction.AddPoint(65535, 1) # Opaque<br><br>    volumeProperty = vtk.vtkVolumeProperty()<br>    volumeProperty.SetColor(colorTransferFunction)<br>    volumeProperty.SetScalarOpacity(opacityTransferFunction)<br>    volumeProperty.ShadeOff()<br>    volumeProperty.SetInterpolationTypeToLinear()<br><br>    volume = vtk.vtkVolume()<br>    volume.SetMapper(mapper)<br>    volume.SetProperty(volumeProperty)<br><br>    renderer = vtk.vtkRenderer()<br>    renderer.AddVolume(volume)<br>    renderer.SetBackground(.85, .84, .83)<br><br>    renderWindow = vtk.vtkRenderWindow()<br>    renderWindow.AddRenderer(renderer)<br>    renderWindow.SetSize(600, 600)<br><br>    interactor = vtk.vtkRenderWindowInteractor()<br>    interactor.SetRenderWindow(renderWindow)<br>    interactor.Initialize()<br><br>    renderWindow.Render()<br>    interactor.Start()<br></div><div><br></div><div>I'm attaching a main.py which contains the full code, including the HDFSource reader with my slight modification, and a screenshot showing the result.<br><br></div><div>Noticy how there's some strange artifacts in the denser (greener, bluer) parts of the cylinder. Anyone know where these artifacts may come from? It's entirely possible that it has nothing to with the custom reader, but something with my pipeline..?<br></div><div><div><br>Very grateful for any ideas!<br></div></div></div></blockquote><div><br></div><div>I forgot to say: This is with VTK 6.2 from Ubuntu packages.<br><br></div><div>Elvis<br> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><br>Cheers,<br>Elvis<br><br>[1] <a href="https://blog.kitware.com/developing-hdf5-readers-using-vtkpythonalgorithm/" target="_blank">https://blog.kitware.com/developing-hdf5-readers-using-vtkpythonalgorithm/</a><br></div></div></div>
</blockquote></div><br></div></div>