All work Computer Vision · Medical AI · Production

Real-time blind X-ray image super-resolution

Super-resolution and denoising on live cath-lab X-ray feeds — owned end-to-end, from model R&D through INT8/FP16 quantization to TensorRT/C++ serving, at $200K+ ARR.

TL;DR

I built AIMAG — single-image blind super-resolution and denoising for live fluoroscopy — and carried it through to revenue: PyTorch → ONNX → TensorRT with INT8/FP16 quantization, served through FastAPI/C++ at 600+ FPS on an RTX 4090 with −70% latency and under 5% accuracy loss, alongside an automatic QCA pipeline (0.94 Dice, <4 s) that cardiologists use mid-procedure.

The system

Interventional cardiology runs on X-ray fluoroscopy: low-dose frames, real-time decisions. Radiation dose and image quality trade off directly — halve the dose and you roughly halve the signal. The product question: can a learned restoration model recover diagnostic quality from noisy, low-resolution live frames fast enough that the cath-lab never notices it is there? "Blind" means no paired high-resolution ground truth exists at inference time — the model must handle whatever noise and resolution the machine produces.

What I built

1. The restoration model

Single-image blind super-resolution and denoising trained for fluoroscopic statistics — R&D, data pipeline, and release all owned end-to-end. The segmentation side of the product (automatic QCA) uses a U-Net++ with a ResNet50 encoder at 0.94 Dice; the imbalance math behind that number is written up here.

2. The quantization pipeline

The model only matters if it keeps up with a live feed alongside the rest of the imaging stack on one workstation. The path was PyTorch → ONNX → TensorRT with INT8/FP16 quantization: 600+ FPS on an RTX 4090, −70% latency, under 5% accuracy loss. Quantization was the single highest-leverage change in making real-time possible — the derivation of why INT8 barely hurts is the subject of this post, and the stage-by-stage conversion walkthrough is open-sourced here.

3. Serving and the QCA pipeline

FastAPI fronting C++ inference so the restoration runs in the live loop, plus the automatic QCA (quantitative coronary analysis) pipeline that completes in under 4 seconds — measurements cardiologists previously traced by hand.

Measured outcome

MetricResultConditions
Throughput600+ FPSRTX 4090, INT8/FP16, full pipeline
Latency−70%vs. the pre-optimization deployment
Accuracy loss<5%measured perceptual comparison vs FP32
QCA segmentation0.94 DiceU-Net++/ResNet50, coronary vessels
Commercial$200K+ ARRproduct line owned end-to-end

Patents applied

  • AI-powered X-ray image enhancement (202541071194) — single-image blind super-resolution & denoising.
  • Enhancing body part from angiography loop (202441009957) — dynamic roadmap generation from DSA sequences.
  • Image enhancement in X-ray fluoroscopy (202541041511) — real-time contrast enhancement & denoising.

What I learned

A medical AI product lives or dies on the inference budget, not the model paper. Every unit of latency removed on the deployment side was worth more than a point of PSNR on the research side — and owning R&D through serving is what made that trade visible at all.

Get in touch → Other case study: Adaptive RAG