如何将 Voluson 4D 超声波扫描(.V00 文件)转换为视频?

如何将 Voluson 4D 超声波扫描(.V00 文件)转换为视频?

我这里有一个“4D 体积电影”超声波扫描(3D 扫描的时间序列),由一台机器创建GE医疗 Voluson。该文件采用的是其较旧的专有.V00格式。

我想用这个创建一个可以在普通媒体播放器中播放的视频文件。如何做呢?最好使用免费工具?

答案1

.V00文件为“Kretzfile”/“Kretz 3D 超声波图像”格式 [来源]。GE医疗与Kretz之间的联系是因为“2001年,GE医疗系统从Medison手中收购了Kretztechnik AG的大部分股权​​,Kretztechnik AG成为了GE医疗系统的全资子公司”[来源]。

您可以使用4D 视图这是 GE Healthcare 为其 Voluson 超声成像机提供的“官方”PC 软件。如何使用它导出到视频的示例流程:

  1. 在 4D 视图中打开文件并选择“文件 → 导出 4D 图像电影序列...”。
  2. 勾选“压缩”选项(除非你想在步骤4中进行后处理,否则不要使用压缩来防止一个错误)。将“缩小比例”保留为“1.00:1”,否则会降低视频分辨率。
  3. 单击“保存”将 4D 体积导出为.avi格式。您得到的应该是在 4D 视图中重播,只是没有全部字母。
  4. 要从视频中删除巨大的黑色边框,连接多个导出的视频并将其全部转换为小型 MP4 格式,您可以运行以下命令ffmpeg.avi在 Linux shell 中,在包含导出的、未压缩的文件且不包含任何其他内容的目录中,执行命令:

    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
    

    它使用量化值为 1 ( -crf 1) 的 H.264,非常接近无损 [来源] 比原始未压缩的 AVI 小 25 倍。您也可以使用-crf 0或更好的-qp 0替代,这将产生真正无损的 H.264。它大约大 20%,并且并非所有播放器都可以读取它 [细节],但是例如 VLC 和 YouTube 可以。

获取和安装 4D View 的一些提示:

  • 4D View 提供授权软件、60 天无限制演示版和永不过期的功能受限版 [] 似乎所有软件都可以导出到.avi文件,但我只尝试了 60 天的演示版。
  • 只有 Voluson 机器的注册用户才能下载较新版本的 4D View(您需要注册并提供机器的序列号;但如果您提出请求,他们可能会破例)。但是,较早的版本是公开可下载的,并且仍然可用在网上。
  • 4D View 是为 Windows 7 制作的,但也可以安装在 Windows XP 等系统中。
  • 4D View 不能在虚拟机中使用,至少不能在装有 Windows XP 客户机(并启用 3D 加速)的 VirtualBox 中使用。尝试启动时,4D View 会提示“未找到足够的显卡或未安装驱动程序”并退出。

有关转换 V00 文件的更多详细信息和联系方式,请参阅这个 comp.protocols.dicom 线程。有关背景信息,还有Voluson S6 / S8 服务手册。对于测试,这是一个很难找到的Kretzfile 格式的 3D 扫描可供下载;但仅为 3D,因此不允许使用.avi4D View 进行 4D 转换。

不可能:4D胎儿视角此工具与 2005 版 4D View 相同,仍可免费下载。不过,它只能用于打开通过以下方式共享的演示卷:sonoworld.com。这些 4D 演示卷已附在几本他们的案件(含),但已无法再下载。

不可能:DICOMatic这是一个可免费下载的转换工具,可以将多种专有医学成像格式转换为新的标准格式数字化图像与通信系统。只是未注册版本导出的图片带有水印[来源]。从DICOM开始,人们可以使用免费提供的工具微DICOM或者DICOM 电影查看器导出视频文件。但是,对于 GE KretzFile 格式,DICOMatic 指出“DICOM 不支持超声图像的 3D 体积”[来源]。当我尝试在 DICOMatic 中打开 .V00 文件时,我收到一条提示,说它不支持极坐标。这可能相当于说不支持 3D 体积(?)。所以,它(对我来说)不起作用,但制造商说它应该可以工作 [来源]。

不可能:断层视觉以及一个屏幕截图。TomoVision 是一款医学图像格式查看器,因此如果它能够渲染 .V00 序列,则可以使用屏幕抓取工具将其转换为视频。但是,由于它使用与 DICOMatic 相同的库 [来源],它也无法读取 4D 卷。尽管制造商再次声称应该可以 [来源]。

答案2

我在 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

答案3

假设您导出了未启用压缩(Wavelet =“Off”)且选择了 Volume/Raw File 的 Voluson 文件...请尝试使用此脚本查看您的数据是否为第三方 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()

相关内容