Skip to main content

DICOM

Encord provides native support for Digital Imaging and Communications in Medicine (DICOM) browser rendering and data annotations. With the DICOM editor, you can:

  • Annotate modalities such as CT, X-ray, and MRI
  • Label using any annotation type in 2D (with 3D in the works), and seamlessly toggle between axial, coronal, and sagittal views
  • Render 20,000 pixel intensities and set custom window widths & levels
  • Natively display DICOM metadata
  • Track and interpolate objects between slices
  • Reduce manual annotations with automation features

DICOM editor components:

  • A. Load previous/next DICOM file (if viewing DICOM file outside the task manager)
  • B. Toolbar with scissors (bulk vertex removal), measurement tools, windowing adjustment, image centering, and zoom
  • C. Editor menu
  • D. Slice slider and sliceskip interval
  • E. Instances and frame labels
  • F. Classes

Task Management#

Before we get into the details of the label editor and making annotations, a quick note about scheduling annotation work. Annotation is done in the annotation phase of the task management system. In order to ensure annotation work is saved properly, it's crucial that each labeling task is properly assigned to an annotator, annotators always access the task through the Queue tab in the Task Management System, and only the assigned annotator works on any given task at any given time.

Navigation#

Skip through slices in the DICOM file with the Left and Right arrow keys, the forward and backward buttons, or by scrolling using your mousewheel or trackpad. The number of slices skipped is determined by the specified Frameskip interval. Frameskip intervals can be set using the predefined values or customized by entering a value in the New input and clicking the Plus icon.

Navigate through the slices by scrubbing through or clicking anywhere on the progress bar.


note

"Slices" and "Frames" are used interchangeably in our DICOM editor documentation.

Display#

Hounsfield Units#

The Encord DICOM viewer renders DICOM files natively in the browser, allowing for displaying the full range of the Hounsfield scale (i.e., 20,000+ pixel intensities) and beyond the 8-bit pixel intensity limitation of RGB. Hounsfield values are projected directly on the image. The example below has the cursor pointing to Hounsfield Value 1591.

2D Multiplanar reconstruction (MPR)#

The MPR display provided within Encord reconstructs images in 2D orthogonal planes (coronal, sagittal, axial), helping to visualize, analyze, and annotate the anatomy, which is impossible with the base image alone. Cross-reference lines are projected across the three views to aid you in accurate anatomy annotations.

The Encord DICOM viewer displays the base image in the left viewport for annotations, which can be either the coronal, axial, or sagittal view.


note

Our team is working on adding support for native 3D reconstruction.

Window width (WW) and window level (WL)#

Toggle the DICOM settings menu by clicking the Healthcare icon in the editor menu pane. Adjust window widths and levels using the sliders or setting desired input values. Save custom levels as presets for quick access later.

Use the more natural windowing adjustment functionality by clicking the Adjust windowing button in the toolbar or pressing alt + w on your keyboard. Next, press the left mouse button and drag the mouse to change the window width or level:

  • Up to increase window level
  • Down to decrease window level
  • Left to shrink window width
  • Right to expand window width

Metadata#

The Encord DICOM viewer renders DICOM files natively in the browser, allowing you to access and display any metadata in the DICOM file. Pieces of metadata can be displayed as overlays or hidden entirely. Toggle the DICOM settings menu by clicking the Healthcare icon in the editor menu pane. Then, toggle the 'Data overlay' switch to display or hide metadata overlay.


note

Custom DICOM metadata such as text reports from radiological descriptions can be rendered in popout drawers. Please email support@encord.com to add drawers with custom DICOM metadata.

Tools#

Distance measurement#

The distance measurement tool can be used to measure accurate, real-world distance in millimeters between any two points in an image. Enable the distance measurement functionality by clicking the Measure distance button in the toolbar or pressing alt + m on your keyboard. Please note that deleting existing measurements requires you to have the distance measurement functionality enabled. Erase measurements by selecting the specified measurement and hitting backspace or del on your keyboard.

Annotation types#

Objects are annotated using bounding boxes, polygons, polylines, keypoints or primitives. Slices are annotated using classifications. Instantiating objects or classifications in the DICOM editor generates a UUID that uniquely identifies that instance across a range of slices (i.e., in the spatial dimension). The identifier is sometimes called a "track," with numerical IDs supplementing UUIDs for objects for visual aid.

Object instances can be assigned with static and dynamic classifications (i.e., spatial classifications that may change through the volume) as defined in the specified ontology. Static classifications define the global properties of an object (e.g., the surgical tool has three forks) whereas dynamic classifications change during the volume (e.g., the brain has a tumour present from slices 0 to 100 but none from frame 101 to 150).

Supported annotation types & corresponding features are listed in the table below. You can read more about the listed automation features here.

Annotation typeDynamic classificationImport predictionsInterpolation
Bounding box
โœ…
โœ…
โœ…
Polygon
โœ…
โœ…
โœ…
Polyline
โœ…
โœ…
Coming soon
Point
โœ…
โœ…
โœ…
Primitive
โœ…
โœ…
โœ…
Frame classification
N/A
โœ…
N/A

Bounding box#

Creating a bounding box requires an ontology with a bounding box annotation type. Instantiate a new bounding box instance by clicking on the specified class in the 'Classes' menu, or by using the specified hotkey (e.g., 1, 2, 3).

Instantiating existing bounding box instances (i.e., bounding boxes that should keep the same identifier in preceding or succeeding slices) can be done by clicking on the Highlight icon for the specified object or using the assigned hotkey (e.g., q, w, e).

Bounding boxes can be copy/pasted between slices using cmd (MacOS)/ctrl (Windows) + c to copy the object to the clipboard and cmd/ctrl + v to paste it on the desired slice. See this visual illustration.

Bounding box instances can be assigned with static and dynamic classifications should they be defined in your ontology

  • Highlight an object by clicking on it in the DICOM editor canvas or by clicking on the Plus icon or start/end slice in the range overview for the specified bounding box
  • Assign a classifications by clicking on the relevant buttons or using the set hotkeys (e.g., q, u).

Interpolation#

Interpolation is run via the 'Automated labeling' drawer. Click the Automated labeling button to open the drawer. Select Interpolation from the dropdown menu, select the desired objects to interpolate, set the interpolation range (i.e., the range of slices) and click the Run interpolation button. Please note that you need a minimum two labels of an instance to run interpolation.

You can read more about interpolation here.

Polygon#

Creating a polygon requires an ontology with a polygon annotation type. Enable or disable free-hand drawing mode by pressing d on your keyboard. Polygon coarseness for polygons drawn free-hand is set in the 'Settings' drawer in the Drawing settings dropdown. Instantiate a new polygon instance by clicking on the specified class in the 'Classes' menu or using the specified hotkey (e.g., 1, 2, 3).

A polygon can be closed by double-clicking anywhere on the canvas. Doing so will "snap" creating an edge between the last vertex to the first vertex drawn.

Instantiate existing polygon instances (i.e., polygons that should keep the same identifier in preceding or succeeding slices) by clicking on the Highlight icon for the specified object or using the assigned hotkey (e.g., q, w, e). See the keypoint documentation for visual instructions on how to instantiate existing polygons.

Polygons can be copy/pasted between slices using cmd (MacOS)/ctrl (Windows) + c to copy the object to the clipboard and cmd/ctrl + v to paste it on the desired slice.

Polygon instances can be assigned with static and dynamic classifications should they be defined in your ontology:

  • Highlight an object by clicking on it in the editor canvas or by clicking on the Plus icon or start/end slice in the range overview for the specified polygon
  • Assign a classifications by clicking on the relevant buttons or using the set hotkeys (e.g., q, u)

Interpolation#

Run polygon interpolation following the instructions for bounding box, which you can find here. Unlike other linear interpolation methods, Encord's polygon interpolation algorithm does not require a matching number of vertices between polygon objects in set keyframes. Our algorithm also allows you to draw polygons in arbitrary directions (e.g., clockwise, counterclockwise, and otherwise).

Editing polygons with the brush tool#

You can edit existing polygons with the brush tool. This allows you to create complex shapes in a much faster way than going vertex by vertex. To use the brush tool, select an existing polygon and then click on the brush tool button. This will show the brush tool settings panel where you can choose the brush or eraser and change its size. Once you are done editing, click the "x" to go back to the label editor.

Polyline#

Creating a polyline requires an ontology with a polyline annotation type. Enable or disable free-hand drawing mode by pressing d on your keyboard. Polyline coarseness for polylines drawn free-hand is set in the 'Settings' drawer in the Drawing settings dropdown. Instantiate a new polyline instance by clicking on the specified class in the 'Classes' menu or using the specified hotkey (e.g., 1, 2, 3).

Polylines can be copy/pasted between slices using cmd (MacOS)/ctrl (Windows) + c to copy the object to the clipboard and cmd/ctrl + v to paste it on the desired slice.

Complete a polyline by double-clicking anywhere on the canvas.

Instantiate existing polyline instances (i.e., polylines that should keep the same identifier in preceding or succeeding slices) by clicking on the Highlight icon for the specified object or using the assigned hotkey (e.g., q, w, e).

Polyline instances can be assigned with static and dynamic classifications should they be defined in your ontology:

  • Highlight an object by clicking on it in the editor canvas or by clicking on the Plus icon or start/end frame in the range overview for the specified polyline
  • Assign a classification by clicking on the relevant buttons or using the set hotkeys (e.g., q, u)

Keypoint#

Creating a keypoint requires an ontology with a keypoint annotation type. Instantiate a new keypoint instance by clicking on the specified class in the 'Classes' menu or using the specified hotkey (e.g., 1, 2, 3).

Instantiate existing keypoint instances (i.e., keypoints that should keep the same identifier in preceding or succeeding slices) by clicking on the Highlight icon for the specified object or using the assigned hotkey (e.g., q, w, e).

Keypoints can be copy/pasted between slices using cmd (MacOS)/ctrl (Windows) + c to copy the object to the clipboard and cmd/ctrl + v to paste it on the desired slice.

Keypoints instances can be assigned with static and dynamic classifications should they be defined in your ontology:

  • Highlight an object by clicking on it in the editor canvas or by clicking on the Plus icon or start/end frame in the range overview for the specified keypoint
  • Assign classifications by clicking on the relevant buttons or using the set hotkeys (e.g., q, u)

Interpolation#

Run keypoint interpolation following the instructions for bounding box, which you can find here.

Primitives#

Creating a primitive (f.k.a. skeleton templates) requires an ontology with a primitive annotation type. Use primitives to templatize shapes (example, 3D cuboids, pose estimation skeletons, rotated bounding boxes) commonly used by your annotation team.

Create a primitive ontology for data labeling

To instantiate a new primitive instance, click on the specified class in the 'Classes' menu or use the specified hotkey (e.g., 1, 2, 3).

Instantiate existing primitive instances (i.e., primitives that should keep the same identifier in preceding or succeeding slices) by clicking on the Highlight icon for the specified object or using the assigned hotkey (e.g., q, w, e).

Primitives can be copy/pasted between slices using cmd (MacOS)/ctrl (Windows) + c to copy the object to the clipboard and cmd/ctrl + v to paste it on the desired slice.

Primitives allow you to define properties of edges defined in your template as visible, occluded, or invisible. Toggle the edge property settings for a primitive by highlighting the primitive and clicking the Show controls button.

Primitive instances can be assigned with static and dynamic classifications should they be defined in your ontology:

  • Highlight an object by clicking on it in the editor canvas or by clicking on the Plus icon or start/end frame in the range overview for the specified primitive
  • Assign classifications by clicking on the relevant buttons or using the set hotkeys (e.g., q, u)

Interpolation#

Run primitive interpolation following the instructions for bounding box, which you can find here.

Frame classification#

Creating frame (or slice) classification(s) requires an ontology with a classification annotation type. Frame-level classifications consider the frame as a whole, not the objects' localization. Instantiate a frame-level classification instance by clicking on the specified class in the 'Classes' menu or using the specified hotkey (e.g., 1, 2, 3).

Set the desired start and end frame by clicking the Set start to current and Set end to current buttons or using the set hotkeys c and v, respectively. Click the This frame button or the x hotkey to set the slider to only the current frame (e.g., frame 100). Add additional ranges by clicking the Add range button or pressing the n hotkey to add a frame range. Click the Save button or the m hotkey to save the instance. Use the This frame & save button or the z hotkey to classify and save the results for a single frame quickly.

Encord currently supports radio, checklist, and free-form text input classification types.

Edit existing classification instances by clicking on the Plus icon for the specified instance in the 'Classifications' pane in the 'All instances' section.

Dynamic classification#

Static classifications define the global properties of an object (e.g., the surgical tool has three forks) whereas dynamic classifications change during the volume (e.g., the brain has a tumour present from slices 0 to 100 but none from frame 101 to 150). Assigning dynamic classification to objects requires an ontology with the dynamic classification flag toggled.

Encord supports dynamic classifications for all object annotation types (i.e., bounding box, polygon, polyline, keypoint, and primitives).

Highlight the desired object to assign dynamic classifications. Dynamic classifications are recognized by the Dynamic tag next to the given feature in the ontology. Dynamic classifications are only applied in the slices specifically indicated but can be edited in ranges if they span multiple slices. See the keypoint documentation for visual instructions on how to dynamically classify existing objects.

Edit the ranges of dynamic classifications by toggling the object menu dropdown, selecting the relevant dynamic classification, and clicking the Edit range button. Use the progress bar to change the specified range.

Automation#

Interpolation#

Encord's interpolation feature uses a proprietary linear interpolation algorithm that runs without using a representational model or matching pixel information in neighbouring frames.

Our interpolation algorithm has been built with pragmatic usage in mind. For example, unlike other linear interpolation methods, Encord's interpolation algorithm does not require a matching number of vertices between objects in set keyframes. Our algorithm also allows you to draw object vertices in arbitrary directions (e.g., clockwise, counterclockwise, and otherwise).

Import model predictions#

Encord's Python SDK & APIs allow you to import model predictions programmatically. Importing model predictions helps to pre-annotate your data to save annotation costs and use our quality control system for model validation.