Source code for medical_image.algorithms.bit_depth_norm

"""
Bit Depth Normalization Algorithm.

Auto-detects ``BitsStored`` from the DICOM header and normalizes pixel
values to a target range (default [0, 255]).

Pipeline:
    1. Detect bit depth from DICOM tag ``BitsStored`` (or infer from pixel range).
    2. Compute source max = 2^bits - 1.
    3. Linear map [0, source_max] → [0, target_max].

Example:
    >>> algo = BitDepthNormAlgorithm()         # auto-detect from header
    >>> output = image.clone()
    >>> algo(image, output)                    # output in [0, 255]

    >>> algo = BitDepthNormAlgorithm(bits_stored=12, target_max=1.0)
    >>> algo(image, output)                    # output in [0, 1]
"""

from typing import Optional

from medical_image.algorithms.algorithm import Algorithm
from medical_image.data.image import Image
from medical_image.process.mammography import MammographyPreprocessing


[docs] class BitDepthNormAlgorithm(Algorithm): """ Bit depth normalization algorithm for DICOM images. Detects bit depth automatically from the DICOM header (``BitsStored``) and normalizes pixel values from [0, 2^bits - 1] to [0, target_max]. Args: bits_stored: Explicit bit depth override. If None, read from the DICOM header or inferred from the pixel range. target_max: Upper bound of the output range (default 255.0). device: Torch device. """
[docs] def __init__( self, bits_stored: Optional[int] = None, target_max: float = 255.0, device: str = None, ): super().__init__(device=device) self.bits_stored = bits_stored self.target_max = target_max self._normalize = lambda img, out: MammographyPreprocessing.normalize_bit_depth( image=img, output=out, bits_stored=self.bits_stored, target_max=self.target_max, device=self.device, )
[docs] def apply(self, image: Image, output: Image) -> Image: """ Normalize pixel values to the target range. Args: image: Input image (ideally DicomImage with dicom_data). output: Output Image — pixel_data in [0, target_max]. Returns: The output Image. """ self._normalize(image, output) return output