Search This Blog

Friday, May 6, 2016

Added the  "Integer Volume - to - Real Volume" conversion function.  Moved  both conversion functions under the same submenu  under  MainMenu>Volume

Wednesday, May 4, 2016

FireVoxel Build 214 is released.
MagTrace, Raster Paintbrush SmartZoom:  If the image is fully visible on the current zoom, there will be no action by the SmartZoom adjusting the document window.
Raster Paintbrush:  implemented SmartZoom for automatically shifting Zoom Window.
Enabled Ctrl+\Ctrl- zooming while inside  the MagTrace tool.
MagTrace: Implemented "Smart Zoom" feature.  When the User moves and clicks the Snap cursor, the viewing window position shifts so that its center matches the position of the cursor.

Tuesday, May 3, 2016

Enabled Acceletators
Ctrl+   :   Zoom In
Ctrl-   :    Zoom Out
Added the "Forward only" option for MagTrace so the new snapping position is only forward with the respect to the vector between the previous fixed point and the current user specified position.
Enabled the ViewFilter on the Parametric map image type volume.

Monday, May 2, 2016

Polyline\Spline control point hand shape: changed to semitransparent circle:
FireVoxel  Build 212 is released.
Implemented the FVX-file format Load\Save  incorporating the Splines\Polylines.

Sunday, May 1, 2016

Polygon control points: change the style to the semitransparent filled rectangle.

This also solves the problem when the contour is copied,
resnapped. In previous version two points were snapped to the same coordinates, so the control point were becoming invisible.

Saturday, April 30, 2016

Spline\Polyline entities: fixed the defect when the control point is selected, moved outside the document area and becomes unreachable.
Added the menu item   MainMenu>Trace>MagTrace
Implemented a support function to output the Edges used by MagTrace for the current slice.
Currently selected MagTrace parameters are used so it is a 1-click operation.
Corrected the "HitTest" on mouse click over the Spline entity.
Corrected the defect for the HitTest mouse click on the polyline.
Modified the ToolTip for the "Width\Level" button of the Main toolbar.

Thursday, April 28, 2016

Added   "MainMenu>Trace>Application specific settings" ability for {Femur,Hippocampus} applications.

Wednesday, April 27, 2016

MagTrace tool: implemented 2 new UI-level functions
a) Snap Selection to Image
b) Copy from adjacent slice and Snap to image.
MagTrace on Hippocampus.

First experiment:  To evaluate the quality of snapping, I used the supplied HC Roi as the guidance.  I clicked precisely on the boundary of the HC-ROI and let the software to adjust the position.
Attached screenshot shows the snapped points, without any manual further corrections.
Note: the snapping was performed on x3 upsampled resolution (EMD\Radial\2.2).



MagTrace:  Restart tracing> fixed the Bug when user had polyline selected on a different slice from currently  MagTrace operational slice.
FireVoxel Build 211 is released.

1.  First version and user interface for the MagTrace semi-automatic tracing functionality.

Tuesday, April 26, 2016

MagTrace tool:  implemented functionality to resume the tracing of the existing Spline
a) Select the desired spline
b) Press MagTrace button.  Operation will resume from the last point.
Magtrace tool:  prevented the "Double entry" error when user presses snap button before the previous snap operation is finished.
MagTrace tool:  fixed crash when the user clicks within the document window, but not on the image.
PolyTool\MagTrace tool:  don't perform any action if the mouse cursor is out of client are.
(affected:  MouseMove and MouseLButtonDown)

Monday, April 25, 2016

MagTrace: implemented various support function for Splines:
a) UpdateRectangle calculation
b) Spline contour hit test.

Friday, April 22, 2016

Implemented the Spline\Polyline rasterization function.
Several contours and\or holes are allowed.
Spline - polygons could be mixed.
Internally this supports 2.5D polygons (i.e. 2D+SliceIndex).

Sunday, April 17, 2016

Created new C++:CDrawTool  "Magnetic Trace" and added a corresponding menu item to avoid cluttering the Polygon functionality.

Thursday, April 14, 2016

Improved the semi-automatic "Snap-To-Point" function and corresponding UI.
This is mostly due to better matching and usage of Splines.

Initial pass: user quickly clicks on desired location and proceeds WITHOUT correction
On the second, manual pass, user simply drags the control points (about 5-6) in this example and contour adjusts.

Implemented general  Cubic Hermite Splines 2D function.  It supports several types of splines {CARDINAL,FinalDiff,Catmull-ROM}
The challenge was to implement it so it matches exactly the Microsoft's GDI+ implementation in DrawCurve() - this was achieved.

Function can be easily expanded to 3D.






Monday, April 11, 2016

While "Snap-to-Point" feature works quite well on femur, there are areas where local features are not sufficient to reliably detect the desired location
Problematic boundary for "Snap-to-Point"
Typical structure of the edges.  Local structure is not sufficient to reconstruct a good snapping location.
To solve this problem I propose to include additional mechanisms, see figure below.

"Snap-to-point" would simply snap to a stronger edge within the Snap apperture. This would be incorrect. Instead taking the previous state of the cardinal spline into account, we search for a better snap location.  Snap-to Curve would inregrate the edges strength all along the last segment, so the yellow path would be invalidated. And instead more reliable path chosen.

















FireVoxel Build 210A is released.
Implemented the functionality to load real valued 4D Analyze files (*.time+ array of .IMG files)

Friday, April 8, 2016

First runs of new MagPoly tool on the femur:

First user performs several clicks on perceived contour of the femur. Computer calculates the edge pattern next to the click and selects a "snapping" location setting an anchor point.
Two important points:

a) Even if snapping did not work properly - operator proceeds with the next points (there will be a cleanup stage later).
b) Work is performed on a full Zoomout, so User does not have to Zoom In and back and scroll!
c) In between the anchor points, a cardinal spline with application-specific tension is used.
d) 10-voxel snapping radius was used.

Each anchor point corresponds to a single click
In the followup stage. User returns and drags some anchors to improve their positions. In this example about 6 anchors were corrected.

After dragging 6 anchors.


Wednesday, April 6, 2016

MagPoly tool: a simple interface to extend the functionality of the Polygon. It is purely 2D tool. No 3D extension is foreseen at the moment.



Tool is activated with the present Polygon tool. Then behavior changes according to dialog parameters.

|x|  UseMagPoly - turns the tool on.  Off = regular polyline.

"MagPoly radius":  the cursor changes to a semitransparent circle (similar to the paintbrush cursor). Radius specify the snapping seaarch radius - this way user has some feedback how far she should click.

|x|  Precompute slice edges (for slow computers).  - at the moment I plan to compute edges each time user clicks within the apperture specified by the "MagPoly radius".  Hopefully it will fill instantaneous on the mainstream computer.  Otherwise, with the tool on each time the slice would change, the internal edge layer will be computed.

"Edge Parameters" - parameters identical to the Texture Edge detector.


Additional parameters will appear later on.  F.e. more advance version would snap the curve between the user-specified Anchor points.

Saturday, April 2, 2016

Implemented "ROI>Concentric Ring profile" function with the result being copied to the clipboard.

Friday, April 1, 2016

Idea is to capture the spatial characteristics of the tumor by detecting Texture-sensitive edges within the tumor at different scales and different apperture weights.

EMD texture edges, Scale=3, Apperture=constant



 Here are the corresponding Edge strength distribution histograms:  They have a widely varying StdDev/Mean and so on.





We can also Build the "Concentric Profiles" of Edge Strength distribution ( in corresponding order)






"Tumor blob analysis"

Tumor is thresholded.
Dark blob info is available



"Tumor ring profile" trials:

Mean=Blue, StdDev=red,  1 vox step -> inwards


Thursday, March 31, 2016

Full Resolution Femur sample:
Run the registration Using URAL, default parameters, Subsample=8,with Finetune=1.
Timings:
Primitive generation:   3 min
AutoFocus:                  50 sec
FineTune:                     25 sec

Result is below.  I don't see a need to change anything about the registration FineTune.
MI problem has to be investigated.




Femur Full-resolution registration sample:

URAL registration works well with the present default parameters. Below is the result for the AutoFocus stage (no Finetune)

Using URAL, AutoFocus-only, no Finetune
However, for the MutualInfo this stage fails with the result grossly misplaced.
FGT segmentation: Implemented a hybrid FAT thresholding method based on Z-alg for when histogram has 2 distinct peaks. New criteria was developed for the absence of such peaks. In that case the PVV segmentation is invoked.
Processed all the 16 "challenge" cases with good results.

Wednesday, March 30, 2016

Developed completely new application-oriented AirThresholding method. It is based on Z-alg idea.
Validating it on the failed breast FGT samples where selecting across-the-board threshold = 60 did not work.  Specifically, in REIC cases the proper thresholds were substantially higher :  {67,108}
in KELL cases the proper threshold were substantially lower {17,15}

REIC_R
KELL_R
KELL_L
REIC_L

Tuesday, March 29, 2016

Added the {BiGauss_PVV,BiLaplace_PVV} methods to the menu of Histogram segmentation methods in
a) RoiStats3D dialog
b) "ROI>Split ROI with threshold" menu
Improved the performance of the "Interval Arithmetic" library. This is used in all Histogram segmentations and dynamic modelling.

Monday, March 28, 2016

Developed new thresholding methods  "Bi{Gaussian,Laplacian} with PVV correction".
These methods work on the idea that the histogram segment between 2 peaks is unreliable due to the Partial Volume Voxels (PVV) and should be completely disregarded.  Intuition here is how human thresholds complex fused histograms, just by looking on the side tails of the distribution.

Tested on the difficult case ABBE-R. With the good result.

Histogram modelling
Final segmentation

Tuesday, March 15, 2016

problematic case ABBE-R
seems the BiLaplacian split found a wrong threshold:

ABBE-R.  BiLaplacian split.  Residual = 2549

However, when we re-segment the BiGaussian model, we obtain much lower residual.

BiGaussian fit.  Residual = 645

ABBE-R:   Split using BiGaussian


However, for Phantoms the BiLaplacian was much better than Gaussian at least for most cases and all phantoms were processed using exclusively BiLaplacian.


Proposal:  We evaluate histogram fit using both {BiLaplace,BiGauss}.  We choose the method that provides smaller fitting residual.



Monday, March 14, 2016

Determine the Air threshold in Breat FGT images:
We inspect the histogram that has a gross-dominant peak around the Signal=0. We fine first evident valley and assign the valley bottom to be the AirThreshold.


New workflow on case ABBE_L:

result of the segmentation:



Testing new FGT workflow on human data:
BiCal + BiLaplace provide excellent result. Exactly the parameters  from Phantom processing
were used

BiCal followed by BiLaplace

Breast FGT phantom workflow:  implemented completely new workflow  BiCal+BiLaplace+MaxCC+EdgeWaveML.  Processed all 24 cases with very good result matching the physical measurement.

Saturday, March 12, 2016


Some voxels are marked as FGT, but should be they included at all?  They could be fairly easily excluded by demanding that the FGT+FAT is a Connected object and does not consist of the several
disconnected components. This should be true for Phantom and Human data?
"EdgeWave MultiLabel - Boundary Only" variant was implemented.  Only the boundary voxels of the total region are modified by Multilabel Peel\Grow.
Provides slightly different result

FGT=187.8 cm3, FAT = 944, Total = 1131.8, Fgt%=16.5%


Implemented new algorithm "EdgeWave MultiLabel". This is a general algorithm: given an initial segmentation of the region with multiple labels it applies EdgeWave morphological criteria to correct these regions while completely covering the total region.

This was applied to p1s0_L example that had issues with partial volume voxels being misclassified as FGT.

This algorithm contains both internal and external morphological competition.  So additional algorithm "EdgeWave ML Boundary" will be attempted.


FGT: 180.23, FAT=950, total=1130.23,  FGT percentage=15.9%

Implemented the original variant of the FGT breast workflow.  It consists of BiCal, Bimodal Laplace thresholding.  While providing great (+-4% ground truth) result for some images, other images are problematic. This requires to develop an additional Morphological module, as none of the existing variants of EdgeWave don't seem to fit.

Tuesday, March 8, 2016

This is the "fused peak" case that Henry sent earlier.  As far as I understand this was the case "p4s0.fvx"-RIGHT (DICOM5)

Again BiCal was applied with the exact parameters as with other cases. Then BiLaplacian with exactly same parameters too.  We see a great histogram split as a result.

Initial fused peaks case resolved.
Corresponding segmentation (top and bottom slices)

FGT processing update:

1. Preliminary results on 4 phantoms with about 200 manual seeds each indicate x4-5 times improvement of BiCal over N3.

2. After fixing the BiLaplace fitting procedure, the phantom histogram splits start to look great. But no great conclusions till the whole set is done.  See below (case p1s1_R.fvx)

Histogram fitting using Bimodal Laplacian (after BiCal)