Search This Blog

Sunday, July 31, 2016

Fixed Object selection defect:  Staring from empty selection in certain situations a VROI was clicked to select but the "Selection Tracker" failed to show up leaving the User confused.
CT-real (rat) dataset - fixed the defect when it was not possible to place a 2nd landmark anywhere.

Saturday, July 30, 2016

IM file format:  fixed the legacy file load with 8-bit voxels and non-trivial   "minimal value"\"maximum value" fields.

Wednesday, July 27, 2016

Major improvements to BiCal using new SVD-Parallel Jacobi:
a)  Was able to process much higher degrees of the polynomial - 25 from previous max 15.  New
image looks great and better.  Not able to do it in previous versions due to numerical instability of the
20000x20000 matrix solution using old SVD-NumericalRecipes (QR-decomposition).  Jacobi algorithm is simpler but more stable.
b)  At Degree=10 SVD takes 1% of calculation time, at 25 degree it takes 99% of calculation  time.
But now SVD is 100% parallel and scalable with 10x faster than  previous version.
c) On BPD datasets,  results for      WM/GM/CSM improved from  0.14/0.14/0.064  down to 0.10/0.11/0.49 for degree 25.
d) But calculation times become prohibitive at the higher degress ~40 min.

Tuesday, July 26, 2016

Completely re-engineered the CPU Capabilities Info function.  Newest processor and more reliable processing is available now.
Incorporated, debugged and improved the code for SVD: Jacobi One-sided block method.
Speed increase of about x5 times on  1000x1000 matrix comparing to serial version.
Nun-Uniformity Menu:  the Class Separation Measure function now displays the Optimal Threshold too.

Thursday, July 21, 2016

Fully implemented  PET-CT-Atlas\Rodent workflow. Tested on the Rat dataset with 30-region Atlas.
New Layer Control dialog:  implemented
a) Enable All, Disable All buttons
b) ROI operations "Combine" button with a dialog option to remove the Source Operands layers.

Monday, July 18, 2016

Build 219 is released.
New Layer Control dialog:   Enabled "Open DICOM" and "Open RAW" items.
New Layer Control dialog:  enabled the "New ROI 3D" and "New ROI 4D" buttons.
New Layer Control dialog:  Enabled the ViewFilter button and functionality.
New Layer Control dialog:  added Left Doubleclick processing (name change edit\Ctrl ROI midslice jump)

Sunday, July 17, 2016

New Layer control dialog: Added the "Info" button handler.
"Hover over ROI atlas" functionality was added. When there is an Atlas-like combination of ROIs is present, mouse cursor position is analyzed and the name of the single ROI layer is displayed that present at the mouse coordinate.
ROI compression\RAM allocation:  fixed major inefficiency defect, so that the RAM requirement for the 174 ROI atlas was reduced from 1GB down to 20 MB.
Old Layer Control dialog:  fixed the crash when  number of layers was exceeding the maximum (21).

Monday, July 11, 2016

Expanded the Atlas->ROI conversion function.  Tested on 174 ROI atlas.
Some performance issues have to be addressed with such high number of ROIs.


New Layer control dialog Added "Up\Down layer"
Enabled the Transparency-Slider functionality inside the new Layer Control Dialog box.

New Layer Control dialog box:

Added the "Active voxel layer" info dialog box and the GoTo (to Advance and Select Active layer) function.

Friday, July 8, 2016

Cursor hovering over the active layer with Real values now displays  "Real= ...value"
Implemented the ABT subtests for the DDC\Alpha model, new IVIM, IVIM-segmented models with the new parameters.


Implemented the ABT subtests for the DDC\Alpha model, new IVIM, IVIM-segmented models with the new parameters.


Added new Dynamic Model:  "DDC Stretched Exponential fit S = S0*(exp(-b*ADC)^alpha)"

Tested on the standard ABT dataset identical to ADC:
DDC fit:  DDC=0.0016, alpha=0.34, Residual=2.03


For comparison, we performed the ADC fit on the same data:
ADC fit:  ADC=0.001152, Residual=12

Corresponding Alpha-map processed over the ROI


Thursday, July 7, 2016

IVIM (Basic and Segmented) models:  changed the output parameter  Dt ->  Dt*(1-f)
Re-engineered core Global Optimization Engine.

Wednesday, June 22, 2016

Saturday, June 18, 2016

Build 217B is released.
1. Renamed the "MainMenu>VROI" ->  "MainMenu>Vector".
2.  Duplicated the "Rasterize Vector Entity" button of the main toolbar
under the "Main Menu>Vector>Rasterize".
3. Removed Rasterize items from "MainMenu>Trace"

Wednesday, June 15, 2016

IVIM {Basic,Segmented} models:  implemented new parameters "Dp*f" and "Dt*f" available to the user.
RAW   *.time file format:  implemented a support of variable naming convention when the index of the separate timepoint could contain arbitrary number of leading zeroes.

Tuesday, June 14, 2016

Friday, June 10, 2016

Build 217 is released.
ANALYZE with the negative value:  implemented the dialog box that show the loading options when the negative values are detected in the ANALYZE file.  This replaces several separate dialog boxes used in earlier versions.
SPM-generated ANALYZE 4D volume containing variable (Slope,Intercept) values for different timepoints:  enabled the correct load consistent with the Mango package.

Tuesday, June 7, 2016

Fixed the Huffman compression to allow loading the volume with the 2000x2400 slice.
Finalized N4-Explorer including the Dialog box

Saturday, June 4, 2016

N4Explorer: preparatory work with APIs so the optimizations structures and code of the BiCalExplorer could be fitted without any change.

Saturday, May 28, 2016

BiCal run on 4 volumes:

80 positions per volume were estimated. Total execution is 7+ hours.  We varied the smoothing power [0,100] and the polynomial degree [6,13].







"Class separation measure":  was reduced from the original  0.173 down to 0.003











Resulting optimal BiCal parameters are:

Wednesday, May 25, 2016

BiCal explorer:  completely implemented including the specialized Dialog box.
This optimization works for a single volume at the moment.

Sunday, May 22, 2016

FireVoxel Build 216B is released.
N4-UI function:  since the output is real, added the REAL->INT postprocessing conversion to match the Source volume type.
Implemented the "Misclassification of the Optimial Separation" function and the User Interface under "MainMenu>Nonuniformity". Function is fully parallel and executes very fast.

Tuesday, May 17, 2016

"MainMenu>Measurement>Hausdorff Distance":
Implemented the Hausdorff distance measure {Edge,Area} variants.

Sunday, May 15, 2016

Build 216 is released.

  • RasterPaintbrush  Tool\Dialog:  fixed the defect when the SmartZoom option setting was not remembered.
  • N4-tool:  implemented the option Output field.
  • N4 dialog box:  replace the "Field Smoothness" name with the "Spline Distance" to emphasize difference with the NYU-N3 tool between those 2 terms.
  • N3-NYU tool:  fixed the crash for large values of the "Field Smoothness" = 200.
  • N4 crash defect, with supplied parameters (iter=75): fixed.
  • Non-Uniformity Measurement:  fixed a defect that exactly two ROI layers are required for the measurement.
  • Now any number of ROIs might be present, as long as only two are ENABLED.
  • Non-Uniformity measurement:  implemented function and Menu Item to measure 2 sets of blobs that are not completely paired.  This allows to measure non-uniformity more completely, while using the paired blobs for constraints.


RasterPaintbrush  Tool\Dialog:  fixed the defect when the SmartZoom option setting was not remembered.
N4-tool:  implemented the option Output field.
N4 dialog box:  replace the "Field Smoothness" name with the "Spline Distance" to emphasize difference with the NYU-N3 tool between those 2 terms.
N3-NYU tool:  fixed the crash for large values of the "Field Smoothness" = 200.

Friday, May 13, 2016

N4 crash defect, with supplied parameters (iter=75): fixed.
Non-Uniformity Measurement:  fixed a defect that exactly two ROI layers are required for the measurement.
Now any number of ROIs might be present, as long as only two are ENABLED.
Non-Uniformity measurement:  implemented function and Menu Item to measure 2 sets of blobs that are not completely paired.  This allows to measure non-uniformity more completely, while using the paired blobs for constraints.

Wednesday, May 11, 2016

FireVoxel Build 215 is released.
Non-uniformity\Two tissue Contrast measurement:  improved diagnostics when there is no full blob pairing between the tissues.
Finished the integration of the N4 bias correction binary tool.  This includes the new N4 dialog box:

Monday, May 9, 2016

NIFTI-1 file format (.NII):  implemented Save (UI) for the integer volumes.

Friday, May 6, 2016

FireVoxel Build 214A is released.
MagPoly dialog box: eliminated defect due to the dangling variable m_SnapToCurve. This was only partially eliminated before and was getting some random values.
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.