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 日 |
#1584 在 Rust 模式
2,852 每月下载量
用于 19 个crate (13 个直接)
2.5MB
42K SLoC
DICOM-rs object
此子项目面向 DICOM-rs 生态系统用户。它为 DICOM 对象提供了一层高级抽象,允许从文件或 'readers' 中检索对象,然后将其作为属性树进行分析。
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_meta
或with_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