NodeJs对DICOM医学影像文件中的TAG进行修改编辑

3 篇文章 0 订阅
文章介绍了如何利用JavaScript库DicomEdit.js在Node.js环境中读取、修改并输出DICOM文件的TAG,以实现数据匿名化,增强数据隐私保护。示例代码展示了如何修改PatientID、PatientName、StudyDate和StudyID等关键TAG。
摘要由CSDN通过智能技术生成

最近公司有个新需求是对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文件,当然我们也可以直接覆盖原来文件,这个根据需求决定。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值