FW4SPL 16.1 released

We are glad to announce the last major release 16.1 of FW4SPL !!!

We have been a bit silent on these pages during several months but FW4SPL development has never stopped. The last post was about the release 12.0.1, so I’ll try so sum up the important changes in the previous releases.

FW4SPL 13.0

Fixes from Debian

We imported existing patches from our debian package. This help us to follow more standard practices.

Regarding this, we made a major change in the way we manage our bundles location. We can now specify two directories to specify the paths to the libraries and the resources. This way, we can install bundles libraries in lib/ and resources in share as it is recommended on gnu based platforms.

C++11 migration

This is a big pass we started months ago to replace the usage boost in favor of standard C++11. We already made several passes, this is just an another one. Of course it concerns all repositories and MR are proposed everywhere.

Here are the main replacements:

  • ::boost::threadstd::thread

  • ::boost::functionstd::function

  • ::boost::*futurestd::*future

  • ::boost::packaged_taskstd::packaged_task

  • ::boost::refstd::ref

  • ::boost::bindstd::bind

  • ::boost::chronostd::chrono

  • boost/cstdint/*<cstdint>

  • boost/type_traits/*<type_traits>

Exception handling on services slots (start(), stop(), update,…​) has been improved. Now it is possible to catch an exception when a service fails to start for instance, and even better the service is in a valid stopped state and can be started again. This could help us for instance for network services when the connection fails, which avoid to code a specific internal state machine.

Transfer function selection refactor

The TFSelection composite has been removed from the services that display and edit transfer functions. These services now only use the current TF making everything much simpler.

DICOM 3D

  • Integrated a contribution from Visible Patient to support surface segmentations and anonymization

  • Add possibility to export DICOM 3D data from VRRender, using a new service SSurfaceSegmentationWriter.

  • Improve DICOM anonymizer (Tags are now externalized in SrcLib/fwGdcmIO/rc/tags.csv)

SGrabberProxy

This service is a proxy between the application and video grabber implementation. This allows some genericity with regards to the grabber. Its configuration and its behavior are similar to IOSelector, but for frame grabbers. However, please note that this is a first implementation and it does not cover yet all of our use cases.

OpenIGTL services refactor

  • Renamed the services to clarify the role of each ioIGTL service

    • SOpenIGTLinkListener → SClientListener

    • SOpenIGTLinkSender → SServerListener

  • Created the missing services and add the possibility to send/receive multiple objects:

    • SClientSender

    • SServerSender

  • Removed echoEdSimu bundle and associated components

FW4SPL 13.1

IActionSrv

Added signals to communicate action state:

  • Emit enabled/disabled signals when the action is executable/unexecutable

  • Emit checked/unchecked signals when the action is activated/deactivated

PointList helper

The functions are:

  • computeDistance between two points lists

  • transform a list of points by a given transform

  • associate two point lists together

Changes in fw4spl-ogre

We introduced a new adaptor SPointList to display ::fwData::PointList with Ogre3D.

We also committed some fixes:

  • Quad-based meshes with vertex colors are now displayed properly (colors and normals were inverted)

  • SVideo now reacts to calibration changes

  • SVideo display when using a calibration is fixed (for instance in ARBreathingExt)

  • SCamera no longer crashes if a non calibrated camera is given

  • SRender can now use transparency on any layer

  • SMesh implements "Hide all" feature of the organ manager

FW4SPL 14.0

RGBD video grabber

RGBD support has been added to SGrabberProxy. Also, new RGBD grabbers can be also used as simple RGB grabbers, when you want to use only the color RGB sensor.

ARLcore

Our legacy mathematical library has been removed from fw4spl-ar and support is discontinued. In the last months, we manage to replace its usage mostly by OpenCV and so there was no reason to keep it.

FW4SPL 15.0

Timeouts in unit-tests

When removing the global usage of ::boost::thread in our code, we misreplaced some code that check that a threaded function has terminated. This code was designed to timeout if a thread failed to join. The new code first wait the required time, then join. Thus the function could never timeout and on top of that it slowed down all the tests using this function since it always waited. This was rewritten using std::future and thus a whole utility class is now useless and has been removed.

RGBD emulation in SGrabberProxy

We made SGrabberProxy smarter than ever. When requesting a RGBD grabber, it can propose you to use two RGB grabbers to emulate a single RGBD grabber. This allows you to have a single RGBD grabber in your application, thus you no longer have to keep a grabber for live camera and two grabbers (most often OpenCV) for pre-recorded sequences.

PnPSolverFor2d3dRegistration

Try out this new PnP Solver for 2d-3d Registration !

Point clouds picking in Ogre

It is now possible to pick point clouds with mouse interactions. The overall ray-casting code has been improved as well.

FW4SPL 16.0

Improve version selection when saving a data

Saving a patient folder could gave you headache because of the data version selection window, which proposed you all the possible versions, unsorted. Now by default you can only select the last version of each repository. If you want the whole list, you may click on the "Advanced" button and get the usual list (but at least this time it is sorted ;-) ).

DCMTK cleaning

Useless DCMTK services, libs and an utility using DicomSeries in fw4spl:

  • removed ioDcmtk::SDicomSeriesDBReader and associated class in fwDcmtkIO

  • removed ioDcmtk::SDicomTagSeriesDBReader and associated class in fwDcmtkIO

  • removed weird DicomMetadatJsonGenerator utility

Split some configurations

We split the configuration bundles according to the dependencies: - dataManagerConfig: contains configuration for ImageManager and OrganManager, it does not depend on VTK

  • qtSceneConfig: contains the configuration for the TF widget, it depends on scene2D

  • imageConfig: depends on scene2D and VTK, it allows to use the managers and TF configs in applications that does not use VTK.

MacOs support on fw4spl-ogre

We fixed the most annoying bugs on MacOs:

  • Meshes containing quads are now displayed

  • Application no longer crashes when a SCamera has a calibration input

  • Flat shading no longer makes an application crashing

  • Transparency technique can now be switched at runtime without any rendering artifact

  • Application with both Ogre and VTK should work well

  • Volume rendering display is ok on Retina screens

FW4SPL 16.1

DicomWeb support

Add new Library fwNetworkIO:

  • Update the code of the library.

  • Add Series helper to the library.

  • Add unit tests to the library.

Add new bundle ioDicomWeb that:

  • Retrieve from Orthanc if a PatientName or a Date range is specified.

  • Pull the DICOM files from the Orthanc PACS.

  • Pull an instance of a DICOM (for preview purpose with a slider).

IService::getObject deprecated

getObject() is still supported until fw4spl 20.0 but a [deprecated] log is raised. Please fix your services/applications as soon as possible.

Transfer function GPU upload refactor

This a refactor about the way we upload the transfer function to the GPU in fw4spl-ogre. So far, we used to employ a 256x256 texture. We consider that it covers a range of intensity values from -32768 to +32767. This required no offset computation in the fragment shader and we could directly fetch the TF with the intensity value. However this solution is rather poor when you have a small range of intensities. Indeed in this case discretization effects may appear, and we can’t use hardware bilinear filtering because we would average with the intensities of the upper or lower row.

We propose here a simpler solution. We use a 1D texture, with the maximum range the graphics hardware and the driver allows us. On recent hardware, it is 16384 pixels. Since we can then benefit from hardware bilinear interpolation filtering, this seems sufficient. And eventually, there is not extra overhead in the shader, we just need a special care to pass the tf window in all fragment shaders using a TF.

Text support in fw4spl-ogre

Implements text rendering :

  • Adds a fwRenderOgre::Text that can be attached to scene nodes and follow a 3D object.

  • Adds a couple of helper functions for font loading.

  • Refactors overlay configuration in ::fwRenderOgre::SRender, overlay scripts can be directly set instead of enabling the hard-coded LogoOverlay script.

  • Adds axis labels to the SAxis adaptor as an example.

Third-party libraries

As usual we try to keep up-to-date with the latest open-source software. FW4SPL 16.1.0 notably contains the following updates:

  • Qt 5.9.4

  • OpenIGTLink 2.1

  • ITK 4.13

  • Ogre3D 1.10.11

  • GDCM 2.8.4

  • DCMTK

  • OpenCV 3.4

comments powered by Disqus