Flavien Bridault
RMLL 2015 - Beauvais, Wednesday, 8th 2015
Thanks to the 3D segmentation, we can help the surgeon to analyse a patient pathology. We worked on tools that help to plan the surgery. This activity has led to create a start-up called Visible Patient.
We also worked on medical simulators in laparoscopy. Laparoscopy is a way to perform a surgery with only small incisions in the abdomen. Surgeons interact with mechanical instruments and watch the organs through camera. Simulators help them to train without a . This activity has led to create a start-up called Digital Trainers.
Today we are focused on augmented reality. In laparoscopy, the surgeon has a very tight field of view. We superimpose informations on the video to help them during the surgery, for instance here, the location of the tumor on a liver.
Service approach example
<object type="::fwData::Image"> <service uid="myFrame" impl="DefaultFrame" type="IFrame" > <gui> <frame> <minSize width="800" height="600" /> </frame> </gui> <registry> <view uid="myVisu" /> </registry> </service> <service uid="myVisu" impl="vtkSimpleNegatoRenderer" type="IRender" /> <service uid="myReader" impl="VtkImageReader" type="IReader" > <filename path="./TutoData/patient1.vtk"/> </service> <start uid="myFrame" /> <start uid="myVisu"/> <start uid="myReader"/> <update uid="myReader"/> <!-- Read the image on filesystem --> <update uid="myVisu"/> <!-- Refresh the visu --> </object>
void DcmtkReaderSrv::update() { // Load an image using dcmtk Dcmtk::Image img; ... Image* img = this->getObject<Image>(); // Convert dcmtk image data in our format img->createImage(img, size); // Emit the signal "modified" Signal* sig = img->signal("modified"); sig->asyncEmit(); }
<object uid="imageUID" type="::fwData::Image"> ... <service uid="myVisu" impl="vtkSimpleNegatoRenderer" type="IRender" /> <service uid="myReader" impl="VtkImageReader" type="IReader" > <filename path="./TutoData/patient1.vtk"/> </service> <connect> <signal>imageUID/modified</signal> <slot>myVisu/update</slot> </connect> <start uid="myFrame" /> <start uid="myVisu"/> <start uid="myReader"/> </object>
<plugin id="ioITK" class="ioITK::Plugin"> <library name="ioITK" /> <requirement id="io" /> <requirement id="gui" /> <extension implements="::fwServices::registry::ServiceFactory"> <type>::io::IReader</type> <service>::ioITK::InrImageReaderService</service> <object>::fwData::Image</object> <desc>Inrimage Reader (ITK/Ircad)</desc> </extension> <extension implements="::fwServices::registry::ServiceFactory"> <type>::io::IWriter</type> <service>::ioITK::InrImageWriterService</service> <object>::fwData::Image</object> <desc>Inrimage Writer (ITK/Ircad)</desc> </extension> <extension implements="::fwServices::registry::ServiceFactory"> <type>::io::IWriter</type> <service>::ioITK::JpgImageWriterService</service> <object>::fwData::Image</object> <desc>Jpeg Writer (ITK)</desc> </extension> ... </plugin>
profile.xml
<profile name="TestApp" version="0.1.0"> <activate id="dataReg" version="0-1" /> <activate id="gui" version="0-1" /> <activate id="guiQt" version="0-1" /> <activate id="io" version="0-1" /> <activate id="ioVTK" version="0-1" /> <activate id="media" version="0-1" /> <activate id="visu" version="0-1" /> <activate id="visuVTK" version="0-1" /> <activate id="visuVTKQt" version="0-1" /> <activate id="TestApp" /> <activate id="appXml" version="0-1" > <param id="config" value="TestAppBase" /> <param id="parameters" value="TestAppBase" /> </activate> <start id="visuVTK" /> <start id="visuVTKQt" /> <start id="guiQt" /> <start id="appXml" /> </profile>
Services and components
Cons
Pros
hg qclone https://bitbucket.org/fw4splorg/fw4spl-patches
Type | Sources | Dependencies |
---|---|---|
Main | fw4spl | fw4spl-deps |
Extended | fw4spl-ext | fw4spl-ext-deps |
AR | fw4spl-ar | fw4spl-ar-deps |
fw4spl at gmail.com
fbridault at ircad.fr
johan.moreau at ircad.fr
Presentation made with Hovercraft
Space | Forward |
---|---|
Left, Down, Page Down | Next slide |
Right, Up, Page Up | Previous slide |
P | Open presenter console |
H | Toggle this help |