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.
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.
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.
What the service returns
Select a zone to read its three probabilities.
How a case is processed
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.
A separate component of the platform produces a binary lung mask. Everything downstream is restricted to lung tissue.
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.
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.
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.
Cavities — air-containing spaces with a definable wall. Infiltrates — areas of increased parenchymal density. Nodules — rounded focal opacities up to 3 cm.
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.
API
Documentation only — requests cannot be issued from this page.