Skip to main content
Version: v0.0.4

Interface: ImageView

Pixel-interpretation + geometry metadata (§4.2 / §4.3 / §4.4 / §4.5) - the "wrong pixels look fine" and "looks fine, measures wrong" classes. v1 does not decode pixels; this view surfaces exactly what a renderer needs so it does not have to guess.

Safety-critical omissions are intentional: rescaleSlope is absent (not 1) when the tag is absent; signed is absent (not a guess) unless (0028,0103) was present; photometricInterpretation is absent (not MONOCHROME2) when absent; the three pixel-spacing fields are distinct. When modalityLutSequence / voiLutSequence are present they are authoritative over the linear rescale* / window* pairs.

Example

import { parseDicom } from "@cosyte/dicom";
const img = parseDicom(buf).image;
img.rescaleSlope; // undefined ⇒ caller MUST NOT assume 1
img.signed; // undefined ⇒ signedness unknown, never guess
img.pixelSpacing; // patient-plane mm - distinct from imagerPixelSpacing

Properties

bitsAllocated?

readonly optional bitsAllocated?: number


bitsStored?

readonly optional bitsStored?: number


columns?

readonly optional columns?: number


frameOfReferenceUid?

readonly optional frameOfReferenceUid?: string


highBit?

readonly optional highBit?: number


imageOrientationPatient?

readonly optional imageOrientationPatient?: readonly (number | null)[]


imagePositionPatient?

readonly optional imagePositionPatient?: readonly (number | null)[]


imagerPixelSpacing?

readonly optional imagerPixelSpacing?: readonly (number | null)[]


isEnhancedMultiFrame

readonly isEnhancedMultiFrame: boolean

true when this object carries Per-Frame/Shared Functional Groups.


modalityLutSequence?

readonly optional modalityLutSequence?: readonly Item[]


nominalScannedPixelSpacing?

readonly optional nominalScannedPixelSpacing?: readonly (number | null)[]


numberOfFrames?

readonly optional numberOfFrames?: number


photometricInterpretation?

readonly optional photometricInterpretation?: string


pixelRepresentation?

readonly optional pixelRepresentation?: number

Raw (0028,0103) value: 0 = unsigned, 1 = signed. Absent ⇒ unknown.


pixelSpacing?

readonly optional pixelSpacing?: readonly (number | null)[]


planarConfiguration?

readonly optional planarConfiguration?: number


realWorldValueMaps?

readonly optional realWorldValueMaps?: readonly RealWorldValueMap[]


rescaleIntercept?

readonly optional rescaleIntercept?: number


rescaleSlope?

readonly optional rescaleSlope?: number


rescaleType?

readonly optional rescaleType?: string


rows?

readonly optional rows?: number


samplesPerPixel?

readonly optional samplesPerPixel?: number


signed?

readonly optional signed?: boolean

true/false only when (0028,0103) was 1/0; absent ⇒ never guessed.


sliceThickness?

readonly optional sliceThickness?: number


sopInstanceUid?

readonly optional sopInstanceUid?: string


spacingBetweenSlices?

readonly optional spacingBetweenSlices?: number


units?

readonly optional units?: string


voiLutSequence?

readonly optional voiLutSequence?: readonly Item[]


windowCenter?

readonly optional windowCenter?: readonly (number | null)[]


windowWidth?

readonly optional windowWidth?: readonly (number | null)[]

Methods

frame()

frame(index): FrameFunctionalGroups

Resolve the functional-group macros for frame index Per-Frame-else-Shared. Throws DicomValueError FRAME_INDEX_OUT_OF_RANGE for an index outside [0, numberOfFrames) and MISSING_REQUIRED_FUNCTIONAL_GROUP when an enhanced object lacks a required geometry macro in both groups.

Parameters

index

number

Returns

FrameFunctionalGroups