ISTC PR150 · Task 3.2 Research use only

CXR Sextants

Each lung is divided into three zones. For all six, three classifiers report whether cavities, infiltrates or nodules are present, together with the probability behind each call.

Open the service

Analysis runs on the LungExpert platform. Sign in there to upload a radiograph and try the application — this page holds the documentation and a worked example, and sends nothing anywhere.

Six lung zones of the example case, tinted by severity R1 R2 R3 L1 L2 L3 R L

Zone colour is the severity score: the highest of the three probabilities in that zone. The service renders the same ramp over the radiograph itself.

Worked example · case 9ea444e6

What the service returns

0.01.0

Select a zone to read its three probabilities.

Pipeline

How a case is processed

Input

A chest radiograph in NIfTI format. The affine matrix carries voxel spacing, so images from different equipment are brought to a common scale before anything else happens.

Segmentation

A separate component of the platform produces a binary lung mask. Everything downstream is restricted to lung tissue.

Zone cutting

The bounding box of the mask is split into three parts of equal masked area per lung. Boundaries approximate the clinical upper, middle and lower zones without detecting ribs, which is more robust than landmark detection when anatomy is unusual. A single visible lung is handled and reported.

Classification

Three classifiers run on each zone patch: cavs, dens and nods. Each returns a probability; the label is taken at a fixed threshold of 0.5.

Output

A JSON document with all six zones, an overlay PNG tinted by severity, and a structured text report in English or Russian. All three are archived in a result zip.

Findings

Cavities — air-containing spaces with a definable wall. Infiltrates — areas of increased parenchymal density. Nodules — rounded focal opacities up to 3 cm.

Integration

Calling the API

The platform authenticates every request through its identity provider. Obtain credentials by signing in at lungs.org.by; the snippets below assume you already hold a session. Nothing on this page can call the API on your behalf.

Create a case, run it, read the result

# 1. upload a radiograph -> returns a case_uid
curl -b cookies.txt -F "file=@radiograph.nii.gz" \
     https://lungs.org.by/app/cxr_sextants/new_case

# 2. run the analysis (synchronous)
curl -b cookies.txt https://lungs.org.by/app/cxr_sextants/$CASE_UID/run

# 3. read the descriptor: status_text, and paths to the artifacts
curl -b cookies.txt https://lungs.org.by/app/cxr_sextants/$CASE_UID

# 4. fetch the predictions named by proc_url
curl -b cookies.txt https://lungs.org.by$PROC_URL

# 5. remove the case when finished
curl -b cookies.txt https://lungs.org.by/app/cxr_sextants/$CASE_UID/remove

Reading the predictions

# the document at proc_url; six zones, three findings each
{
  "predictions": {
    "R3": {
      "cavs": { "probability": 0.193898, "class_label": "negative" },
      "dens": { "probability": 0.904472, "class_label": "positive" },
      "nods": { "probability": 0.682770, "class_label": "positive" }
    }
  },
  "status": "ok",
  "lung_side": "both"
}

Zones on a missing lung are absent from predictions; check lung_side before iterating. The full schema of the descriptor is in case_desc.json, and of every route in openapi.yaml.

Do not submit images of real patients. This is a research service, not a certified medical device, and it operates under no agreement covering protected health information. Every output requires review by a qualified radiologist.
Reference

API

Documentation only — requests cannot be issued from this page.