# DicomTransfer **Repository Path**: fightroad/DicomTransfer ## Basic Information - **Project Name**: DicomTransfer - **Description**: 一个用于 DICOM 文件处理的命令行工具 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2025-02-07 - **Last Updated**: 2025-11-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: cmove, cget, cfind, C-STORE, stowrs ## README # DicomTransfer 一个用于 DICOM 文件处理的命令行工具。 ## 功能 1. DICOM 压缩 - 支持多种传输语法 - 支持批量处理 - 支持单文件处理 2. DICOM 匿名化 - 可选择保留病人ID - 可选择保留病人姓名 - 可选择保留检查日期 - 支持批量处理 - 支持单文件处理 3. DICOM 转图片 - 支持输出 JPG/PNG/BMP 格式 - 保持原有的 DICOM 目录结构 - 支持批量处理 - 支持单文件处理 4. 图片转 DICOM - 支持 JPG/JPEG/PNG/BMP/GIF/TIF/TIFF 格式 - 自动生成 DICOM 标签 - 支持批量处理 - 支持单文件处理 5. C-GET 获取图像 - 支持通过检查号查询 - 支持通过检查实例UID查询 - 支持指定传输语法 - 自动保存到输出目录 6. C-MOVE 获取图像 - 支持通过检查号查询 - 支持通过检查实例UID查询 - 支持指定目标AE - 支持指定QR服务器信息 7. STOW-RS 上传图像 - 支持单个文件上传 - 支持批量上传 - 自动转换为显式小端传输语法 - 支持 DICOMweb 标准 8. C-STORE 发送图像 - 支持单个文件发送 - 支持批量发送 - 自动转换为显式小端传输语法 - 支持多种 SOP Class - 支持多种传输语法 9. C-FIND 查询检查 - 支持通过检查号查询 - 支持通过检查实例UID查询 - 支持通过病人ID查询 - 支持通过病人姓名查询 - 支持通过检查日期查询 - 显示检查的详细信息(模态、序列数等) ## 使用方式 ```bash DicomTransfer.exe <处理类型> <输入路径> [参数] ``` ### 处理类型 - 1: DICOM 压缩 - 2: DICOM 匿名化 - 3: 图片转 DICOM - 4: DICOM 转图片 - 5: C-GET 获取图像 - 6: C-MOVE 获取图像 - 7: STOW-RS 上传图像 - 8: C-STORE 发送图像 - 9: C-FIND 查询检查 ### 示例 1. DICOM 压缩 ```bash # 压缩单个文件 DicomTransfer.exe 1 input.dcm JPEGLossless # 参数说明: # 1 - 处理类型(DICOM压缩) # input.dcm - 输入文件路径 # JPEGLossless - 目标传输语法 # 压缩文件夹下所有 DICOM 文件 DicomTransfer.exe 1 input_folder JPEGLossless # 参数说明: # 1 - 处理类型(DICOM压缩) # input_folder - 输入文件夹路径 # JPEGLossless - 目标传输语法 ``` 2. DICOM 匿名化 ```bash # 匿名化单个文件(保留ID 不保留姓名和日期) DicomTransfer.exe 2 input.dcm true false false # 参数说明: # 2 - 处理类型(DICOM匿名化) # input.dcm - 输入文件路径 # true - 是否保留病人ID(true=保留) # false - 是否保留病人姓名(false=不保留) # false - 是否保留检查日期(false=不保留) # 匿名化文件夹下所有 DICOM 文件 DicomTransfer.exe 2 input_folder true false false # 参数说明: # 2 - 处理类型(DICOM匿名化) # input_folder - 输入文件夹路径 # true - 是否保留病人ID(true=保留) # false - 是否保留病人姓名(false=不保留) # false - 是否保留检查日期(false=不保留) ``` 3. 图片转 DICOM ```bash # 转换单个图片 DicomTransfer.exe 3 input.jpg # 参数说明: # 3 - 处理类型(图片转DICOM) # input.jpg - 输入图片路径 # 转换文件夹下所有支持的图片 DicomTransfer.exe 3 input_folder # 参数说明: # 3 - 处理类型(图片转DICOM) # input_folder - 输入文件夹路径 ``` 4. DICOM 转图片 ```bash # 转换单个文件为 JPG DicomTransfer.exe 4 input.dcm jpg # 参数说明: # 4 - 处理类型(DICOM转图片) # input.dcm - 输入DICOM文件路径 # jpg - 输出图片格式 # 转换文件夹下所有 DICOM 文件为 PNG DicomTransfer.exe 4 input_folder png # 参数说明: # 4 - 处理类型(DICOM转图片) # input_folder - 输入文件夹路径 # png - 输出图片格式 ``` 5. C-GET 获取图像 ```bash # 通过检查号获取 DicomTransfer.exe 5 accno 12345 REMOTE_AE 192.168.1.100 104 # 参数说明: # 5 - 处理类型(C-GET获取) # accno - 查询字段(检查号) # 12345 - 检查号值 # REMOTE_AE - 远程设备的AE标题 # 192.168.1.100 - 远程设备的IP地址 # 104 - 远程设备的端口号 # 通过检查实例UID获取(指定传输语法) DicomTransfer.exe 5 studyuid 1.2.3.4.5.6.7 REMOTE_AE 192.168.1.100 104 JPEGLossless # 参数说明: # 5 - 处理类型(C-GET获取) # studyuid - 查询字段(检查实例UID) # 1.2.3.4.5.6.7 - 检查实例UID值 # REMOTE_AE - 远程设备的AE标题 # 192.168.1.100 - 远程设备的IP地址 # 104 - 远程设备的端口号 # JPEGLossless - 可选的传输语法 ``` 6. C-MOVE 获取图像 ```bash # 通过检查号获取 DicomTransfer.exe 6 accno 12345 DEST_AE QR_AE 192.168.1.100 104 # 参数说明: # 6 - 处理类型(C-MOVE获取) # accno - 查询字段(检查号) # 12345 - 检查号值 # DEST_AE - 目标AE标题(接收图像的设备) # QR_AE - QR服务器的AE标题 # 192.168.1.100 - QR服务器的IP地址 # 104 - QR服务器的端口号 # 通过检查实例UID获取 DicomTransfer.exe 6 studyuid 1.2.3.4.5.6.7 DEST_AE QR_AE 192.168.1.100 104 # 参数说明: # 6 - 处理类型(C-MOVE获取) # studyuid - 查询字段(检查实例UID) # 1.2.3.4.5.6.7 - 检查实例UID值 # DEST_AE - 目标AE标题(接收图像的设备) # QR_AE - QR服务器的AE标题 # 192.168.1.100 - QR服务器的IP地址 # 104 - QR服务器的端口号 ``` 7. STOW-RS 上传图像 ```bash # 上传单个文件 DicomTransfer.exe 7 input.dcm https://server/dicom-web/studies # 参数说明: # 7 - 处理类型(STOW-RS上传) # input.dcm - 输入DICOM文件路径 # https://server/dicom-web/studies - DICOMweb服务器的URL # 上传整个目录 DicomTransfer.exe 7 input_folder https://server/dicom-web/studies # 参数说明: # 7 - 处理类型(STOW-RS上传) # input_folder - 输入文件夹路径 # https://server/dicom-web/studies - DICOMweb服务器的URL ``` 8. C-STORE 发送图像 ```bash # 发送单个文件 DicomTransfer.exe 8 input.dcm REMOTE_AE 192.168.1.100 104 # 参数说明: # 8 - 处理类型(C-STORE发送) # input.dcm - 输入DICOM文件路径 # REMOTE_AE - 远程设备的AE标题 # 192.168.1.100 - 远程设备的IP地址 # 104 - 远程设备的端口号 # 发送整个目录 DicomTransfer.exe 8 input_folder REMOTE_AE 192.168.1.100 104 # 参数说明: # 8 - 处理类型(C-STORE发送) # input_folder - 输入文件夹路径 # REMOTE_AE - 远程设备的AE标题 # 192.168.1.100 - 远程设备的IP地址 # 104 - 远程设备的端口号 ``` 9. C-FIND 查询检查 ```bash # 通过检查号查询 DicomTransfer.exe 9 accno 12345 REMOTE_AE 192.168.1.100 104 # 参数说明: # 9 - 处理类型(C-FIND查询) # accno - 查询字段(检查号) # 12345 - 检查号值 # REMOTE_AE - 远程设备的AE标题 # 192.168.1.100 - 远程设备的IP地址 # 104 - 远程设备的端口号 # 通过检查实例UID查询 DicomTransfer.exe 9 studyuid 1.2.3.4.5.6.7 REMOTE_AE 192.168.1.100 104 # 通过病人ID查询 DicomTransfer.exe 9 pid 12345 REMOTE_AE 192.168.1.100 104 # 通过病人姓名查询 DicomTransfer.exe 9 pname "Zhang San" REMOTE_AE 192.168.1.100 104 # 通过检查日期查询 DicomTransfer.exe 9 date 20240101 REMOTE_AE 192.168.1.100 104 ``` ### 支持的传输语法 - ImplicitVRLittleEndian - ExplicitVRLittleEndian - JPEGBaseline - JPEG2000Lossless - JPEG2000Lossy - JPEGLSLossless - JPEGLSNearLossless - JPEGExtended - JPEGLossless - RLELossless ### 输出目录结构 输出文件将保存在程序所在目录的 output 文件夹下,按功能分类: ``` output/ ├─compress/ # 压缩输出 ├─anonymize/ # 匿名化输出 ├─image2dcm/ # 图片转DICOM输出 ├─dcm2image/ # DICOM转图片输出 │ └─{format}/ # 按图片格式分类 ├─cget/ # C-GET获取的图像 └─cmove/ # C-MOVE获取的图像 ``` ## 注意事项 1. 输入路径可以是单个文件或文件夹 2. 文件夹处理时会递归处理所有子文件夹 3. 默认保持原有的目录结构 4. 所有操作都是非破坏性的,原文件不会被修改 5. C-GET 和 C-MOVE 需要远程服务器支持相应的服务 6. STOW-RS 上传时会自动转换为显式小端传输语法 7. C-STORE 发送时会自动转换为显式小端传输语法 ### 传输语法处理 1. STOW-RS 上传 - 所有图像会自动转换为 ExplicitVRLittleEndian 传输语法 - 使用 DicomTranscoder 进行转换,确保正确处理像素数据 - 符合 DICOMweb 标准要求 2. C-STORE 发送 - 所有非 ExplicitVRLittleEndian 的图像会自动转换 - 使用 DicomTranscoder 进行转换,确保正确处理像素数据 - 提高与不同 PACS 系统的兼容性 3. 支持的传输语法 - ExplicitVRLittleEndian(默认) - ImplicitVRLittleEndian - JPEGBaseline - JPEG2000Lossless - JPEG2000Lossy - JPEGLSLossless - JPEGLSNearLossless - JPEGExtended - JPEGLossless - RLELossless