#dicom #medical-imaging #data #pixel #object #decoding #convert

bin+lib dicom-pixeldata

将 DICOM 对象解码为图像和 ndarrays 的高层 API

13 个版本

新版本 0.7.1 2024 年 8 月 13 日
0.7.0 2024 年 4 月 25 日
0.2.2 2023 年 11 月 21 日
0.2.0 2023 年 7 月 23 日
0.1.0-rc.12021 年 11 月 18 日

图像 中排名 364

Download history 753/week @ 2024-04-26 715/week @ 2024-05-03 1045/week @ 2024-05-10 448/week @ 2024-05-17 527/week @ 2024-05-24 307/week @ 2024-05-31 242/week @ 2024-06-07 283/week @ 2024-06-14 429/week @ 2024-06-21 583/week @ 2024-06-28 719/week @ 2024-07-05 554/week @ 2024-07-12 488/week @ 2024-07-19 342/week @ 2024-07-26 272/week @ 2024-08-02 478/week @ 2024-08-09

每月下载量 1,675
4 个 crate 中使用

MIT/Apache

2.5MB
41K SLoC

DICOM-rs pixeldata

CratesIO Documentation

本子项目面向 DICOM-rs 生态系统用户。它提供了处理 DICOM 像素数据的结构,并负责将像素数据元素解码为图像或多维数组。

本 crate 是 DICOM-rs 项目的组成部分。


lib.rs:

本 crate 包含 DICOM 像素数据处理器,并负责解码各种形式的原生和压缩像素数据(如 JPEG 无损),并将其转换为更易用的数据结构。

dicom-pixeldata 目前在纯 Rust 中支持少量但不断增加的 DICOM 图像编码。为了弥补当前的差距,本库与 GDCM 绑定 集成,支持更广泛的编码。此集成在 Cargo 功能 "gdcm" 中,需要 CMake 和 C++ 编译器。

dicom-pixeldata = { version = "0.7", features = ["gdcm"] }

解码像素数据后,解码数据可以转换为

  • 扁平像素数据值的向量;
  • 使用 ndarray 的多维数组;
  • 或使用 image 的动态图像对象。

此转换包括可能的模态和感兴趣值(VOI)转换。

WebAssembly 支持

本库通过以下两种措施在 WebAssembly 中工作

  • 确保禁用 "gdcm" 功能。这允许 crate 为 WebAssembly 编译,但代价是支持更少的压缩算法。
  • 设置 wasm-bindgen-rayon 或禁用 rayon 功能。

示例

将 DICOM 对象转换为动态图像(需要 image 功能)

use dicom_object::open_file;
use dicom_pixeldata::PixelDecoder;
let obj = open_file("dicom.dcm")?;
let image = obj.decode_pixel_data()?;
let dynamic_image = image.to_dynamic_image(0)?;
dynamic_image.save("out.png")?;

将DICOM对象转换为ndarray(需要ndarray功能)

use dicom_object::open_file;
use dicom_pixeldata::PixelDecoder;
use ndarray::s;
let obj = open_file("rgb_dicom.dcm")?;
let pixel_data = obj.decode_pixel_data()?;
let ndarray = pixel_data.to_ndarray::<u16>()?;
let red_values = ndarray.slice(s![.., .., .., 0]);

为了参数化转换,请传递一个转换选项值给_with_options变体方法。

use dicom_object::open_file;
use dicom_pixeldata::{ConvertOptions, PixelDecoder, VoiLutOption};
let obj = open_file("dicom.dcm")?;
let image = obj.decode_pixel_data()?;
let options = ConvertOptions::new()
    .with_voi_lut(VoiLutOption::Normalize)
    .force_8bit();
let dynamic_image = image.to_dynamic_image_with_options(0, &options)?;

有关可用选项,包括每个方法的默认行为,请参阅ConvertOptions

依赖项

~6–18MB
~225K SLoC