1

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

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

3 ответа3

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 года и по-прежнему доступен для бесплатной загрузки. За исключением того, что он может быть использован только для открытия демонстрационных томов, доступных через sonoworld.com. Эти демонстрационные тома 4D были прикреплены к нескольким из их дел (включая это, это, это), но больше не доступны для скачивания.

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

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

1

Я реализовал устройство для считывания ультразвуковых изображений GE/Kretz 3D в 3D Slicer. После загрузки изображения вы можете использовать все удивительные инструменты в 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

0

Предполагая, что вы экспортировали файл 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()

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .