Imaging Concepts
How medical images are acquired, oriented, windowed, compressed, and displayed — from raw DICOM pixel data to the multi-planar reconstructions radiologists read every day.
Anatomical Planes
Medical images are described relative to three standard anatomical planes of the body. Every DICOM instance encodes its orientation using the ImageOrientationPatient (0020,0037) tag — six cosines defining the row and column directions in patient space — so software can reconstruct which plane a slice belongs to without any additional metadata.
Axial (Transverse / Transaxial)
Horizontal plane dividing the body into superior (top) and inferior (bottom) portions. The most common acquisition plane — CT and most MR sequences acquire axially by default.
Z-axis (0, 0, 1) — pointing head-to-footRow direction: left→right (1,0,0) | Col direction: anterior→posterior (0,1,0)- ▸CT of chest, abdomen, pelvis
- ▸Brain MRI (all sequences)
- ▸Orbital, temporal bone, spine CT
| Anatomy seen | Circular cross-sections of bowel, vessels, organ lobes |
| Scroll direction | Superior → Inferior (head to foot) |
| DICOM tag | ImageOrientationPatient (0020,0037) = 1\0\0\0\1\0 |
Sagittal (Lateral)
Vertical plane dividing the body into left and right halves. The mid-sagittal (midsagittal) plane passes through the midline. Excellent for spinal cord, knee, shoulder, and brain midline structures.
X-axis (1, 0, 0) — pointing left-to-rightRow direction: anterior→posterior (0,1,0) | Col direction: superior→inferior (0,0,-1)- ▸Spine MRI (disc, cord, canal)
- ▸Knee MRI (ACL/PCL, menisci)
- ▸Shoulder MRI (rotator cuff)
- ▸Brain corpus callosum, pituitary
| Anatomy seen | Profile view — skull base, spine, sternum, great vessels |
| Scroll direction | Left → Right (or Right → Left) |
| DICOM tag | ImageOrientationPatient (0020,0037) = 0\1\0\0\0\-1 |
Coronal (Frontal)
Vertical plane dividing the body into anterior (front) and posterior (back) portions. Ideal for evaluating bilateral symmetry, renal anatomy, hip joints, and brain cortex.
Y-axis (0, 1, 0) — pointing anterior-to-posteriorRow direction: left→right (1,0,0) | Col direction: superior→inferior (0,0,-1)- ▸Renal / adrenal MRI
- ▸Hip and pelvis MRI
- ▸MRCP (bile ducts, pancreatic duct)
- ▸Chest X-ray equivalent view in CT
- ▸Brain cortical mapping
| Anatomy seen | Frontal view — bilateral kidneys, lungs, hip joints side-by-side |
| Scroll direction | Anterior → Posterior (front to back) |
| DICOM tag | ImageOrientationPatient (0020,0037) = 1\0\0\0\0\-1 |
Any plane tilted relative to the three standards. Achieved by rotating the ImageOrientationPatient vectors. Double-oblique planes are tilted in two axes simultaneously — essential for structures that don't align with cardinal planes (e.g. aortic valve, rotator cuff).
# How a viewer computes the slice position for oblique MPR: # Given: source volume voxels in patient coordinates # Target: arbitrary plane defined by: # Origin (x0, y0, z0) = centre of the reformatted slice # RowDir = (r1, r2, r3) — unit vector along image rows # ColDir = (c1, c2, c3) — unit vector along image columns # # For each output pixel (u, v): # patient_coords = origin + u*PixelSpacing*RowDir + v*PixelSpacing*ColDir # → trilinear interpolation of voxel at patient_coords
Synchronised Multi-Planar Views
Modern DICOM viewers display all three planes simultaneously in a 2×2 or 1×3 layout, with a 3D localiser or VRT rendering in the fourth quadrant. All views are linked — a radiologist clicks any point in any plane and all other planes immediately reformat to show the same anatomical location.
How Crosshair Position is Computed
# Given: user clicks pixel (px, py) in the Axial viewport # DICOM tags used: # ImagePositionPatient (0020,0032) = slice origin in mm [x, y, z] # ImageOrientationPatient (0020,0037) = [Rx,Ry,Rz, Cx,Cy,Cz] # PixelSpacing (0028,0030) = [row_spacing, col_spacing] in mm patient_x = origin_x + px * col_spacing * Rx + py * row_spacing * Cx patient_y = origin_y + px * col_spacing * Ry + py * row_spacing * Cy patient_z = origin_z + px * col_spacing * Rz + py * row_spacing * Cz # → (patient_x, patient_y, patient_z) in mm in DICOM Patient Coordinate System # The sagittal viewer scrolls to the slice where ImagePositionPatient.x ≈ patient_x # The coronal viewer scrolls to the slice where ImagePositionPatient.y ≈ patient_y
MPR & 3D Rendering Modes
Beyond simple slice viewing, modern PACS workstations offer a spectrum of reconstruction modes — from thin MPR slices to full volume renders — each suited to different clinical questions.
Reformats a 3D volumetric dataset (acquired in one plane) into arbitrary orthogonal or oblique 2D slices in real time. Requires isotropic or near-isotropic voxels for best quality.
- ▸Requires a contiguous stack of axial slices with no gap
- ▸Voxel size should ideally be ≤1mm in all directions (isotropic)
- ▸The three views (axial, sagittal, coronal) are always in sync — moving a crosshair in one updates the slice position in all others
- ▸Oblique MPR: rotate the reformatting plane to any angle (e.g. aligned to a vessel or joint)
- ▸Curved MPR: the reformatting plane follows a user-drawn curved path (e.g. along the aorta or dental arch)
Projects the maximum voxel value encountered along each ray through the volume onto the 2D image. Dense structures (contrast-enhanced vessels, bones, calcifications) appear bright.
- ▸Standard tool for CT angiography and MR angiography
- ▸Thin-slab MIP (5–30 mm) preserves depth cues better than full-volume MIP
- ▸Calcifications and bones can obscure vessels — bone subtraction MIP solves this
- ▸Time-resolved MIP (4D MIP) shows contrast bolus timing
Projects the minimum voxel value along each ray. Air-filled structures appear dark and stand out. Used for airways and MRCP.
- ▸Tracheobronchial tree visualisation (virtual bronchoscopy companion)
- ▸MRCP: bile ducts and pancreatic duct appear bright (high T2) against low-signal background
- ▸Emphysema quantification
Assigns opacity and color transfer functions to every voxel value to produce a semi-transparent 3D rendering. Used for surgical planning, patient communication, and complex fracture assessment.
- ▸Transfer function maps HU values to (color, opacity) pairs
- ▸Lighting model (ambient, diffuse, specular) adds 3D depth perception
- ▸Cinematic Rendering is a photorealistic variant using physically-based global illumination
- ▸GPU-accelerated in modern PACS — real-time rotation at 60 fps
Extracts a surface at a fixed HU threshold and renders it with Gouraud shading. Predecessor to VRT — simpler but less flexible.
- ▸Threshold typically 150–200 HU for bone
- ▸Fast to compute but misses structures with similar density
- ▸Largely replaced by VRT in clinical practice
Windowing & Display LUT
Raw DICOM pixel values in CT span −1000 to +3000+ HU — far more than the 256 grey levels a monitor can display. Windowing maps a chosen range of HU values to the full 0–255 display scale, discarding values outside the window. The two parameters are Window Center (WC) and Window Width (WW).
# Linear windowing formula: # WC = Window Center (0028,1050) # WW = Window Width (0028,1051) lo = WC - WW / 2 hi = WC + WW / 2 display_value = if pixel_value <= lo → 0 (black) if pixel_value >= hi → 255 (white) else → (pixel_value - lo) / WW × 255 # After Rescale (CT modality LUT): HU = pixel_value × RescaleSlope + RescaleIntercept # RescaleIntercept (0028,1052) is typically -1024 for CT # RescaleSlope (0028,1053) is typically 1
The DICOM standard also supports non-linear LUTs via the VOI LUT Sequence (0028,3010). Sigmoid mapping preserves more contrast at both ends of the window, reducing clipping of very bright or very dark structures.
# Sigmoid windowing (DICOM PS 3.3 C.7.6.3.1.5): # e = (pixel_value - WC + 0.5) / (WW + 1) # display = 255 / (1 + e^(-4 × e / 1))
Clinical Window Presets
| Preset | WC (HU) | WW (HU) | Range | Purpose |
|---|---|---|---|---|
| Brain | 40 | 80 | 0 → 80 | Grey/white matter differentiation |
| Subdural | 75 | 200 | -25 → 175 | Haemorrhage detection |
| Stroke | 32 | 8 | 28 → 36 | Subtle early ischaemia |
| Bone | 400 | 1800 | -500 → 1300 | Cortical and trabecular detail |
| Lung | -600 | 1500 | -1350 → 150 | Pulmonary parenchyma, airways |
| Mediastinum | 40 | 400 | -160 → 240 | Vessels, lymph nodes, soft tissue |
| Liver | 60 | 160 | -20 → 140 | Hepatic lesion detection |
| Soft Tissue | 50 | 400 | -150 → 250 | Muscles, fat planes, organs |
| Abdomen | 60 | 400 | -140 → 260 | General abdominal survey |
| Spine | 50 | 200 | -50 → 150 | Disc and cord detail |
| Angio | 300 | 600 | 0 → 600 | Contrast-enhanced vessels |
| PET SUV | 3 | 6 | 0 → 6 | Standardised uptake value scale |
Hounsfield Unit (HU) Reference
The Hounsfield scale is a linear transformation of the linear attenuation coefficient of X-rays. Water = 0 HU, air = −1000 HU by definition. Each tissue has a characteristic HU range that allows identification on CT.
Pixel Data Encoding
Pixel data lives in tag (7FE0,0010). How those bytes are interpreted depends on several companion tags.
(0028,0010)(0028,0011)(0028,0100)(0028,0101)(0028,0102)(0028,0103)(0028,0002)(0028,0004)Photometric Interpretations
| Value | Meaning | Modalities |
|---|---|---|
| MONOCHROME1 | Grayscale — minimum value is WHITE (used in X-ray). Pixel value 0 = white. | CR, DX, MG |
| MONOCHROME2 | Grayscale — minimum value is BLACK. Most common. Pixel value 0 = black. | CT, MR, PT, NM |
| PALETTE COLOR | Each pixel value indexes into a colour LUT (Red, Green, Blue lookup tables embedded in tags 0028,1101–1103). | NM, US (colour maps) |
| RGB | 3 samples per pixel in R, G, B order. 24-bit colour. | US, SC, pathology WSI |
| YBR_FULL | Luminance-chrominance. Y = luma, Cb/Cr = colour difference. Better JPEG compression. | US (after JPEG compression) |
| YBR_FULL_422 | 4:2:2 chroma subsampled YBR. Halves chrominance bandwidth. | US video |
| YBR_ICT | Irreversible Colour Transform — used with JPEG 2000 lossy. | After JPEG 2000 compression |
| YBR_RCT | Reversible Colour Transform — used with JPEG 2000 lossless. | After JPEG 2000 lossless |
Pixel Data Encapsulation (Compressed)
# Uncompressed: (7FE0,0010) OW — raw bytes, length = Rows × Columns × SamplesPerPixel × (BitsAllocated/8) # Example: 512×512 CT, 16-bit → 512 × 512 × 1 × 2 = 524,288 bytes # Compressed (encapsulated): VR = OB, length = 0xFFFFFFFF (undefined) # Format: Item sequence (FFFE,E000) Item length=0 ← Basic Offset Table (may be empty) (FFFE,E000) Item length=N ← JPEG / JPEG 2000 / RLE bitstream for frame 1 (FFFE,E000) Item length=M ← frame 2 ... (FFFE,E0DD) Sequence Delimiter
Transfer Syntaxes & Compression
A Transfer Syntax UID (stored in tag 0002,0010) defines two things: the byte ordering of non-pixel data (little vs big endian) and the compression applied to pixel data. Every DICOM association negotiates a mutually supported Transfer Syntax before data flows.
| UID | Name | Compression | Notes |
|---|---|---|---|
| 1.2.840.10008.1.2 | Implicit VR Little Endian | None | Legacy default. Being deprecated. |
| 1.2.840.10008.1.2.1 | Explicit VR Little Endian | None | Most widely used. Recommended for new implementations. |
| 1.2.840.10008.1.2.2 | Explicit VR Big Endian | None | Retired in DICOM 2016. |
| 1.2.840.10008.1.2.4.50 | JPEG Baseline (Process 1) | Lossy JPEG | 8-bit. Acceptable for photographic images, not CT/MR. |
| 1.2.840.10008.1.2.4.51 | JPEG Extended (Process 2 & 4) | Lossy JPEG | 12-bit support. |
| 1.2.840.10008.1.2.4.57 | JPEG Lossless (Process 14) | Lossless JPEG | Full fidelity preservation. |
| 1.2.840.10008.1.2.4.70 | JPEG Lossless (Selection Value 1) | Lossless JPEG | Most common lossless JPEG in DICOM. |
| 1.2.840.10008.1.2.4.80 | JPEG-LS Lossless | Lossless | Better compression than JPEG Lossless. |
| 1.2.840.10008.1.2.4.81 | JPEG-LS Near-lossless | Near-lossless | Configurable max error. |
| 1.2.840.10008.1.2.4.90 | JPEG 2000 Lossless | Lossless | Wavelet-based. Supports ROI coding. |
| 1.2.840.10008.1.2.4.91 | JPEG 2000 (Lossy or Lossless) | Lossy/Lossless | Progressive decode. Good for large images. |
| 1.2.840.10008.1.2.5 | RLE Lossless | Lossless RLE | Run-length encoding. Rarely used clinically. |
| 1.2.840.10008.1.2.4.100 | MPEG2 MP@ML | Lossy video | Video sequences (echocardiography, endoscopy). |
| 1.2.840.10008.1.2.4.102 | MPEG-4 AVC/H.264 | Lossy video | Higher quality video, smaller file. |
| 1.2.840.10008.1.2.4.202 | High-Throughput JPEG 2000 (HTJ2K) Lossless | Lossless | Near-lossless decode at full speed. Future standard. |
Multiframe DICOM & Enhanced IODs
Traditional DICOM stores one slice per file (Classic IOD). Enhanced DICOM (introduced with PS 3.3 2003) stores all frames of a series in a single file, dramatically reducing the number of files and enabling richer per-frame metadata via Functional Groups.
- ▸CT series of 500 slices → 500 .dcm files
- ▸Each file: ImagePositionPatient, ImageOrientationPatient
- ▸Simple — universally supported
- ▸High file count strains filesystems and DICOM SCPs
- ▸CT series of 500 slices → 1 .dcm file (Enhanced CT IOD)
- ▸Per-frame geometry in Per-Frame Functional Group Sequence (5200,9230)
- ▸Mandatory for 4D, cardiac CT, dynamic MR, spectroscopy
- ▸Requires enhanced-capable PACS / viewer
Key Multiframe Tags
| Tag | Name | Description |
|---|---|---|
| (0028,0008) | Number of Frames | Total number of frames in a multiframe image. |
| (0028,0009) | Frame Increment Pointer | Tag that describes how frames differ (e.g. time, slice position). |
| (0018,0088) | Spacing Between Slices | Distance between slice centres in mm. |
| (0020,0013) | Instance Number | Position of this instance within its series. |
| (5200,9229) | Shared Functional Group Sequence | Attributes common to all frames (Enhanced DICOM). |
| (5200,9230) | Per-Frame Functional Group Sequence | Per-frame geometry, timing, and exposure (Enhanced DICOM). |
| (0020,9056) | Stack ID | Groups frames that form a spatial stack. |
| (0020,9057) | In-Stack Position Number | Frame's position within its stack. |
| (0020,9128) | Temporal Position Identifier | Identifies the time point of a dynamic/DCE acquisition. |