Giter VIP home page Giter VIP logo

mpreview's Introduction

SlicerProstate

Introduction

SlicerProstate is an extension of 3D Slicer software (http://slicer.org) that provides a collection of modules to facilitate

  • processing and management of prostate image data
  • utilizing prostate images in image-guided interventions
  • development of the imaging biomarkers of the prostate cancer

While the main motivation for developing the functionality contained in this extension was prostate cancer imaging applications, they can also be applied in different contexts.

See documentation at http://wiki.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/SlicerProstate.

Functionality

Current modules include:

This extension is work in progress, and we are planning to add other modules relevant to prostate cancer imaging research .... stay tuned.

Acknowledgments

This work supported in part the National Institutes of Health, National Cancer Institute through the following grants:

  • Quantitative MRI of prostate cancer as a biomarker and guide for treatment, Quantitative Imaging Network (U01 CA151261, PI Fennessy)
  • Enabling technologies for MRI-guided prostate interventions (R01 CA111288, PI Tempany)
  • The National Center for Image-Guided Therapy (P41 EB015898, PI Tempany)
  • Advancement and Validation of Prostate Diffusion and Spectroscopic MRI (R01 CA160902, PI Maier)
  • Quantitative Image Informatics for Cancer Research (QIICR) (U24 CA180918, PIs Kikinis and Fedorov)

The following individuals and groups contributed directly to the development of SlicerProstate functionality:

  • Andrey Fedorov, Brigham and Women's Hospital
  • Andras Lasso, Queen's University
  • Alireza Mehrtash, Brigham and Women's Hospital

References

If you use SlicerProstate in your work, we would be grateful if you could acknowledge it by citing the following publication. You can also use it to learn more about SlicerProstate functionality!

Fedorov, A., Khallaghi, S., Sánchez, C. A., Lasso, A., Fels, S., Tuncali, K., Sugar, E. N., Kapur, T., Zhang, C., Wells, W., Nguyen, P. L., Abolmaesumi, P. & Tempany, C. Open-source image registration for MRI-TRUS fusion-guided prostate interventions. Int. J. Comput. Assist. Radiol. Surg. 10, 925–934 (2015). Available: https://pubmed.ncbi.nlm.nih.gov/25847666/

A sample dataset you can use for testing is available here. If you use this dataset, please cite it!

Fedorov A, Nguyen PL, Tuncali K, Tempany C. (2015). Annotated MRI and ultrasound volume images of the prostate. Zenodo. http://doi.org/10.5281/zenodo.16396

Contact

If you need more information, would like to contribute relevant functionality or improvement, or have suggestions for the future development please contact

Andrey Fedorov [email protected]

mpreview's People

Contributors

brikeats avatar che85 avatar deepakri201 avatar fedorov avatar jcfr avatar lassoan avatar mehrtash avatar rweiss42 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

mpreview's Issues

Add error checking at the time of saving

Need to implement checks at the following levels:

  1. consistency before saving (only one label is present, label number and structure name are consistent, etc similar to as implemented in https://github.com/fedorov/PCampReview/blob/master/Util/CheckAndFixLabels.py)
  2. consistency after saving (read segmentations back and check as above)
  3. visual checking (save screenshot of how the label shows up at the time of saving): this one is most tricky - probably makes sense to go over one label at a time, set slice to the center of the label, turn on slice viewer annotation and save the screenshot of the slice layout for each label)

1 and 2 should be easy and quick, 3 is for later.

Add labels to the segmentation step to indicate what data you are working with

In the old UI layout, we could see the titles of the previous steps which would show the user what data directory they're in and what patient/study was selected. I'd like to add some labels (or something else? suggestions?) either globally or just in step 4 to show that data directory you are in and what study you're currently working with. Similar to how we added a label in step 2 to show what data directory you are currently in.

mpReviewPreprocesser Progressbar

When using mpReviewPreprocesser the user should get feedback about the current progress to make sure that he/she doesn't think that the application got stuck.

Add save capability to showExitStep4Or5Warning()

When you're warned that you're going to loose any unsaved contours on leaving step4 or 5, can we add a button to the warning pop up that calls the save method? Otherwise you have to go to completion step and click save there.

Better yet, track if things have changed since last save and only warn the user if in fact they're about to lose something. But that sounds complicated...

Using mpReview without explicitly using mpPreprocessor first

It would be great if mpReview could offer functionality for minimizing the need of user input.

Proposal: If directory with none mpReview compatible directory structure is found which is eligible for mpReviewPreprocesser, a prompt could be opened which shows:

  • Output directory where to store the mpReview-"project"(DICOM files would automatically organized).
    mpReviewPreprocesser would be executed and input path is after execution set to the output directory of mpReviewPreprocesser

@rweiss42 @fedorov What do you think about that?

AttributeErrors when selecting reference image in segmentation step

Since SliceAnnotations were revised in Slicer/Slicer#373 I get the following error:

Traceback (most recent call last): File "/Applications/Slicer.app/Contents/lib/Slicer-4.4/qt-scripted-modules/DataProbeLib/SliceViewAnnotations.py", line 582, in updateViewAnnotations self.sliceViewNames.append(sliceViewName) AttributeError: 'tuple' object has no attribute 'append'

Lock editor until a structure is created/selected

I'd like to propose that when you enter into a reference image and there are no structures yet, the editor area is disabled. Once a structure is created, enable it. On delete, check to see if there are no structures left and if so, disable the editor again.

Improve User Experience

I think we should talk about usability aspects.

Some proposed improvements:

  1. Having only one tab for "data selection". The current approach is a waste of space and the user needs to interact more than needed. I would leave the first tab like it is and add another splitview below the study selection list view.
  2. Simplifying the segmentation tab. I got the feeling that the segmentation tab is far too full. The fiducials table somehow is lost in that layout when you don't know about that (unexperienced users)

@fedorov @rweiss42 What do you think?

Editor Effects should be reset after finishing segmentation

When adding a new structure and using the PaintEffect/Draweffect and then going to Completion step, you will still be able to paint/draw in the viewers. This also affects switching to another module where the effects are still enabled.

We should disable them as soon as possible after finishing up.

Support segmentation of overlapping structures

We can probably use the Editor "split merge" feature here -- include the merge frame in the GUI and integrate with the logic. When reporting form is invoked, populate with the label ID for the active label in Editor to link finding reporting.

image

Module panel is too wide

Unfortunately, it appears that the width is set to the maximum width, which is the Structures widget in the Editor module. On 15-inch mac retina screen, module panel steals over 50% of the screen width!

The layout used there is QHBoxLayout, and it keeps getting wider with the recent modifications of the functinality. I guess it would be great not to use QHBoxLayout in this part of Editor, or use combination of icons and tooltips instead of long button labels. @pieper any other suggestions?

Sceenshot below is full width of 15-inch mac screen.

image

Add support for storing PK maps from OncoQuant

The idea is to organize results of OncoQuant in the same hierarchy for different options of PK analysis as below:

└── RESOURCES
    ├── 1
    │   └── Reconstructions
    │       ├── 1.nrrd
    │       └── 1.xml
    ├── 100 (where type is SUB)
    │   ├── Reconstructions
    │   │   ├── 100.nrrd
    │   │   └── 100.xml
    │   └── Segmentations
    │        └── readerId-StructureName-datetime.nrrd
    │   ├── OncoQuant
    │       └── version-selectionofaif-MapName-datetime.nrrd

where selectionofaif is one of the following: Auto, ManualLeftArteryROI, ManualRightArteryROI, Model. DCE series should be used to run the analysis, but the results should be saved under SUB series in OncoQuant folder.

The result should be a bash or python script that takes on input the locaiton of PCampReview-style dataset, and adds OncoQuant directory with the maps. The following maps should be saved: Ktrans, ve, BAT, Rsqr, Auc, MaxSlope

Recently used data directories

We should have a dropdown or something similar to provide easy access to previously used data directories. This is especially useful for those who often has to switch between directories.

This can be saved to module specific settings.

Obviously mpReview needs to check if those directories exist and they are mpReview eligible.

PCampReviewProcessor cleanup temporary directory replies usage by a process

Execution under Windows works for the very first time. Starting PCampReviewProcessor again, an error occurs regarding the deletion of the temporary path:

self.dataDir = os.path.join(slicer.app.temporaryPath, "PCampReviewPreprocessor")
shutil.rmtree(dataDir)

Somehow even when I execute this code manually after starting Slicer but without calling PCampReviewProcessor, Windows replies:

WindowsError: [Error 32] The process cannot access the file because it is being used by another process: u'C:/Users/CHRIST~1/AppData/Local/Temp/Slicer\PCampReviewPreprocessor\CtkDicomDatabase\ctkDICOM.sql'

Segmentation Step fails

Traceback (most recent call last):
File "/Users/peterbehringer/MyProjects/Modules/PCampReview/PCampReview.py", line 318, in setup
effectButtonFrame.addWidget(slicer.util.findChildren(editBoxFrame,'WindowLevelEffectToolButton')[0])
IndexError: list index out of range
Traceback (most recent call last):
File "/Users/peterbehringer/MyProjects/Modules/PCampReview/PCampReview.py", line 202, in onTabWidgetClicked
self.onStep3Selected()
File "/Users/peterbehringer/MyProjects/Modules/PCampReview/PCampReview.py", line 1211, in onStep3Selected
self.resetTranslate()
File "/Users/peterbehringer/MyProjects/Modules/PCampReview/PCampReview.py", line 1930, in resetTranslate
self.translateLR.value = 0
AttributeError: PCampReviewWidget instance has no attribute 'translateLR'

Add fitting error measures

code from Thiele

       double rms = optimizer->GetOptimizer()->get_end_error();
       double SSerr = rms*rms*vectorVoxel.GetSize();
       double sumSquared = 0.0;
       double sum = 0.0;
       double sumTest = 0.0;
       double ssSum = 0.0;
       for (unsigned int i=0; i < bValuesSelected; ++i){
           sumTest += (imageValuesPtr[i]-fittedValuesPtr[i])*(imageValuesPtr[i]-fittedValuesPtr[i]);
       }
       for (unsigned int i=0; i < vectorVoxel.GetSize(); ++i){
         sum += vectorVoxel[i];
         sumSquared += (vectorVoxel[i]*vectorVoxel[i]);
         ssSum += (vectorVoxel[i]-fittedVoxel[i])*(vectorVoxel[i]-fittedVoxel[i]);
       }
       double SStot = sumSquared - sum*sum/(double)vectorVoxel.GetSize();
       double rSquared = 1.0 - (SSerr / SStot);
       double chiSquaredNorm = sumTest/((double) bValuesSelected-4.0);//This number depends on the number of fitted parameters!
       double chiSquared = 2.0* sqrt(chiSquaredNorm);
       double chiSquaredNormAll= ssSum/11.0;
       double chiSquaredAll= 2.0* sqrt(chiSquaredNormAll);
       rsqrIt.Set(rSquared);
       ssIt.Set(ssSum);
       ssnob0It.Set(sumTest);
       ChiIt.Set(chiSquaredAll);
       Chinob0It.Set(chiSquared);
     }

Refactor the code

Simplify/clean up the code without changing any of the functionality.

Readonly mode to see processed data of other users

Users should be able to see processed data of other users which is saved under another username. To ensure, that the directory is readonly, we can disable ui elements for that moment.

To be discussed: Where and how to provide this to the user (dropdown?)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.