result of the segmentation:
Search This Blog
Monday, March 14, 2016
Saturday, March 12, 2016
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.
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.
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)
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) |
Monday, March 7, 2016
Understanding breast phantom data:
Provided phantom data should be
a) Thresholded to get the Breast ROI (instead of manual ROI in patient data).
b) L&R breast separated
c) Run NU {N3,Bical}
d) Run Histogram thresholding {Otsu,BiGauss,BiLaplace}
e) provide the results of measurement in cm^3
f) best method matching the ground truth will be selected
Provided phantom data should be
a) Thresholded to get the Breast ROI (instead of manual ROI in patient data).
b) L&R breast separated
c) Run NU {N3,Bical}
d) Run Histogram thresholding {Otsu,BiGauss,BiLaplace}
e) provide the results of measurement in cm^3
f) best method matching the ground truth will be selected
Sunday, March 6, 2016
BiModal histogram segmentation within the RoiStats3D dialog box.
a) Added the separate "Recompute" button to simplify the processing
b) Currently selected\displayed histogram binning is supplied and used as the distribution for the BiModal modelling.
c) Corrected the Model Curve overlay to be consistent with the change in binning specified by the User.
d) Eliminated the "BiGauss model" only leaving the "BiGauss with Ratio model". Just set the very high peak ratio (>10) to get result of the previous models.
e) Fitting Thresholds\Residual are now displayed in the "Threshold" status line.
a) Added the separate "Recompute" button to simplify the processing
b) Currently selected\displayed histogram binning is supplied and used as the distribution for the BiModal modelling.
c) Corrected the Model Curve overlay to be consistent with the change in binning specified by the User.
d) Eliminated the "BiGauss model" only leaving the "BiGauss with Ratio model". Just set the very high peak ratio (>10) to get result of the previous models.
e) Fitting Thresholds\Residual are now displayed in the "Threshold" status line.
![]() |
| BiGauss model (residual 57.7) |
![]() |
| BiLaplacian model (residual 86.6) |
Friday, March 4, 2016
Wednesday, March 2, 2016
FireVoxel Build 209 is released.
1. Fixed the "IM
file crash problem" (equal sign was missing): an appropriate error message would be
displayed now.
2. IVIM segmented
model:
a) added parameter
"Large B-value start" with the default value=200. User can now change that value.
b) Increased the
allowed ranges for Dp=[0,1], Dt=[0,0.01]
IVIM basic model:
Increased the allowed ranges for
Dp=[0,1], Dt=[0,0.01]
3. On Mouse Move -
Display voxel information: fixed a
defect when the Active Layer is disabled, so moving the mouse did not produce
any information in the status line.
Now if the Active is
disabled, we choose the First enabled layer to display the voxel info.
4. Synchronize
Multiprojection Cursor (mode=ON) functionality:
if there is a single View\Projection of the volume is visible the
Crosshair cursor would not be visible.
5. BiCal on Sodium images: fixed the defect when
iterations of BiCal were producing a "better" result. This was due to
the custom scheme of processing the REAL images, when internally they were
converted to the 15 bit images and this was conflicting with the internal
truncation
Monday, February 29, 2016
"IVIM-Segmented" model:
We try to investigate a suspicious peak in the histogram of the fitted Dp-parameter. This peak occurs at Dp=0.03. In the screenshot below one of such voxels was identified and processed individually.
For finding the Dp component we run the Global Optimization with parameter Dp be restrained to the [0,0.03] interval. So optimal solution is found to be on the borders of that interval, i.e. Dp= 0.03.
Many such voxels within the ROI contiribute to the "suspicious peak".
The problem does not seem to be restricted to the cases of air/tissue partial voxels.
My current guess that this is common to the voxels where signal curve is not monotonous.
Here is anther case with Dp=0.03
Next experiment, I vastly increased the Dp-constraint interval to [0,1] and ran it on the same voxel. Interestingly the result has settled on Dp=0.67 with 3 times lower residual. This indicates that we have found an actual optimum.
CONCLUSION: seems like the presence of the Dp- histogram tail peak is due to the restriction of the Dp=[0,0.03] during the optimization. I will be relaxing this restriction to Dp=[0,1].
My best guess that the "presence of the histogram tail peak" is not related or causing the difference of the results with other software. I use the Global Optimization which is very different from Local Optimization used in other software. To my best knowledge the FireVoxel fits are valid and excellent (judging by the residual). So my best guess is that "other software" is not fitting well enough.
Here is the histogram of resulting Dp values with Dp=[0,1]. Previous strong peak at Dp=0.03 is gone. My best guess: these high values due to some voxels having strongly monoexponential signal
curve.
We can get to the bottom of it if I send a single Signal Curve, along with FireVoxel-calculated parameters and residual. Then curve can be processed in "other software", residuals compared and so on.
We try to investigate a suspicious peak in the histogram of the fitted Dp-parameter. This peak occurs at Dp=0.03. In the screenshot below one of such voxels was identified and processed individually.
![]() |
| Green-data curve. Black - fitted curve. |
Many such voxels within the ROI contiribute to the "suspicious peak".
The problem does not seem to be restricted to the cases of air/tissue partial voxels.
My current guess that this is common to the voxels where signal curve is not monotonous.
Here is anther case with Dp=0.03
Next experiment, I vastly increased the Dp-constraint interval to [0,1] and ran it on the same voxel. Interestingly the result has settled on Dp=0.67 with 3 times lower residual. This indicates that we have found an actual optimum.
![]() |
| Fit with Dp=[0,1] allowence. This settled at Dp=0.67 |
CONCLUSION: seems like the presence of the Dp- histogram tail peak is due to the restriction of the Dp=[0,0.03] during the optimization. I will be relaxing this restriction to Dp=[0,1].
My best guess that the "presence of the histogram tail peak" is not related or causing the difference of the results with other software. I use the Global Optimization which is very different from Local Optimization used in other software. To my best knowledge the FireVoxel fits are valid and excellent (judging by the residual). So my best guess is that "other software" is not fitting well enough.
Here is the histogram of resulting Dp values with Dp=[0,1]. Previous strong peak at Dp=0.03 is gone. My best guess: these high values due to some voxels having strongly monoexponential signal
curve.
We can get to the bottom of it if I send a single Signal Curve, along with FireVoxel-calculated parameters and residual. Then curve can be processed in "other software", residuals compared and so on.
Tuesday, February 23, 2016
Monday, February 22, 2016
BuiCal nonuniformity correction over the set of 12 "Sodium"-images.
We tried to find set of parameters that worked well on every single image.
To precisely evaluate the effect of the correction, 15-20 seeds were precisely and manually constructed on each of the cases. All of the seeds were positioned inside of the ventricles as far as possible from the edge of ventricles and corresponding partial volume voxels.
Non-uniformity is defined as the StdDev of the average seed signal taken over all the seeds.
![]() |
| Seeds are in Red on one of the slices |
We tried to find set of parameters that worked well on every single image.
See the Table of results below for each case
1st column: Case name
2nd Column: original non-uniformity (StdDev over seeds)
3rd Column: processed non-uniformity (StdDev over seeds)
5th column relative improvement of the correction =NUbefore/NUafter-1
Interestingly the results for N-cases where 10 times weaker than the results on "Non-N cases", 6% and 61% improvement correspondingly.
N3 correction was attempted but NU only worsened with all the parameter combinations we tried.
Overall these images are quite challenging for Non-uniformity correction, due to the low resolution and the ventricles being only 3-4 voxels thick. Note the original .NII files contained the resolution of (1,1,1)mm but this does not seem to be the case,
Saturday, February 20, 2016
BiCal on Sodium images: fixed the defect when iterations of BiCal were producing a "better" result.
This was due to the custom scheme of processing the REAL images, when internally they were converted to the 15 bit images and this was conflicting with the internal truncation mechanism after the correction.
This was due to the custom scheme of processing the REAL images, when internally they were converted to the 15 bit images and this was conflicting with the internal truncation mechanism after the correction.
Thursday, February 18, 2016
Wednesday, February 17, 2016
Build 208 is released.
1.
IDIF function: Fixed the "invalid rectangle" defect exhibited on
P1.fvx. This was due to the inflated
initial rectangle to be outside the image bounds.
2.
Implemented an order-of-magnitude CountBits( PBYTE Array,int Start,int End)
function which is frequently used throughout.
3.
Dynamic Modelling (models {0,3}): fixed the user defined parameters for
starting dynamic index to 1 (from 0).
4.
Dynamic Modelling framework fix: When
PET image is processed with "Process ALL", i.e. without the ROI, the
dialog box was popping up asking to specify T1.
5.
Dynamic Modelling: added a test for
Tissue Concentration if the Modality=PET. In this case the Concentration Method
is always set to "SIGNAL" and user is warned. This is done in addition to an earlier
implemented check for the Input Function in PET.
6.
Dynamic Model "Input function correlation": Added a proper handling
of the Tissue concentration. Before it was "Signal only" and created
inconsistencies for the user.
7.
Dialog Layer Operations: fixed crash defect related to the Entity Layer upgrade
to 22 layers in the previous builds.
8.
Fixed the error in reslicing binary volumes (ROIs). Old procedure was always assuming the
FillVoid or Background value is always '0' but this is not correct always. This was detected in "Reslice Target to
Source" option during the Femur registration.
9.
Dynamic Modelling: Input Function
correlation: corrected the situation when the divisor n*XX-X*X or n*YY-Y*Y is
close to zero.
10.
Dedicated menu item was added to the workflow menu with the parameters suited
for processing.
11.
LayerControl dialog: updated behavior so that the Name editing requires
Doubleclick, while "ROI advance to midslice" requires
"Ctrl+Doubleclick".
Tuesday, February 16, 2016
Thursday, February 4, 2016
Wednesday, February 3, 2016
Tuesday, February 2, 2016
Monday, February 1, 2016
Femur registration: one of the scenarios to have femur ROI only on the Baseline image. So when the followup image appears to perform registration without constructing "followup ROI".
Registration using Mutual Info provided visually accurate result. Execution times are slower closer to 20 min (as opposed to 5 min on ROI->ROI).
Dedicated menu item was added to the workflow menu with the parameters suited for processing.
Registration using Mutual Info provided visually accurate result. Execution times are slower closer to 20 min (as opposed to 5 min on ROI->ROI).
Dedicated menu item was added to the workflow menu with the parameters suited for processing.
Sunday, January 31, 2016
FireVoxel Build 207 is released.
1. Dialog Layer Control: When there is a ROI layer present - user may doubleclick on the layer name. Current Z-slice of the entity would be changed to the mid-Z slice of that entire ROI (at that current timepoint in case of 4D ROI).
2. 3D Paintbrush: enabled the drawing with the Radius=0
3. Use Interface options dialog: removed the "Synchronized cursor" option.
4. Dynamic Modelling: Input Function correlation model: fixed the bug and checked the correctness on the identity problem.
1. Dialog Layer Control: When there is a ROI layer present - user may doubleclick on the layer name. Current Z-slice of the entity would be changed to the mid-Z slice of that entire ROI (at that current timepoint in case of 4D ROI).
2. 3D Paintbrush: enabled the drawing with the Radius=0
3. Use Interface options dialog: removed the "Synchronized cursor" option.
4. Dynamic Modelling: Input Function correlation model: fixed the bug and checked the correctness on the identity problem.
Friday, January 29, 2016
Femur registration, attempt to register without the follow-up segmented ROI.
Attempted the following scenario:
baseline Target+ROI (WALS1) is registered with the Source WALS2 only (no ROI).
Mutual Info measure was used. On the screenshot below you can see the WALS2 registered and then overlayed with the WALS1-ROI. Visually appears to be a good match.
This makes it very likely that follow-up ROI would not be required for registration.
One downside - it took about 20 min, vs. 5 min on ROI->ROI scenario.
Attempted the following scenario:
baseline Target+ROI (WALS1) is registered with the Source WALS2 only (no ROI).
Mutual Info measure was used. On the screenshot below you can see the WALS2 registered and then overlayed with the WALS1-ROI. Visually appears to be a good match.
This makes it very likely that follow-up ROI would not be required for registration.
One downside - it took about 20 min, vs. 5 min on ROI->ROI scenario.
![]() |
| WALS2 (transformed after registration) overlayed by the WLAS1-ROI (static as the Target) |
Dialog Layer Control: Major new feature and behavior change:
When there is a ROI layer present - user may doubleclick on the layer name. Current Z-slice of the entity would be changed to the mid-Z slice of that entire ROI (at that current timepoint in case of 4D ROI). FilmView would be always turned off immediately.
Old functionality: before the doubleclick would bring the name edit control. This requires now pressing the Control+Dblclick button.
When there is a ROI layer present - user may doubleclick on the layer name. Current Z-slice of the entity would be changed to the mid-Z slice of that entire ROI (at that current timepoint in case of 4D ROI). FilmView would be always turned off immediately.
Old functionality: before the doubleclick would bring the name edit control. This requires now pressing the Control+Dblclick button.
Thursday, January 28, 2016
FireVoxel Build 206 is released:
1. IVIM free model fix: was always returning "0" as the residual of the fit.
2. ABT test for Dynamic Modelling: modified the test so that results are compared to Standard using the specified tolerance (1e-3) to avoid costly investigation into ABT trivial "red flags".
3. Mouse brain PET-CT-Atlas workflow: verified that workflow works with the complete 20-region atlas.
4.Produced a Mouse brain atlas of all 20 regions that can be now processed by the Layer Control dialog.
5. Expanded current Layer Control dialog to 22 layers to accommodate an entire Mouse Brain Atlas.
6. Fixed the .IM Save\Load problem
7. Implemented a very early prototype of the new Layer Control dialog box. This Control would provide handling of all hybrid types of the primitives present in the FireVoxel entity: {Volumes,Landmarks,VROIs,Pollygons,Text, etc}. This dialog supports an unlimited number of layers. During the prototyping stage this dialog is activated by F9.
8. Code improvement: moved the CDlgLayerCtrl declaration within the class source module.
9 Dynamic Modelling module: implemented the Parametric map "Input function correlation"
10. Femur ROI registratio: Implemented a dedicated menu item with parameters suitable for this application.
11. ROI->ROI registration: Developed the Signal difference calculation working directly with Run-length representation of ROIs (x10-20 memory compact) that resulted in x10 speed up during the AutoFocus on Subscale=3. Speed up is even higher on the Finetune phase approaching
1. IVIM free model fix: was always returning "0" as the residual of the fit.
2. ABT test for Dynamic Modelling: modified the test so that results are compared to Standard using the specified tolerance (1e-3) to avoid costly investigation into ABT trivial "red flags".
3. Mouse brain PET-CT-Atlas workflow: verified that workflow works with the complete 20-region atlas.
4.Produced a Mouse brain atlas of all 20 regions that can be now processed by the Layer Control dialog.
5. Expanded current Layer Control dialog to 22 layers to accommodate an entire Mouse Brain Atlas.
6. Fixed the .IM Save\Load problem
7. Implemented a very early prototype of the new Layer Control dialog box. This Control would provide handling of all hybrid types of the primitives present in the FireVoxel entity: {Volumes,Landmarks,VROIs,Pollygons,Text, etc}. This dialog supports an unlimited number of layers. During the prototyping stage this dialog is activated by F9.
8. Code improvement: moved the CDlgLayerCtrl declaration within the class source module.
9 Dynamic Modelling module: implemented the Parametric map "Input function correlation"
10. Femur ROI registratio: Implemented a dedicated menu item with parameters suitable for this application.
11. ROI->ROI registration: Developed the Signal difference calculation working directly with Run-length representation of ROIs (x10-20 memory compact) that resulted in x10 speed up during the AutoFocus on Subscale=3. Speed up is even higher on the Finetune phase approaching
Wednesday, January 27, 2016
Tuesday, January 26, 2016
Monday, January 25, 2016
Implemented a very early prototype of the new Layer Control dialog box. This Control would provide handling of all hybrid types of the primitives present in the FireVoxel entity: {Volumes,Landmarks,VROIs,Pollygons,Text, etc}. This dialog supports an unlimited number of layers. During the prototyping stage this dialog is activated by F9.
Sunday, January 24, 2016
Thursday, January 21, 2016
ROI->ROI registration: during the reslicing operation in AutoFocus\Finetune iteration ROIs are transformed and partial volume voxels appear while the majority of voxels still remain binary ROI. Calculating of signal difference in the obvious way was not fast enough for comparing the massive images for Femur registration problem.
Developed the Signal difference calculation working directly with Run-length representation of ROIs (x10-20 memory compact) that resulted in x10 speed up during the AutoFocus on Subscale=3. Speed up is even higher on the Finetune phase approaching x30.
Developed the Signal difference calculation working directly with Run-length representation of ROIs (x10-20 memory compact) that resulted in x10 speed up during the AutoFocus on Subscale=3. Speed up is even higher on the Finetune phase approaching x30.
Thursday, January 14, 2016
Wednesday, January 13, 2016
Build 205 is released
"MainMenu>ROI>Split ROI by
Threshold" - added the BiModal Laplacian with ration method for initial
split.
Enabled accelerator "Ctrl+S" :
"Save FireVoxel document"
Implemented new rule to select
threshold from 2 modelled distribution: "Minimize
Missclassification" rule.
BiModal Laplacian histogram
CT-PET-ATLAS workflow: Register ALL:
fixed the crash defect on case W73"Deep breathing" lung
segmentation case: no leaks after BiCal+EdgeWave
Mouse Brain, CT-PET-ATLAS wokflow:
Provided an additional registration function to register everything to the PET space to avoid any transforms\interpolation of the principal data (PET).
Provided an additional registration function to register everything to the PET space to avoid any transforms\interpolation of the principal data (PET).
Mouse Brain CT-PET-Atlas workfow: finished
the integrated "one-click" registration function
Added the functionality to extract only desired
regions from the Atlas
Landmark co-registration:
a) When Source={3D,4D} 2-layer entity, registered to a 3D-volume, the timing information of the 4D volume was lost
b) Also corrected the defect when Alpha (transparency) and the color scheme of the source were lost after the regidstration.
a) When Source={3D,4D} 2-layer entity, registered to a 3D-volume, the timing information of the 4D volume was lost
b) Also corrected the defect when Alpha (transparency) and the color scheme of the source were lost after the regidstration.
Dialog RoiStats3D: in
Model-based Histogram segmentation added an option to view the "Modelling
Cumulative" curve (options are {None,All Curves,Cumulative"}
Also removed the "BiGauss Explore" and "BiGauss with Ratio Explore" options since they are superceded by the curves display now.
Also removed the "BiGauss Explore" and "BiGauss with Ratio Explore" options since they are superceded by the curves display now.
Histogram model-based segmentation
{BiGauss,BiLaplace}: Implemented initial framework to show the modelling curves
overlaid on top of the histogram
Implemented some improvements to Global
Optimization algorithm and code.
Fixed crash defect while loading the DICOM folder
obtained from Mr. Zhang under Win10. This was due to using the 32-bit
truncation in CTreeCtrl::SetItemData during the DICOM tree construction.
Moved the main development environment to Windows
10.
Fixed the defect in RasterPaintbrush dialog box:
checking the "Allow paint on parametric Maps" had no effect and
setting was not remembered. Drawing on Parametric maps is now possible.
Fixed the paintbrush problem when drawing on
integer volumes.
Registration by the landmarks: provided more
detailed analysis in case of the landmark mismatch between Source and Target.
Registration by Landmarks: upon the start of
the procedure all the "invisible" (void) landmarks are
unconditionally removed from ALL documents. This is to avoid frequent confusion
during the registration.
Tuesday, January 12, 2016
We have found good BiModal match of the Histogram. Having two curves (Gaussian or Laplacian) what is the suitable algorithm to choose the threshold? Presently we choose the lowest point between the peaks of two components, but now I have doubts about this. Should it be the intersection of 2 curves instead?
Monday, January 11, 2016
Proposed semi-automatic "breast\chest wall" segmentation:
One way is to segment OUT the chest wall, after that breast segmentation is a simple EdgeWave operation.
To segment the chest wall:
1. On every 5th slice, draw the chestwall boundary as an ROI (see pic below). In this prototype I recommend the boundary starting and ending at the margins of the image (later on we can eliminate this).
2. I will provide a specialized operation "MainMenu>Applications>Breast>Segment Chest wall from Contours". Internally this operation would perform completing the contour, and then "Fill & Morph convex" to fill the skipped slices.
3. Result of this operation would be a "CHEST ROI" that could be excluded from the image. Then we would simply apply the EdgeWave to segment out the Air.
4. Manual processing time should be <1 min. Computing time is <20 sec.
One way is to segment OUT the chest wall, after that breast segmentation is a simple EdgeWave operation.
To segment the chest wall:
1. On every 5th slice, draw the chestwall boundary as an ROI (see pic below). In this prototype I recommend the boundary starting and ending at the margins of the image (later on we can eliminate this).
2. I will provide a specialized operation "MainMenu>Applications>Breast>Segment Chest wall from Contours". Internally this operation would perform completing the contour, and then "Fill & Morph convex" to fill the skipped slices.
3. Result of this operation would be a "CHEST ROI" that could be excluded from the image. Then we would simply apply the EdgeWave to segment out the Air.
4. Manual processing time should be <1 min. Computing time is <20 sec.
Friday, January 8, 2016
Thursday, January 7, 2016
Mouse Brain, CT-PET-Atlas workflow.
1. Load Atlas once for the whole study session. Minimize the View, so it is out the way and reduce screen clutter. You don't need to open Atlas for every registration.
2. Load CT-3D volume with landmarks present
3. Load PET-4D volulume
(steps 2,3 in any order)
4. Choose "MainMenu>Applications>Mouse Brain Atlas-PET-CT workflow"
5. After brief processing only one document will remain that contains
CT,PET and several ROI layers.
6. Press F4 to bring up the curve dialog, this might take up to 1 min since there are many ROIs present. You will see something like below:
1. Load Atlas once for the whole study session. Minimize the View, so it is out the way and reduce screen clutter. You don't need to open Atlas for every registration.
2. Load CT-3D volume with landmarks present
3. Load PET-4D volulume
(steps 2,3 in any order)
4. Choose "MainMenu>Applications>Mouse Brain Atlas-PET-CT workflow"
5. After brief processing only one document will remain that contains
CT,PET and several ROI layers.
6. Press F4 to bring up the curve dialog, this might take up to 1 min since there are many ROIs present. You will see something like below:
Wednesday, January 6, 2016
Tuesday, January 5, 2016
Monday, January 4, 2016
Saturday, January 2, 2016
Friday, January 1, 2016
Subscribe to:
Posts (Atom)

















































