最近公司有个新需求是对DICOM文件中的TAG进行修改编辑,我查了很多资料,找到了nodejs的第三方包DicomEdit.js可以实现这个需求。
DicomEdit.js是一个JavaScript库,提供了读取DICOM对象,基于脚本的命令列表转换其内容以及输出转换后的DICOM的功能。
DicomEdit.js是原始基于Java的库的移植版本,可用于Web浏览器和Node.Js环境。 通过允许将DICOM对象在用户的本地环境中匿名化,然后再将其转移到服务器,以确保没有将任何PHI发送到不安全/安全的网络,这可以为数据隐私增加更多的安全性。
安装包可以使用下面命令“
npm install dicomedit
yarn add dicomedit
<script src="https://unpkg.com/dicomedit/dist/web/dicomedit.js"></script>
但因为一些众所周知原因,大家可能无法下载安装成功,此时可以直接去github下载整个包,build后,整个复制到项目的node_modules,以dicomedit命名。
在build中如果发生错误,根据错误提示解决。
完成后先引用对应的模块
const { Anonymizer } = require('dicomedit/dist/node/dicomedit.min'); //DICOM文件编辑
const fs = require('fs'); //文件操作
import * as dicomParser from 'dicom-parser'; //DICOM文件解析,测试用,非必须
然后是对DICOM文件中的TAG进行修改,这里我举例几个主要的tag,包括PatientID,PatientName,StudyDate,StudyID
try {
const srcFileName = 'C:/old.dcm'; //你的测试用DICOM文件地址
const objFileName = 'C:/new.dcm'; //生成新的文件地址
//这里是先打印看看原来的tag内容
let dicomFileAsBuffer = fs.readFileSync(srcFileName);
let dataSet = dicomParser.parseDicom(dicomFileAsBuffer);
console.log('PatientID====', dataSet.string('x00100020'));
console.log('PatientName====', dataSet.string('x00100010'));
console.log('StudyDate====', dataSet.string('x00080020'));
console.log('StudyID====', dataSet.string('x00200010'));
//要修改的几个tag
const PatientID = 'NO12345678'; //这些都可以修改
const PatientName = 'ZhangSan';
const StudyDate = '20230406';
const StudyID = '9876543210';
let script = `version "6.3"`; //声明版本
if (PatientID) {
script += `
(0010,0020) := "${PatientID}"`; //这里需要换行的
}
if (PatientName) {
script += `
(0010,0010) := "${PatientName}"`;
}
if (StudyDate) {
script += `
(0008,0020) := "${StudyDate}"`;
}
if (StudyID) {
script += `
(0020,0010) := "${StudyID}"`;
}
const anonymizer = new Anonymizer(script);
anonymizer.loadDcmUsingFileName(srcFileName);
await anonymizer.applyRules();
const buffer = anonymizer.write();
fs.writeFileSync(objFileName, new Uint8Array(buffer));
//这里打印修改后的tag
dicomFileAsBuffer = fs.readFileSync(objFileName);
dataSet = dicomParser.parseDicom(dicomFileAsBuffer);
console.log('PatientID2====', dataSet.string('x00100020'));
console.log('PatientName2====', dataSet.string('x00100010'));
console.log('StudyDate2====', dataSet.string('x00080020'));
console.log('StudyID2====', dataSet.string('x00200010'));
} catch (err) {
console.log(err);
}
执行后我们就得到了一个已经修改了tag的新的DICOM文件,当然我们也可以直接覆盖原来文件,这个根据需求决定。

文章介绍了如何利用JavaScript库DicomEdit.js在Node.js环境中读取、修改并输出DICOM文件的TAG,以实现数据匿名化,增强数据隐私保护。示例代码展示了如何修改PatientID、PatientName、StudyDate和StudyID等关键TAG。
201

被折叠的 条评论
为什么被折叠?



