#dicom #object #attributes #object-file #read-file

dicom-object

用于读取和操作 DICOM 对象的高级 API

13 个不稳定版本

0.7.1 2024 年 8 月 13 日
0.7.0 2024 年 4 月 25 日
0.6.3 2023 年 11 月 21 日
0.6.0 2023 年 7 月 23 日
0.1.0 2019 年 8 月 31 日

#1584Rust 模式

Download history 1228/week @ 2024-04-23 1248/week @ 2024-04-30 883/week @ 2024-05-07 1539/week @ 2024-05-14 1164/week @ 2024-05-21 980/week @ 2024-05-28 577/week @ 2024-06-04 733/week @ 2024-06-11 452/week @ 2024-06-18 785/week @ 2024-06-25 856/week @ 2024-07-02 870/week @ 2024-07-09 668/week @ 2024-07-16 680/week @ 2024-07-23 773/week @ 2024-07-30 582/week @ 2024-08-06

2,852 每月下载量
用于 19 个crate (13 个直接)

MIT/Apache

2.5MB
42K SLoC

DICOM-rs object

CratesIO Documentation

此子项目面向 DICOM-rs 生态系统用户。它为 DICOM 对象提供了一层高级抽象,允许从文件或 'readers' 中检索对象,然后将其作为属性树进行分析。

该crate是DICOM-rs项目的一部分,并包含在父cratedicom中。


lib.rs:

该crate包含用于读取和操作 DICOM 对象的高级抽象。在此级别,对象类似于元素字典,其中一些元素本身可以是 DICOM 对象。最终用户在处理 DICOM 对象时应优先使用此抽象。

可以通过函数 open_file 轻松加载 DICOM 文件。对于额外的文件读取选项,请使用 OpenFileOptions。可以从头开始构建新的 DICOM 实例,使用 InMemDicomObject (有关更多详细信息,请参阅[mem]模块)。

示例

读取对象并获取一些属性

use dicom_dictionary_std::tags;
use dicom_object::open_file;
let obj = open_file("0001.dcm")?;

let patient_name = obj.element(tags::PATIENT_NAME)?.to_str()?;
let modality = obj.element_by_name("Modality")?.to_str()?;

可以通过标签获取元素,无论是通过创建一个[Tag]还是通过使用来自dicom-dictionary-std crate的dicom-dictionary-std的已提供常量。

默认情况下,整个数据集将完全加载到内存中。可以通过使用 OpenFileOptions 忽略像素数据和后续元素。

use dicom_object::OpenFileOptions;

let obj = OpenFileOptions::new()
    .read_until(dicom_dictionary_std::tags::PIXEL_DATA)
    .open_file("0002.dcm")?;

一旦查找数据集元素,通常会希望检查其值。有方法可以将元素的 DICOM 值转换为在 Rust 中更易用的东西。

let patient_date = obj.element(tags::PATIENT_BIRTH_DATE)?.to_date()?;
let pixel_data_bytes = obj.element(tags::PIXEL_DATA)?.to_bytes()?;

注意:如果您需要首先解码像素数据,请参阅dicom-pixeldata软件包。

最后,DICOM对象可以被反序列化为DICOM编码的字节。提供了一个将文件DICOM对象写入新DICOM文件的方法。

obj.write_to_file("0001_new.dcm")?;

此方法要求您首先写入一个文件元表。从头创建新的DICOM对象时,使用FileMetaTableBuilder构建文件元组,然后使用with_metawith_exact_meta

use dicom_dictionary_std::uids;

let file_obj = obj.with_meta(
    FileMetaTableBuilder::new()
        // Implicit VR Little Endian
        .transfer_syntax(uids::IMPLICIT_VR_LITTLE_ENDIAN)
        // Computed Radiography image storage
        .media_storage_sop_class_uid("1.2.840.10008.5.1.4.1.1.1")
)?;
file_obj.write_to_file("0001_new.dcm")?;

为了写入纯DICOM数据集,可以使用各种数据集写入方法之一,例如write_dataset_with_ts

// build your object
let mut obj = InMemDicomObject::new_empty();
let patient_name = DataElement::new(
    Tag(0x0010, 0x0010),
    VR::PN,
    "Doe^John",
);
obj.put(patient_name);

// write the object's data set
let mut serialized = Vec::new();
let ts = dicom_transfer_syntax_registry::entries::EXPLICIT_VR_LITTLE_ENDIAN.erased();
obj.write_dataset_with_ts(&mut serialized, &ts)?;
assert!(!serialized.is_empty());

依赖关系

~5–11MB
~95K SLoC