Как преобразовать ультразвуковое сканирование Voluson 4D (файл.V00) в видео?

У меня есть ультразвуковое сканирование "4D Volume Cine" (временной ряд 3D-сканирования), созданное на машине от GE Healthcare Voluson. Файл в их старом, проприетарном .V00 формат.

Из этого я хочу создать видеофайл, который можно будет воспроизводить в обычном медиаплеере. Как это сделать, в идеале с помощью свободно доступных инструментов?

3 ответа

Решение

.V00 файлы имеют формат "Kretzfile" / "Kretz 3D Ultrasound Images" [ источник ]. Связь между GE Healthcare и Kretz связана с тем, что "в 2001 году GE Medical Systems приобрела крупный пакет акций Kretztechnik AG у Medison, а Kretztechnik AG стала дочерней компанией GE Medical Systems" [ источник ].

Вы можете использовать 4D View. Это "официальное" программное обеспечение для ПК, предоставляемое компанией GE Healthcare для своих ультразвуковых аппаратов Voluson. Пример процесса о том, как экспортировать в видео с ним:

  1. Откройте файл в 4D View и выберите "Файл → Экспорт 4D Img. Cine Sequence…".
  2. Отметьте опцию "Сжатие" (кроме случаев, когда вы хотите выполнить постобработку на шаге 4, не используйте сжатие, чтобы предотвратить ошибку). Оставьте "Коэффициент уменьшения" на "1,00: 1", так как иначе это уменьшит разрешение видео.
  3. Нажмите "Сохранить", чтобы экспортировать том 4D в .avi формат. То, что вы получите, должно выглядеть как воспроизведение в 4D View, просто без букв.
  4. Чтобы удалить огромные черные границы из видео, подключить несколько экспортируемых видео и преобразовать их в небольшой формат MP4, вы можете запустить следующее ffmpeg команда в оболочке Linux, находясь в каталоге, содержащем экспортированный, несжатый .avi файлы и ничего больше:

    ffmpeg \
      -i concat:"$(ls -l *.avi | awk 'BEGIN {ORS="|"} { print $9 }')" \
      -filter:v "crop=400:380:332:175" \
      -r 25 \
      -crf 18 \
      output.mp4
    

    Это основано на нескольких других ответах. Если у вас есть avconv вместо этого он работает с теми же параметрами. Предполагается, что содержимое размером 400×380 пикселей начинается с x=332, y=175 (то есть примерно по центру видео 1068×740 пикселей) - адаптируйте crop= Значения параметров для вашего случая, если это необходимо, путем измерения на кадре. -crf 18 выбирает более высокое качество, чем по умолчанию -crf 23, за счет большего размера файла. Я сомневаюсь, что улучшение качества видно хотя...

  5. В целях архивирования вы можете захотеть хранить отдельные видео AVI (огромные, если они не будут сжаты!) В хорошем формате без потерь или почти без потерь, не объединяя их, но снова удаляя ненужную черную рамку:

    for file in *.avi; do
      ffmpeg \
        -i $file \
        -c:v libx264 \
        -preset veryslow \
        -crf 1 \
        -r 25 \
        -filter:v "crop=400:380:332:175" \
        ${file/.avi/.mp4};
    done
    

    При этом используется H.264 со значением квантователя 1 (-crf 1), что почти без потерь [ источник ] и в 25 раз меньше, чем исходные несжатые AVI. Вы также можете использовать -crf 0 или лучше -qp 0 вместо этого, что приведет к действительно без потерь H.264. Он примерно на 20% больше, и не все игроки могут его прочитать [ подробнее ]. Но VLC и YouTube могут, например.

Некоторые советы по получению и установке 4D View:

  • 4D View доступен в виде лицензионного программного обеспечения, 60-дневной неограниченной демо-версии и не истекающей деактивированной версии [ см. ]. Все, кажется, способны экспортировать в .avi файлы, но я попробовал только с 60-дневной демонстрацией.
  • Более новые версии 4D View могут быть загружены только зарегистрированными владельцами машин Voluson (вам необходимо зарегистрироваться и указать серийный номер вашей машины; но, возможно, они сделают исключение, если вы любезно попросите). Однако более ранние версии были общедоступными для скачивания и все еще доступны в Интернете.
  • 4D View сделан для Windows 7, но также может быть установлен в Windows XP и т. Д.
  • 4D View нельзя использовать на виртуальной машине, по крайней мере, в VirtualBox с гостевым Windows XP (и с включенным 3D-ускорением). При попытке его запуска 4D View выдаст сообщение "Не найдена достаточная графическая карта или драйвер не установлен" и выйдет.

Некоторые подробности и контакты по конвертации файлов V00 можно найти в этой ветке comp.protocols.dicom. Для справочной информации есть также Руководство по обслуживанию Voluson S6 / S8. Для тестов, здесь трудно найти 3D-сканирование в формате Kretzfile для загрузки; только 3D, поэтому, не позволяя 4D-до .avi преобразование с 4D View.

Не возможно: 4DTheFetusView. Этот инструмент аналогичен версии 4D View 2005 года и по-прежнему доступен для бесплатной загрузки. За исключением того, что он может быть использован только для открытия демонстрационных томов, доступных через http://sonoworld.com/. Эти демонстрационные тома 4D были прикреплены к нескольким из их дел (включая это, это, это), но больше не доступны для скачивания.

Не возможно: DICOMatic. Это свободно загружаемый инструмент преобразования, который может конвертировать множество патентованных форматов медицинских изображений в новый стандартный формат DICOM. Просто незарегистрированная версия водяных знаков экспортировала изображения [ источник ]. В DICOM можно использовать свободно доступные инструменты MicroDICOM или DICOM Cine Viewer для экспорта видеофайла. Однако для формата GE KretzFile DICOMatic отмечает, что "DICOM не поддерживает трехмерные тома для ультразвуковых изображений" [ источник ]. При попытке открыть файл.V00 в DICOMatic, я заметил, что он не поддерживает полярные координаты. Возможно, это равносильно тому, что 3D-тома не поддерживаются (?). Таким образом, это не сработало (для меня), но производитель говорит, что это должно работать [ источник ].

Не возможно: TomoVision и скриншот. TomoVision является средством просмотра медицинских форматов изображений, поэтому, если он может отображать последовательности.V00, его можно преобразовать в видео с помощью скриншота. Однако, поскольку он использует ту же библиотеку, что и DICOMatic [ source ], он также не сможет прочитать том 4D. Хотя, опять же, производитель заявляет, что это возможно [ источник ].

Я реализовал в 3D Slicer устройство для считывания ультразвуковых изображений GE / Kretz 3D. После загрузки изображения вы можете использовать все потрясающие инструменты в 3D Slicer для его визуализации и обработки (например, для создания 3D-модели для печати). Вы можете увидеть демо здесь:

https://youtu.be/UHq0uyDvhaA

Он еще не идеален (сферическое преобразование в декартово не совсем точно), но он абсолютно бесплатный и с открытым исходным кодом - исправления и улучшения приветствуются. Для получения дополнительной информации и вопросов, пожалуйста, отправьте сообщение на форум 3D Slicer:

https://discourse.slicer.org/t/loading-of-ge-kretz-ultrasound-volumes-vol-file/808/14?u=lassoan

Предполагая, что вы экспортировали файл Voluson без включенного сжатия (Wavelet = 'Off') и с выбранным Volume/Raw File... попробуйте использовать этот сценарий, чтобы увидеть, имеют ли ваши данные сторонний формат DICOM. Это не восстанавливает данные в пригодный для использования формат, но показывает, можете ли вы получить доступ к данным элемента.

import struct
import sys

class GETagAnalyser(object):

def __init__(self,fname):
    self.m_fname = None
    if fname is not None:
        self.m_fname = fname
    self.m_tagdict = [] 

def readAllTags(self):
    with open(self.m_fname,'rb') as f:
        hdr = f.read(16)
        print hdr
        #find end
        f.seek(0,2)    
        fend = f.tell()
        print fend
        #back to start
        f.seek(16,0) 
        while f.tell() <= fend-4:
            t1,t2,s,tag_data,f = self.readNextTag(f)    
            #self.m_tagdict                
            print hex(t1), hex(t2),s    
            #print t1, t2, s


def readNextTag(self,f):
    firsttag = f.read(2)
    firsttag = struct.unpack('@H',firsttag)

    secondtag = f.read(2)
    secondtag = struct.unpack('@H',secondtag)

    size = f.read(4)
    size = struct.unpack('@I',size)    
    data = f.read(size[0])

    tag1,tag2,size,data = firsttag[0],secondtag[0],size[0],data
    return tag1,tag2,size,data,f

def main():

if len(sys.argv) != 2:
    print "Usage: GETagAnalyser <inputfile>"
    return
g = GETagAnalyser(sys.argv[1])
#print sys.argv[1]
g.readAllTags()
Другие вопросы по тегам