Skip to content

Add en face slab viewing - #978

Open
PaulHax wants to merge 13 commits into
Kitware:mainfrom
PaulHax:oct-en-face
Open

PaulHax wants to merge 13 commits into
Kitware:mainfrom
PaulHax:oct-en-face

Conversation

@PaulHax

@PaulHax PaulHax commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

Add an En face view for grayscale 3D volumes, including native retinal OCT. Mean, maximum, and sum projections use an adjustable slab along any source-grid axis, with independent contrast, pan, zoom, crosshairs, and reference lines. Changing the projection refits automatic contrast, and the view configuration is saved with the session.

Support native OCT spatial metadata and retain valid DICOM pixel spacing and multiframe spacing. The shared slab representation uses vtk.js reslice rendering with corrections for slab sampling and nonzero image extents. See the view implementation and mapper patch.

Includes the retinal sample with companion labels loaded by segmentation filename matching.

@netlify

netlify Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for volview-dev ready!

Name Link
🔨 Latest commit bfc4282
🔍 Latest deploy log https://app.netlify.com/projects/volview-dev/deploys/6ae53024ed9151f988d6b0bd
😎 Deploy Preview https://deploy-preview-978--volview-dev.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@PaulHax
PaulHax marked this pull request as draft October 19, 2026 18:53
@PaulHax PaulHax changed the title Add retinal OCT en face viewing and thickness highlighting Add Enface slab viewing and occupied-depth highlighting Oct 27, 2026
Comment thread docs/configuration_file.md Resolved
Comment thread docs/configuration_file.md Resolved
@PaulHax
PaulHax force-pushed the oct-en-face branch 2 times, most recently from 6362f0f to 59b60f2 Compare October 29, 2026 00:34
@PaulHax PaulHax changed the title Add Enface slab viewing and occupied-depth highlighting Add Enface slab viewing Oct 29, 2026
@PaulHax
PaulHax changed the base branch from main to segmentation-filename-matching October 29, 2026 00:35
@PaulHax
PaulHax force-pushed the segmentation-filename-matching branch from 89ea736 to 492e025 Compare October 29, 2026 00:53
@PaulHax PaulHax changed the title Add Enface slab viewing Add en face slab viewing Oct 29, 2026
@PaulHax
PaulHax changed the base branch from segmentation-filename-matching to main October 29, 2026 02:29
@PaulHax
PaulHax marked this pull request as ready for review October 29, 2026 14:04
Read a 64 KiB prefix and expand bounded header probes before falling back
to the existing full-file parse. Accept a prefix only after the complete
Pixel Data element header is found. Deflated datasets keep the complete
stream and inflater path, including trailing NULL padding.

Add regression coverage for the read budget, a probe ending between
metadata elements, oversized headers, and deflated streams larger than
the first probe. Geometry and pixel values are unchanged.

Chromium 148 metadata-helper benchmarks, seven retained alternating
samples using the same synthetic OCT header and padded Blobs:
- 32 MiB: 46.6 ms -> 2.0 ms
- 128 MiB: 288.5 ms -> 2.8 ms
- 256 MiB: 492.5 ms -> 1.9 ms
The optimized helper reads 64 KiB in these cases and returns identical
metadata. These isolate header-read cost, not full image decoding.

A valid 512x512x256 synthetic OCT DICOM also loaded and rendered in both
production builds: request-to-first-visible medians 5.75 s -> 4.87 s
(three measured pairs after warmup, localhost, software WebGL). Shared
host variation means this is not a general first-render speedup claim.

Validation: 75 focused tests passed; production build/typecheck, ESLint,
Prettier, and diff checks passed. One existing network-dependent streaming
test could not resolve data.kitware.com (EAI_AGAIN).
Return the En face unavailable reason directly, and check each chunk's
fixed tag list once instead of rebuilding a tag map for every chunk on
every toolbar render and crosshairs drag.

Pass the viewer's slab geometry to the projection representation rather
than deriving it again, and drop geometry fields that only tests read.

Share the settings defaults, the independent windowing predicate, the
range slider thumb labels, a DICOM parser key helper, and the camera
navigation manipulators, which cine views now use too. Coerce the
current tool from its own availability, and remove the histogram sample
width that no caller changes.

Consolidate the OCT test selectors, option pickers, mask attachment and
reference line hooks, and remove unused test helpers.

This branch has not been deployed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant