Открыть список
Как стать автором
Обновить

Комментарии 75

Спасибо. Много работал с конусно-лучевыми томографами Rayscan Symphony и Vatech Trio. У первой на редкость убогий интерфейс, Попробую посмотреть ваш софт.
Рад стараться. Буду рад вашим комментариям по использованию.
Кстати в след.статье я покажу как по обычному МРТ сделать ортопантомограмму (Curved MPR).
Это все же не ортопантомограмма) так как индивидуальная кривая) хм. Где-то у меня были томораммы тыквы… Есть не стал — судя по скану — одни семечки.
НЛО прилетело и опубликовало эту надпись здесь
Принцип заключается, если упрощенно в следующем:
Объект неподвижен между источником и приемником. Источник и приемник вращаются вокруг объекта. Повернулся на долю градуса — измерил поглощение, повернулся еще на долю градуса — еще раз измерил. А потом с помощью злого матанализа вычисляется распределение «поглощающих элементов» на сканируемой площади. При этом сканер и источник представляют собой вертикальную линейку, что позволяет обычно делать 256 срезов за один проход. В конусно-лучевом варианте луч не плоский, а конусный))
image
НЛО прилетело и опубликовало эту надпись здесь
Кстати, именно поэтому металл и твердые ткани дают тени. Луч «не может заглянуть» за них и получается артефакт.
image
А можно поглазеть на трёхмерную визуализацию таких вот артефактов?
Под рукой нет примеров. Если в общем — выглядит как трехмерная грязь в виде пиков мясо-подобной консистенции между зубов обычно. Будто пучки острых игл между зубами наружу торчат. И соответствующие пустоты.
Что ж их никто никак чистить-то не научится… Ведь явно видимые артефакты понятной формы…
НЛО прилетело и опубликовало эту надпись здесь
Матаматический принцип — обратное преобразование Радона. Cone-beam CT, кстати, несколько отличается от классического КТ (у которого пучок рентгена плоскопараллельный). Вот ещё хорошая презентация на эту тему.
А есть ли какой open-source софт, который из кучи рентгеновских снимков выдаст внутренности?
Берёте любую библиотеку, которая читает DICOM, и выводите содержимое тэга (0x7fe0,0x0010). Правда в зависимости от производителя томографа там может лежать, например, и предобработанный пережатый JPEG, но для КТ там всё-таки обычно числа Хаунсфилда, упомянутые в статье.
Я вот для питона pydicom предпочитаю.
Я имею ввиду на более низком уровне, как в той статье про самодельную томографию курицы.
Есть грубо говоря 179 снимков с разных ракурсов, чем их преобразовать в вексельный массив?
Для этого нужно делать сегментацию каждого органа. Это не простая задача и полностью автоматически это не делается. Конкретно в CT и MRT сейчас чаще всего используются Level Set методы. Всем этим методам требуется начальное приближение, которое обычно инициализируется пользователем.

Существует Open Source библиотека ITK, которая разрабатывается целым консорциумом. Она содержит реализацию многих методов сегментации. Если интересно, смотрите User Guide Book 2 (весь документ 700 страниц).
Я, кажется, вас неверно понял.

Вам нужна 3D реконструкция из набора проекций. Есть реконструкторы с открытым исходным кодом, но почти ни один из них не умеет качественно бороться с артефактами от металла, выполнять более-менее качественную реконструкцию по неполному скану и т. п.
У меня такой задачи никогда не стояло, но можно попробовать вытащить что-то из CTSim и Slicer. Возможно в этих проектах есть то, что вам нужно. Либо из упомянутых VTK/ITK.
Но вообще по опыту колег, которые писали софт для небольшого самодельного томографа, могу сказать, что для более-менее хорошей реконструкции без временной размерности надо где-то 800-900 снимков, то есть с шагом менее полградуса.
А можно статью о самодельном томографе и результатах? Инвайты для всех участников найдутся :-)
Я попробую коллегам предложить, но не думаю, что получится — он хоть и самодельный, но он в составе комплекса протонной терапии, который делается очень интересным коллективом, которым начальник даже публиковаться запрещает. Мы для них отчёты в Минпромторг пишем, и занимаемся радиобиологией с их пучком. А вот про адронную терапию вообще я как-нибудь расскажу (наверное как диссертацию защищу).
В качестве модели освещения используется затенение по Фонгу, которое позволяет сделать изображение объёмным и даёт хорошую картинку

А как вычисляется направление нормали? Как градиент плотности? И учитывается ли величина этого градиента? Или она потом проявит себя при учёте прозрачности вокселей?
Да, нормаль вычисляется как градиент плотности. Модуль градиента никак не учитывается.
Сразу вопрос — есть ли версия под MacOS (не праздный интерес, а очень актуально). И чем, к примеру, данная программа лучше софта для просмотра, который прилагается к каждому КТ на диске (тот же RomexisViewer, который написан на Java и работает из любой ОС).
Под MAC есть версия, если нужно предоставлю. Что касается простотрщика на дисках, то это, как правило, легковесный просмотрщик с минимальным набором функций. Просто посмотреть. А наш просмотрщик ближе к полновесному осириксу для диагностических целей. И здесь нужна скорость и хороший контроль памяти, поэтому Java не подходит.
Osirix открытое ПО, а у вас что за лицензия и планы по монетизации?
Osirix открытый, но я до сих пор не понимаю как его исходный код сочетается с платными версиями. Поясните, если знаете.
У нас всё таки коммерческий продукт. Сначала хочется получить какой-то фидбэк от врачей. Если всё будет устраивать, то будем общаться. Пока ничего конкретного не могу сказать. Вьюер используется врачами, внедрён в немаленький диагностический центр, но массового спроса пока не наблюдается.
Исходный код не запрещает продавать, особенно с подпиской на поддержку. RedHat модель. Можно самому руками собрать, если нужно.
Да, было бы интересно посмотреть на версию под Mac. А еще интересно узнать хотя бы порядок цен.
Как только соберём под MAC, я с вами свяжусь
И мне напишите. Спасибо.
Более 10 лет, не погружался в DICOM.
как был бедлам, в 2001, так и остался ;(

фирмы производители скрывают описание нужных тэгов.
либо, просто не записывают значения ;(
Процесс построения интегрированной сети радиология+УЗИ+PACS+Worklist довел до того, что пришлось делать свои фильтры для Wireshark, чтобы разбирать, например, почему аппарат A не берет Workilist из PACS (в то время, когда все остальные жуют без проблем), потому как ни PACS ни аппарат логов и спецификаций не предоставляют.

Буйство проприетарных велосипедов в полный рост.

Отдельно выражаю благодарность тому «гению» менеджерско-технической мысли, который додумался в аппарат УЗИ (с рентгенами и прочим — аналогично) стоимостью несколько миллионов ставить ровно один SOHO (для дома и малого офиса)-винт под внутреннее ПО и архив исследований.

В рентгенах пытались сделать мега-прорыв — ставили RAID1 из двух офисных винтов. Понятно, что в итоге помирали оба сразу.

«Великолепные» решения в области хранения жизненно важной информации!

Вы знаете, у нас свой PACS и свой Worklist-сервис и логи свои, но всё равно приходится юзать WareShark, потому что какому-то одному УЗИ не нравится как ему отвечает PACS, хотя всем остальным нравится.

А зачем вам большие диски на УЗИ, если у вас есть PACS? Ходите к PACS из просмотрщика. А вот на PACS уже какой-то RAID.
С хранением данных в PACS проблем нет — ему организован огромный LUN в нашей SAN, с которого дополнительно снимаются резервные копии на отдельно стоящий массив в другом здании.

Проблема дисков в составе аппаратуры не в размере, а в надежности. Один-два бэда на единственном диске радостно кладут весь аппарат в долгий (неделя-месяц-полгода) ремонт, вот в чем трудность.

Если бы там был хотя бы RAID6 или 10, аппарат бы выдавал какую-нибудь ругань, но работал бы, и мог бы продержаться до прибытия сервисного инженера.
> Поскольку протоколом DICOM чётко не декларируется, в каком тэге хранится величина расстояния между изображениями в серии,
Вообще (0x0018, 0x0050) — толщина среза и (0x0018, 0x0088) — расстояние между срезами от центра одного до центра другого, но другое дело, что в зависимости от значения (0x0008, 0x9206) и вообще от модальности изображения (типа исследования) эти значения могут отражать не то, что подразумевается; поэтому да, для реальных задач расстояние надо вычислять на основе Image Position (0x0020, 0x0032) и Image Orientation (0x0020, 0x0037) (но не Slice Location — оно вообще может зависеть от фазы луны)).
Да, всё правильно. Это и имелось ввиду
Если интересны вопросы 3D визуализации в медицине, рекомендую также посмотреть на библиотеку VTK и Open Source проект на её основе Slicer 3D.

Вот тут можно почитать про архитектуру VTK более подробно.
Ой. У меня тоже разные такие картинки есть. Немного занимался подобной визуализацией. Быть может многим будет интересно узнать, что PVS-Studio (вернее тогда ещё Viva64) вырос именно оттуда. Обрабатывая и визуализируя большие объемы данных на 64-битных системах столкнулись с тем, что отсутствовал инструментарий, позволяющий выявить 64-битные ошибки. Фактически всё свелось к вычитыванию глазами наиболее важных мест кода. И именно потом появилась идея предложить миру инструмент статического анализа Viva64.
P.S. Не хотите попробовать PVS-Studio На своём коде?
Человека с протезом отсканировали? Не понятно, что-то вроде коронок есть, а корни видны только у клыков на нижней челюсти.
Добрый день!

Спасибо за отличную статью — было интересно прочитать про внутреннее устройство DICOM. Сам я с DICOM сталкивался несколько раз — у меня друг работал в фирме, которая делала подобную программу для рендеринга, и несколько раз делал КТ (там тоже был софт для просмотра DICOM). Тогда интересно было почитать про сам формат, но хорошей статьи, которая бы всё объяснила подробным языком, не нашёл.

Собственно, вопросы:
1) А ваша фирма только в Воронеже работает? Есть представительства в других городах?
2) Какой бесплатный DICOM viewer Вы можете посоветовать? Для домашнего использования. А то вот делают снимки и хочется их на компе сохранить, чтобы в случае чего можно посмотреть. Те программы, которые идут с диском заточены под определённую структуру папок, а хочется просто универсальный софт, который открывает DICOM файлы.
3) И какие программы для медицины вы ещё делаете? Я вообще работал в фирме по производству медицинского ПО, но это было ПО для ведения записей и учёта. А вот интересно, из первых рук, какое ещё чисто медицинское ПО создаётся. :)
Добрый день!

Спасибо Вам за проявленный интерес.
1) Фирма находится в Воронеже. Наши представители иногда бывают в Москве.
2) Могу посоветовать нашу программу. Мы можем подготовить для Вас урезанную версию с базовыми функциями просмотра. А нам будет приятно получить от Вас обратную связь.
3) Кроме DicomViewer у нас есть собственный PACS-сервер. В порядке аутсорса пишем большую RIS (ИС в радиологии) систему (учёт пациентов, исследований, печать заключений и тд.и т.п.). Есть небольшой сервис по записыванию диском с исследованиями для пациентов на базе робота для записи дисков.
Есть большой собственный проект по инвазивному картированию сердца для лечения всякого рода аритмий. ПО наше, а другие товарищи делают железо (катетеры). Недавно оформили документы на него об успешном прохождении клинических испытаний. Как-нибудь напишу статью про него.
Спасибо за предложение! Но боюсь от меня фидбек не очень будет — мне нужен софт, чтобы просто стоял на компе и при случае можно было посмотреть снимки. Не на постоянной основе :)
Про PACS сервер читал в Вашей прошлой статье. Вы же о нём сейчас говорите?
А про «проект по инвазивному картированию сердца для лечения всякого рода аритмий» интересно было бы почитать! Хотя бы в общем виде — как писали, как тестировали. Всё таки разработка очень отличается от большинства софта — цена ошибки очень высока. На Хабре как то статья была про разработку для Боинга — интересно было читать, как разрабатывают такие проекты, когда нельзя просто на компе запустить и проверить, как оно работает.
Про PACS я уже писал, всё верно, это он и есть.
Про картирование постараюсь написать. Действительно очень интересный проект. Ни один год мы потратили на клинические испытания этого софта, провели на нём уже точно больше 100 операций.
По второму пункту, как iroln выше писал, обратите внимание на Slicer 3D. Достаточно мощная платформа.
Подскажите, у меня 32-bit система пока ещё, так что я не смог поставить вашу прогу.

У меня есть диск с КТ, который мне сделали в московском первом меде. Модель оборудования, на котором делали КТ, я разумеется не знаю.

На диске нет .dcm файлов. Как я понял, отношение к DICOM на диске имеет только файл DICOMDIR в корне и подпапка DICOM, в которой (ещё в нескольких вложенных папках) лежат файлы срезов без разрешений. Для просмотра всего этого на диске предусмотрена программа Centricity DICOM viewer 3.1. Причём она не работает, если просто тупо скопировать содержимое CD на HDD, файлы удаётся просмотреть только запуская её с CD.

Я пробовал InVesalius 3.0, он в моих файлах DICOM вообще не увидел.

И я вот теперь думаю, есть ли мне вообще смысл вашу программу пробовать, она распознает там чё-нить, не подскажете?
Файл DicomDir содержит просто пути ко всем файлам dcm на диске относительно самого файла DicomDir. В папке dicom должны лежать обычные dcm файлы. Программа для просмотра на диске считывает файл DicomDir и из него узнаёт пути к файлам. Поэтому Вы не можете пользоваться ей вне диска.

32 битную версию можете скачать здесь
Установите её и попробуйте натравить на папку dicom, по идее должно всё считаться и просматриваться.
ВНЕЗАПНО Avast ругается на файл как на вирус и не даёт скачать, что за дела?

0_о
Сам удивлён. Могу только посоветовать отключить Avast. Мы обратим на это внимание в дальнейшем.
Спасибо, уже отключил и затестил. Всё работает.

Программа огонь! Я восхищён! Не понимаю почему до сих пор не наладили поставку этих чудных машин в каждую поликлинику\больницу!

Единственное, чего хотелось бы лично мне — возможность свободно врететь модель мышкой, как например в AutoCAD'е или в SolidWorks.
Не понимаю почему до сих пор не наладили поставку этих чудных машин в каждую поликлинику\больницу!

Бюрократия.

Вертеть модель нажатием на колёсико. Хотя это наверное не всем привычно.
Можно CTRL+мышь или ещё что-то? На моей мыши невозможно нормально давить на колесо. Мало где можно. Традиционно все же на правый клик зажатый вешают. Если действий несколько — pan, например, — то с модификаторами типа Alt, Ctrl.
C колесом есть проблемы, согласен. На ноуте не покрутишь, например. Возьмём на карандаш, спасибо!
Нормально. Я просто чёт не додумался колесо позажимать… Думал отдельный инструмент должен быть для этого.

Это просто мега круто!
Есть ли у вас возможность редактирования и записи STL?
Есть. В 3D есть кнопочка Построение поверхности -> Экспорт поверхности
Сначала редактируешь модель как надо, а потом экспортируешь.
Пост старый, возможно с тех пор что-то изменилось, но сейчас я не могу найти такую кнопку. Изчезла? Переименовали?
Теперь эта кнопка на панели сегментированных структур. Открыть эту панель можно нажав кнопку в виде пазла на панели инструментов в окне 3D или МПР.
Чтобы немножко сгладить кубические воксели, можно использовать алгоритм marching cubes.
Нет. Мы не используем никаких полигонов при отрисовке. Для сглаживания используется трилинейная интерполяция. А вот при построении сетки из воксельной модели, например для STL, марш кубов используется.
Спасибо за ностальгию и за череп. Был моим другом на протяжении пары лет, все тестировалось на нем.
Я в свое время тоже написала DICOM Viewer, я тогда работала на Сименсе в Medical Solutions и занималась как раз программой визуализации изображений, полученных с аппаратов. Я кстати никак не могла перевести на русский LUT (Look up table)- то что вы называете передаточной функцией, потому что вообще не сталкивалась с номенклатурой на русском языке :)
Спасибо вам за интерес к статье. Приятно видеть дам в нашем преимущественно мужском сообществе. Всё верно, передаточная функция это и есть look up table. Работали мы с аппаратами компании Siemence. Запомнились очень неудобными интерфейсами на томографах, особенно на КТ (Siemens Somatom CT VB20). Да и на МРТ тоже (Symphony MR A30 и Symphony MR A35). С диагностикой на них всё более менее, а вот настройка dicom и прочие настройки — ужас. Хотя наверное они просто старые уже…
Блин, так хотел открыть МРТ своей головы, а оно не открылось… Точнее, открылось, но только в режиме просмотра изображений.
А в каком режиме не открылось? 3D не построилось?
Нет, 3D не построилось. Половину серий приложение вообще не смогло прочитать (вывело черный квадрат с подписью «нет данных»), а для остальной половины доступен только режим просмотра изображений. Но даже если в нем открыть серию и подвигать ползунок — изображение пропадает :)
Philips DICOM Viewer отображает все серии нормально.
У меня та же история — серию показывает, а 3D не строит :(
Есть серии, которые не подходят для построения 3D. По поводу отображения серий — если Вы не против, то пришлите мне (sechenov_pa@mail.ru) это исследование, которое в Philips DICOM Viewer прочиталось, а у нас нет — мы поковыряемся и выясним в чём дело.
Если в других вьюерах 3D строит, а у нас нет, то также нужно смотреть на конкретное исследование — т.к. это частный случай.
Другие программы (попробовал штук 5) тоже либо не построили 3D вообще, либо, как Ваша, построили узкую часть из трех файлов, которые были в начале последовательности и содержали в себе картинки из её середины. Эти три файла значительно больше по размеру, чем остальные. При этом в 2D всё открылось целиком.
Я думаю, проблема в самих данных, а не в софте.
Классный инструмент, очень интересно поиграться с предоставленными данными.
На полосе Transfer Function интенсивность излучения (то, что названо "volume") было бы удобно видеть в логарифмической шкале.
А есть ли простенький API для транспонирования профиля передаточной функции по спектру излучения и для вращения камеры?
Логарифмическую шкалу сделаем. API у нас нет. Да и не понятно откуда Вы его вызывать собрались..
Ммм… не знаю :) Исключительно из художественных целей было бы классно иметь возможность накидать скрипт, который будет экспортировать серию изображений или сразу несжатое видео. Не думаю, что это будет иметь практическое применение в медицине, конечно.
Но подобные вещи в динамике выглядят потрясающе (например, если двигать профиль передаточной функции относительно гистограммы):

Я накидал примерно, что имел ввиду:


но тут и разрешение 256*256, и слишком шумно, и вообще Processing, а не C, так что в реальном времени не тянет.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.