SurfAnnotate Surface ROIs and vertex selection

Cortical surface annotation in the browser

Delineate ROIs on a cortical surface, and export them.

Load a FreeSurfer or GIfTI surface — folded, inflated, spherical, or an unfolded flat — and mark regions by clicking along their border. The points are joined by the shortest path across the mesh, so the border follows the surface rather than a straight line through it. ROIs are drawn in sequence and partition the surface: each one's border becomes the edge the next is closed against, so neighbouring ROIs share a boundary exactly instead of having overlapping vertices.

Your surfaces, overlays and labels never leave this machine — there is no server to send them to.

How it works

1

Load a surface

Pick a file or drop it on the viewer. Load several and switch between them; an ROI drawn on the inflated surface is still there on the folded one.

2

Click the border

Nothing is traced while you click, hold and hover around the surface, so you can rotate freely. Close the border and fill it. On a cut surface the edge of the flat surface closes it for you — two points can be enough.

3

Save and export

Saved ROIs become the edges the next ones are drawn against, and can be reopened to adjust. Export each as a .label or .label.gii.

Surfaces

Load the geometry you want to annotate.

    FreeSurfer (lh.pial, lh.white, lh.inflated), GIfTI .surf.gii, .mz3 and more. Drop files on the viewer to add them.

    Overlays

    Add scalar or label data to the active surface.

      Curvature, thickness, .annot, .label.gii, .shape.gii, CIFTI .dscalar.nii.

      Optional. Every overlay is drawn only where the mask is non-zero; curvature is always shown. A file with "mask" in its name can just be dropped on the viewer.

      to

      Annotate

      Trace a closed region or mark individual vertices.

      Click to place border points around the region. Nothing is traced until you close the ROI, so you can rotate freely while placing them.

      Points are joined in the order you place them, not by which are nearest each other. Work consistently along the border in one direction. Close ROI joins the last point back to the first.

      Markers are drawn on top of the view at a fixed size, each with a contrasting outline so it stays visible over any surface or overlay. Landmarks use the same colour and the other shape.

      0.55

      The interior is detected automatically; if it is ambiguous you are asked to click inside the region you want. Closing on the edge takes the smaller side.

      With Include boundary vertices off, a saved ROI does not own the row it was drawn along, so the next ROI drawn against it claims that row. Tick it before saving to keep the border where you clicked it.

      Saved ROIs

      Name, organise and revisit completed regions.

        How ROI partitioning works

        Each ROI is drawn on the vertices left by the ROIs above it, so no vertex belongs to two regions. Editing one re-derives the regions below it. Use ▲▼ to set priority, to reopen a border, or select a name to export that ROI.

        Export

        Download the active region in your preferred format.

        Used in the file name and inside the file.

        Coordinates are written in the loaded surface's space.

        Drop a cortical surface here FreeSurfer, GIfTI and MZ3 files are supported. Processed locally in this browser — nothing is uploaded.
        Load a surface to begin.

        Citations

        SurfAnnotate delineates regions in your browser; the rendering and mesh parsing are NiiVue's. Please cite it if the figures or labels reach a paper.

        Visualization

        NiiVue

        NiiVue Contributors. NiiVue: a WebGL2 medical image viewer.

        https://github.com/niivue/niivue