Their are 2 F.A.S.T.Pulmonary example
applications (shown below).
The first one demonstrates a more typical UI expereince for
an
Advanced Visualization application. The Clinical use case for this app
would be to segment out multiple structures from a chest CT scan to
answer a number of clinical questions about low dose lung nodule
screening. This app will demonstrate a number of rendering techniques:
Thin, Thick MIP, Thick Faded MIP
Cutplanes for subcube visualization
Oblique 2D Views
as well as how
F.A.S.T.
Interactive Segmentation can used to segment out :
Lung Nodules
Bronchial tree
Pulmonary Vessel Tree (using a workflow built around Interactive Segmentation)
The second one demonstrates the use of 2 studies
(current and prior). Beyond techniques demonstrated in the first app,
the second app also shows
Linking scrolling for two studies
Combining measurements from two studies to calculate lesion changes.
User Interface for Lung App
This application workflow requires
no global controls down the left hand side (viewport specific controls
are on each viewport)
On the bottom is the mouse legend which depicts the current
mouse actions
per viewport (note that ctrl, shift and alt modifiers perform different
actions,
simply press the appropriate key and the mouse legend changed to show
you what
the action will be with that modifier key). All the basic operations
are available,
rotate, scroll, pan, zoom, etc.
The Nodule Detect Tab of the application consists of 4
viewports
Left – Axial image very large to use for search and detectoin of
nodules. The bottun on the viewoport will change betweeen Thin, 5mm
Thick MIP and 5mm Thick Faded MIP views to search for nodules. Double
clicking on any detected nodules automatically takes you to the Nodule
Segment Tab centered at the click point.
Top
right – small Sagittal image for reference
Center right – small Coronal image for reference
Bottom
right – small 3D image showing air borders (no segmentation) for reference
The Nodule Segment Tab of the application consists of 2
viewports
Left – Oblique MPR centered on the Nodule Detect Click
Point. Rotating spins this oblique viewport around the vertical
axis. Segmenting of the nodule is easiest achieved from this view.
Alt-left click and start by moving the mouse up and to the right, to
segment more of hte nodule. From there adjust the mouse to get the
object you wish (vertical movemetns adjusts the size of the growable
object, horizintal movement expands or decreases the density reange of
what wil be segmented) before letting the mouse button up.
Right – 3D SubCube which will rotate about the Nodule Detect
Click Point. It show the Interactive Segmentation and allows Free Hand
Cut to clean up segmentation errors. Undo and Clear All buttons are
present. Also a button to save the current segmentatoin info as a
"finding" for the Report Tab
The Bronchial Segment Tab of the application consists of 2
viewports
Left – Sagittal image for selecting start points to segment.
Just like segmenting a nodule, select a point (near the trachea
bifurcation into the left and right bronchial trees) and move the mouse
up and to the right to begin segmenting. You will notice that if yo
move to far to the right, the segmentation "leaks" into the lung tissue
from the bronchial tree. Also if growing too "large" it may also leak,
so finding the optimal point for the two dimensional search (that is
different for each patient) is a difficult time consuming task made
simple, accurate and fast by using interactive segmentation
Right – 3D View with resulting segmentation
The Pulmonary Vessel Segment Tab of the application consistsUpdated code comments and cleaned up dead code in Cardiac apps. of 2
viewports
Segmenting the pulmonary vessels is a challenge. Using a simple grow
with a HU range the segmentation leaks into the heart tissue since the
density of the blood in the pulmanry vessel tree is exactly the same as
the blood in the heart. So we created a workflow here to get just the
pulmonary vessels. First the lung fields are segmented using simple HU
Range Interactive Segmentation. Next a series of dilate and erode
operations are used to find the blood density ranges left inside the
lung fields and finally remove the tissue around the lung fields where
it touches the chest wall.
Left – Sagittal image for selecting start points to segment the lung fields. Just like the prior two segmentations.
Right – 3D View with resulting segmentation. Toggle the
first "on viewport" button to select pulmonary vessels from the lung
fields segmented in the first step (after selecting that mode, click on
the lung field to process). After this there are 4 new on viewport
buttons. These allow you adjust the number of "open" and "close"
operations that are performed (the default setting perform well on most
cases, but for some patients you need to adjust these) click on the 5th
button to finish the pulmonary segmentation and return to normal
viewport control.
User Interface for Current Prior Lung App
The Current Prior Tab of the application consists of 2
viewports
Left – Current Axial image
Right – Prior Axial image
The images can be locked to scroll/pan/zoom synchronously.
The Dual Segment Tab is a 2x2 layout which matches the Nodule Segment
Tab from the first App but repeated for both the current and Prior
cases. And with the same controls.
Source code and interesting coding features in this example
Some
core utilities are grabbed from the common
directory
Segmentation
mouse adapters are grabbed from the
common directory, the source code exists there for you to see an
example of how
mouse motions can be utilized to perform interactive segmentation.
All
the viewports are contained in “widget” HTML div
elements that also utilize controls (buttons) right on the viewports.
You can see
how we used those, but you can create any controls any way you like.The
viewports start out hidden and are made visible in the code depending
on which
tab is selected.
lung.js
window.onload()
kicks off the processing
Simpler
example apps discuss viewport creation,
but here segmentation structures are created. In this example since
arterial phase
and venous phase cases are possible, two segmentation context
structures could
be created
The
segEngines array is used to had the mouse adaptors
the list of viewports that must be updated when segmentation changes,
in this
case all 4 viewports.
The
segmentationContext utility function makeColorLabeledTFsfromWindowLevel
is used to create the upper Render Ranges for the segmented labels.
g_processingSegOp
is a global flag that keeps
more mouse events from kicking off multiple segmentation operations
until the
prior operation is done (including rendering). It is decremented once
rendering
for any viewport is completed and incremented at the beginning of a seg
operation to the number of viewports that will display the results of
this segmentation.
Where other examples use SetSegLabel (from the left hand
control radiobuttons)
to setup different params for each seg type, here it is done in the
workflow as you step from tab to tab in the Display functions
2/3DViewport.js
This
is a wrapper around HTMLViewport class from
the SDK.
You
can see how to change actions for mouse clicks
You
can see how to draw overlays (e.g. text)
over the images
The 2DSegViewport is different in that this one displays seg label maps on the 2D views also were the other does not.
OnViewportControls.js
Beyond just the buttons, the Pulmonary Vessel workflow described above is implemented here in the OVCNavigate* functions
And the Current/Prior Linking is enabeled in OVC_ToggleLink
To run the example, in the local URL localhost:8088/apps/lung or localhost:8088/apps/CurrentPriorLung,
change “localhost”
to your server IP address, and enter the URL into your browser.
F.A.S.T. Pulmonary
Their are 2 F.A.S.T. Pulmonary example applications (shown below).
The first one demonstrates a more typical UI expereince for an Advanced Visualization application. The Clinical use case for this app would be to segment out multiple structures from a chest CT scan to answer a number of clinical questions about low dose lung nodule screening. This app will demonstrate a number of rendering techniques:
as well as how F.A.S.T. Interactive Segmentation can used to segment out :
The second one demonstrates the use of 2 studies (current and prior). Beyond techniques demonstrated in the first app, the second app also shows
User Interface for Lung App
This application workflow requires no global controls down the left hand side (viewport specific controls are on each viewport)
On the bottom is the mouse legend which depicts the current mouse actions per viewport (note that ctrl, shift and alt modifiers perform different actions, simply press the appropriate key and the mouse legend changed to show you what the action will be with that modifier key). All the basic operations are available, rotate, scroll, pan, zoom, etc.The Nodule Detect Tab of the application consists of 4 viewports
The Nodule Segment Tab of the application consists of 2 viewports
The Bronchial Segment Tab of the application consists of 2 viewports
The Pulmonary Vessel Segment Tab of the application consistsUpdated code comments and cleaned up dead code in Cardiac apps. of 2 viewports
Segmenting the pulmonary vessels is a challenge. Using a simple grow with a HU range the segmentation leaks into the heart tissue since the density of the blood in the pulmanry vessel tree is exactly the same as the blood in the heart. So we created a workflow here to get just the pulmonary vessels. First the lung fields are segmented using simple HU Range Interactive Segmentation. Next a series of dilate and erode operations are used to find the blood density ranges left inside the lung fields and finally remove the tissue around the lung fields where it touches the chest wall.
User Interface for Current Prior Lung App
The Current Prior Tab of the application consists of 2 viewports
The Dual Segment Tab is a 2x2 layout which matches the Nodule Segment Tab from the first App but repeated for both the current and Prior cases. And with the same controls.
Source code and interesting coding features in this example
View the source /foviaserver/public/apps/lung/lung.js or /foviaserver/public/apps/CurrentPriorLung/CurrentPriorLung.js
To run the example, in the local URL localhost:8088/apps/lung or localhost:8088/apps/CurrentPriorLung, change “localhost” to your server IP address, and enter the URL into your browser.