Разработка: как проверяется программа
Здесь протоколы проверок - как есть: что проверяли, чем, что получилось, какие ошибки нашли и что программа пока не умеет. Это внутренние проверки разработчика, а не испытания медицинского изделия: «Кактус» предназначен для науки и образования (Research Use Only).
Сверка раскрытия снимков с независимым декодером
21.10.2026, версия 2026.10.33. Каждый файл раскрывают две программы - «Кактус» и pydicom с кодеками pylibjpeg / OpenJPEG / libjpeg / CharLS - и сравниваются пиксели.
Что проверяли
432 открытых тестовых файла без персональных данных: эталоны сжатия комитета DICOM (NEMA WG04: КТ, МРТ, маммография, рентген, УЗИ - каждый в 7 видах сжатия), тестовые файлы pydicom (MIT), КТ фантома CatPhan.
Результат
435 кадров совпали до бита (без сжатия и сжатие без потерь), 19 кадров со сжатием с потерями - в допуске 2 % размаха. После экспорта и повторного открытия пиксели 11 разных форматов совпадают с исходными.
Не раскрывается
36 файлов: JPEG 12 бит с потерями, цветной JPEG-LS с чередованием по точкам, данные 32 бита на точку (дозы лучевой терапии), а также специально испорченные файлы. Программа прямо пишет, что формат не поддерживается.
Найденные и исправленные ошибки
Список без прикрас: что было не так, в какой версии исправлено.
2026.10.33
- Угол и угол Кобба на реконструкциях считались неверно. У корональных и сагиттальных реконструкций пиксель прямоугольный; угол 45° на экране программа показывала как 26,6°. Теперь угол считается в миллиметрах. Найдено при подготовке проверки на фантоме.
- Исследование с одинаковым идентификатором у всех срезов открывалось одним срезом (64 → 1). Так бывает после неаккуратного обезличивания.
- Файл, прочитанный со второй попытки, не добавлялся и не попадал в счётчик ошибок - молча пропадал.
- JPEG Lossless терял последний пиксель кадра (правый нижний угол - 0 вместо значения). Ошибка в библиотеке декодера jpeg-lossless-decoder-js (в её последней версии 2.1.2 не исправлена). Нашлась на эталоне WG04 и затем в 3 срезах из 284 у реальной КТ.
- Неверный цвет или серый снимок: палитра (часть УЗИ и ядерной медицины), раздельные цветовые каналы, цвет 16 бит, YBR без сжатия; КТ в JPEG 2000 с несогласованной разметкой знака - воздух белым.
- Не открывались Big Endian, Deflate, файлы без стандартного начала «DICM», маски 1 бит. Экспорт со сжатием портил цвет 16 бит (65535 → 0) - такие файлы теперь сохраняются без пересжатия.
2026.10.31
- Повреждённый кадр JPEG 2000 показывался чёрным без предупреждения. Теперь на снимке надпись, в журнале - запись. Добавлены предупреждения «серия неполная» и «файл обрезан».
- Текст из снимка (идентификатор исследования с кавычкой) мог выполниться как код в окне обезличивания. Закрыто; окно программы больше не может обращаться в интернет и писать файлы вне выбранной папки.
2026.10.29
- Пропала клавиша F1 (строку удалили вместе со старой F2) - после этого появился автотест горячих клавиш.
- Снимки с одинаковым номером в серии менялись местами от открытия к открытию.
Что проверяется перед каждой версией
13 групп автотестов запускаются на исходном коде и на собранной программе (той же, что скачивается с сайта), а также на старом движке для Windows 7.
Снимки
68 серий реальных исследований (обезличенная выборка хранится только у разработчика) - пиксели, окно, HU, измерения, реконструкции и прицел сверяются с эталоном до бита; все виды сжатия без потерь - с исходными пикселями.
Измерения и форматы
Фантом CatPhan против pylinac; 432 открытых файла против pydicom; экспорт и повторное открытие; испорченные снимки - заметные предупреждения без ложных тревог.
Безопасность и работа
Ловушки с вредоносным текстом в тегах; запрет сети и записи вне выбранной папки; горячие клавиши; открытие файлов из командной строки и проводника; окна 3D и проекций; лицензия не прерывает работу.