Skip to content
Back to skills

Dicom 12bit Pixel Correction

ASecurity

Fix pixel overflow artifacts in 12-bit unsigned DICOM files where values wrap around at 4096

  • 61 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 12, 2026
businesspython

Security analysis

A100/100

Scanned September 12, 2026

npx -y skills add wenmin-wu/ds-skills --skill dicom-12bit-pixel-correction --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Dicom 12bit Pixel Correction?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Dicom 12bit Pixel Correction
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/wenmin-wu-dicom-12bit-pixel-correction/badge)](https://www.skillsdirectory.com/skills/wenmin-wu-dicom-12bit-pixel-correction)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: cv-dicom-12bit-pixel-correction
description: Fix pixel overflow artifacts in 12-bit unsigned DICOM files where values wrap around at 4096
---

## Overview

Some DICOM files store pixel data as 12-bit unsigned integers (BitsStored=12, PixelRepresentation=0) but report a RescaleIntercept near 0 instead of -1024. This causes pixel values to wrap around at 4096, producing artifacts. Detecting and correcting this before HU conversion prevents corrupted images from entering the training pipeline.

## Quick Start

```python
import pydicom
import numpy as np

def correct_dcm(dcm):
    x = dcm.pixel_array + 1000
    px_mode = 4096
    x[x >= px_mode] = x[x >= px_mode] - px_mode
    dcm.PixelData = x.tobytes()
    dcm.RescaleIntercept = -1000

def safe_pixel_array(dcm):
    if (dcm.BitsStored == 12
        and dcm.PixelRepresentation == 0
        and int(dcm.RescaleIntercept) > -100):
        correct_dcm(dcm)
    return dcm.pixel_array * dcm.RescaleSlope + dcm.RescaleIntercept
```

## Workflow

1. Check DICOM metadata: BitsStored, PixelRepresentation, RescaleIntercept
2. If 12-bit unsigned with suspiciously high intercept (> -100), apply correction
3. Shift pixels by +1000, wrap values >= 4096 back by subtracting 4096
4. Update RescaleIntercept to -1000 and rewrite PixelData
5. Proceed with normal HU conversion using corrected values

## Key Decisions

- **Detection condition**: BitsStored==12 AND PixelRepresentation==0 AND RescaleIntercept > -100. This catches the specific encoder bug without affecting normal files.
- **Shift value**: +1000 followed by modulo 4096 unwraps the overflow. The new intercept (-1000) produces correct HU values.
- **In-place vs copy**: Modifying dcm.PixelData in-place is faster but mutates the object. Clone first if you need the original.

## References

- [RSNA InceptionV3 Keras](https://www.kaggle.com/code/akensert/rsna-inceptionv3-keras-tf1-14-0)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…