Skip to content

Add files via upload#2365

Open
YazdanSalimi wants to merge 1 commit into
Slicer:mainfrom
YazdanSalimi:main
Open

Add files via upload#2365
YazdanSalimi wants to merge 1 commit into
Slicer:mainfrom
YazdanSalimi:main

Conversation

@YazdanSalimi

Copy link
Copy Markdown

New extension

Tier 1

Any extension that is listed in the Extensions Catalog must fulfill these requirements.

  • Extension has a reasonable name (not too general, not too narrow, suggests what the extension is for). The extension name should not start with Slicer (unless it explicitly provides a bridge between Slicer and a tool or library), because it would make it more difficult to find extensions if the name of many started with the same word.
  • Repository name is Slicer+ExtensionName (except if the repository that hosts the extension can be also used without Slicer)
  • Repository is associated with 3d-slicer-extension GitHub topic so that it is listed here. To edit topics, click the settings icon in the right side of "About" section header and enter 3d-slicer-extension in "Topics" and click "Save changes". To learn more about topics, read https://help.github.com/en/articles/about-topics
  • Extension description summarizes in 1-2 sentences what the extension is usable (should be understandable for non-experts)
  • Any known related patents must be mentioned in the extension description.
  • LICENSE.txt is present in the repository root and the name of the license is mentioned in extension homepage. We suggest you use a permissive license that includes patent and contribution clauses. This will help protect developers and ensure the code remains freely available. MIT (https://choosealicense.com/licenses/mit/) or Apache (https://choosealicense.com/licenses/apache-2.0/) license is recommended. Read here to learn more about licenses. If source code license is more restrictive for users than MIT, BSD, Apache, or 3D Slicer license then describe the reason for the license choice and include the name of the used license in the extension description.
  • Extension URL and revision (scmurl, scmrevision) is correct, consider using a branch name (main, release, ...) instead of a specific git hash to avoid re-submitting pull request whenever the extension is updated
  • Extension icon URL is correct (do not use the icon's webpage but the raw data download URL that you get from the download button - it should look something like this: https://raw.githubusercontent.com/user/repo/main/SomeIcon.png)
  • Screenshot URLs (screenshoturls) are correct, contains at least one
  • Content of submitted json file is consistent with the top-level CMakeLists.txt file in the repository (dependencies, etc. are the same)
  • Homepage URL points to valid webpage containing the following:
    • Extension name
    • Short description: 1-2 sentences, which summarizes what the extension is usable for
    • At least one nice, informative image, that illustrates what the extension can do. It may be a screenshot.
    • Description of contained modules: at one sentence for each module
    • Publication: link to publication and/or to PubMed reference (if available) — no publication yet; manuscript in preparation
  • Hide unused github features (such as Wiki, Projects, and Discussions, Releases, Packages) in the repository to reduce noise/irrelevant information:
    • Click Settings and in repository settings uncheck Wiki, Projects, and Discussions (if they are currently not used).
    • Click the settings icon next to About in the top-right corner of the repository main page and uncheck Releases and Packages (if they are currently not used)
  • The extension is safe:
    • Does not include or download binaries from unreliable sources
    • Does not send any information anywhere without user consent (explicit opt-in is required)

Tier 3

  • Documentation, tutorial, and test data are provided for most modules. — Tutorial and sample data in progress; will be added before stable release.
  • Follows programming and user interface conventions of 3D Slicer (e.g., GUI and logic are separated, usage of popups is minimized, no unnecessary custom GUI styling, etc.) — GUI/logic are separated into Widget and Logic classes per Slicer convention. Minor custom button styling is used only to visually distinguish the three primary action buttons for usability.
  • The extension can be successfully built and packaged on all supported platforms (Windows, macOS, Linux) — Pure Python, no compiled components. Tested on Windows. macOS and Linux testing in progress.
  • Maintainers respond to issues and pull request submitted to the extension's repository.
  • Maintainers respond to questions directly addressed to him/her via @mention on the Slicer Forum.
  • Permissive license is used (MIT).
  • All requirements of tiers < 3.

Extension summary

XEOSIterativeSegmentation provides iterative threshold-based PET lesion segmentation directly within 3D Slicer, using a plateau-detection algorithm to automatically identify the optimal segmentation threshold for each lesion. No external tools or file format conversions are required — DICOM images are loaded and viewed natively in Slicer.

What it does

  • Step 1 — Load DICOM PET/CT studies directly via Slicer's built-in DICOM browser
  • Step 2 — Select PET and CT volumes; PET-DICOM colormap is applied automatically with CT as a 30% opacity overlay
  • Step 3 — Configure units (SUV or Bq/mL), plateau detection threshold, step size, and iteration count
  • Step 4 — Generate an Otsu-based initial segmentation (automatic thresholding + connected-component labelling), editable interactively in the Segment Editor before running
  • Step 5 — Run iterative segmentation: for each lesion label, thresholds are swept from the ROI minimum to maximum; the algorithm detects the volume plateau and locks in the optimal threshold, but continues recording the full convergence curve
  • Step 5b — Interactive plateau curve: a volume-vs-threshold chart is shown for each lesion. The user can click or drag directly on the curve to override the threshold and see the segmentation update live in the slice and 3D views
  • Step 6 — Export summary metrics and per-lesion iteration tables to Excel; convergence plot (all lesions on one figure) saved as PNG
  • Step 7 — Export PET, CT, initial segmentation, and final segmentation as NRRD/NIfTI/MHA; generate a rotating 360° MIP GIF with 3D-shaded segmentation surface overlay

Dependencies

Pure Python — all dependencies are bundled with Slicer (SimpleITK, NumPy, SciPy, VTK) or auto-installed on first use via pip_install (pandas, openpyxl, matplotlib, Pillow, imageio).

Notes on custom styling

Three action buttons (Open DICOM Browser, Generate Otsu Segmentation, Run Iterative Segmentation) use custom setStyleSheet with distinct colors (blue, teal, green) to help users — including clinical users unfamiliar with Slicer — identify the primary workflow steps at a glance. All other UI elements follow standard Slicer conventions.

No known related patents.

License: MIT

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant