Service 01

Dual-energy X-ray image processing software

We turn a detector's "raw" output into a meaningful image with material discrimination — from reading detector lines to a live colour picture on the operator's display. At its heart is multi-energy (dual energy) processing that tells organics, inorganics and metals apart.

Overview

From two energies to material you can read.

A standard X-ray image only conveys how strongly radiation is attenuated, which makes it hard to separate a thick sheet of plastic from a thin piece of metal. The dual-energy technique (two-energy, and in its extended form multi-energy) measures attenuation across several energy bands at once, deriving a material's effective atomic number (Zeff) and density from how it reacts to "soft" versus "hard" radiation.

That makes it possible to sort materials into classes and tint them by colour (organic, inorganic, metal), detect threats and prohibited items more reliably, and improve recognition by exploiting several energy channels and scan angles. We deliver both the classic two-energy method and richer multi-energy schemes.

Capabilities

What our software does.

One pipeline from the detector line to the operator's screen — every stage tunable through swappable processing profiles.

ACQ

Acquisition & frame assembly

Live line reading with buffering, 2D frame assembly that respects scan direction, presampling to settle the detector, service-pixel trimming and a unique ID per scan.

CAL

Detector calibration

Offset (dark-current) and gain (sensitivity) calibration per energy channel and scan angle — on the detector (on-board) or in software (off-board), with coefficients written back to the detector.

ENH

Processing & enhancement

Dynamic range management (DRM) with per-channel gamma, sharpening filters and an unsharp mask on the luminance channel, plus step-by-step brightness, contrast and gamma on hotkeys.

COL

Colour coding & material discrimination

Colorization by effective atomic number (organic / inorganic / metal), 15+ colour modes, and material filters (stripping) to hide or accentuate classes of substance.

VIZ

Real-time visualization

Hardware-accelerated display through modern OpenGL: zoom, pan, fit-to-window, one- or two-monitor layouts, and histograms for the energy and LAB channels.

ARC

Archive & operator workstation

Automatic scan storage with metadata in an image database, event/error logging and equipment telemetry, plus operator / administrator role separation.

Solution architecture

A typical processing pipeline runs as follows:

  1. Detector
  2. line acquisition
  3. frame assembly
  4. calibrationoffset · gain
  5. DRM
  6. filteringsharpening · unsharp
  7. colorizationdual energy
  8. OpenGL visualization
  9. archive

Every stage is driven by processing profiles the operator can swap on the fly. Demanding operations are pushed onto separate threads and rendering is handed to the GPU — which keeps things real-time even when the conveyor runs fast.

How colorization works: from two energies to a colour image

Colorization in X-ray inspection is not "colouring to look pretty" — it shows the operator what each object is made of. Our own engine converts two "raw" energy channels into a colour image, where colour stands for material type and brightness stands for density and thickness. This depth of work is exactly where our expertise lies: most integrators treat colorization as a "black box", while we command it at the algorithm level.

Step 1. Material classification from two energies

The input is two values per pixel — high-energy (HE) and low-energy (LE). Their ratio is governed by the substance's effective atomic number (Zeff): light elements (organics) and heavy ones (metals) attenuate "soft" and "hard" radiation differently. The engine uses a two-dimensional classification table (LUT) 1024×1024 — a (LE, HE) pair addresses a cell that already holds the material class, so each pixel is classified in a single memory lookup. Materials fall into organics, inorganics and mixtures, metals and heavy materials, plus background/air and impenetrable zones (optionally marked in red).

Step 2. Building the brightness (grayscale) channel

In parallel a brightness channel conveys density and thickness through HE/LE fusion (weighted by penetration), eight tone curves (logarithmic, linear, exponential with saturation thresholds), absorption gamma in 51 steps (−25…+25), four penetration modes (Standard, High/Low Penetration, Slice) and dynamic brightness (Shadow). For speed these transforms are fused into one end-to-end LUT — a single pass over the image, which is what makes real-time operation possible.

Step 3. Colour modes (palettes)

Material class and brightness are merged and rendered through the chosen palette. The supported set (readily extensible):

ModePurpose
Material Color (standard)Classic security palette: orange — organics, green — mixtures, blue — metal/inorganics
GreyPlain grayscale — maximum detail and penetration
Organic Single / Single+ (OS / OS+)Highlights organics and suppresses the rest
Material / Inorganic Single (MS / MS+)Highlights inorganics and metals
Zeff 7 / 8 / 9Palettes with different effective-atomic-number thresholds
Pseudo Color 1–6Pseudo-colour schemes that boost visual contrast
LiquidMode dedicated to liquid analysis

Step 4. Material filters (material stripping)

The operator can "subtract" whole classes of material to concentrate on threats: all materials, organics only / inorganics only, or hide organics / hide inorganics — leaving only the class of interest against the background.

Image enhancement

On top of colorization we apply edge enhancement (modified Laplacian) for crisp outlines, Super Enhance for local contrast, and Super Penetration for dark (dense) regions — reduced algorithmically to linear O(W·H) complexity.

Real time: line-by-line processing

The engine runs full-frame (for static scans and the archive) and in streaming (line-by-line) mode, where data is handled as columns arrive from the line-scan detector. Edge enhancement uses a sliding window of three columns with a one-column delay — roughly 1.7 ms at 600 columns/s, which is what gives a "live" image on the moving conveyor.

Engine architecture

The colorization core is pure C++17 with no GUI dependency (Qt is not needed), so it embeds in both the desktop operator software and in server/sorting pipelines (see X-ray transmission sorting XRT). The output is a finished ARGB frame; the catalogue of colour modes grows without altering the calling code.

Technology stack

  • C++ (high-performance processing core), modular DLL/SO with an extern "C" ABI.
  • OpenGL with a programmable pipeline for display.
  • Qt for the operator interface.
  • Cross-platform: Windows and Linux.
  • Thread-safe design for processing several images in parallel.

More about technologies

What you get

A pipeline tuned to your load — and yours to keep.

Source & documentation

Full source code, documentation and the rights to use and modify it — no lock-in to the contractor.

Tuned to your materials

Calibration, palettes and processing profiles set up for your detector, generator and the substances you need to tell apart.

Production-ready real-time

GPU-accelerated, line-by-line streaming that holds up at conveyor speed, ready for series operation.

Where it is used

Across screening, sorting and inspection.

  • Security-screening scanners
  • Baggage & cargo
  • XRT material sorting
  • Industrial X-ray inspection
  • Food foreign-body control
  • Fill-level control
Related services

Works together with.

Contact

Let's size up your image processing task.

Tell us which detector and generator you use and which materials you need to tell apart — we'll propose a processing pipeline and colorization modes suited to your task.