DCM影像图片脱敏处理_图像脱敏_Porcelain_cs的博客-程序员秘密

技术标签: Java_Web  医疗  图片脱敏处理  DICOM影像图片操作  

DCM影像图片脱敏处理


现在很多医院设备拍片生成dcm格式的图片,里面有诸如病人姓名、出生年月、设备相关的一系列tag,前面应公司要求,需要对这些dcm格式的图片做一个脱敏处理,将一些敏感的私人信息模糊处理,如病人姓名“张三”,改为“张**”,以供其他非医疗人员学习调用该图片,避免了病人的隐私泄露。


处理效果对比图为:






需要的jar包:




程序源代码代码如下:

public class ModifiedDcm {
	public static void dealImg(String url){
		DicomObject dcmObj;
		DicomInputStream din=null;
	    HashMap<String, String> studyUIDBeforeAndAfter=new HashMap<String, String>();
		HashMap<String, String> serieUIDBeforeAndAfter=new HashMap<String, String>();
		ArrayList<String> dcmFiles4Changed=new ArrayList<String>();
		//File fileDCM=new File("E:\\DCM4CHEE\\DcmSend\\dcmsend\\CT23550\\1.dcm");
		File fileDCM=new File(url);//加载要修改的图片
		
		try {
			din=new DicomInputStream(fileDCM);
			if(din==null) return;
			dcmObj=din.readDicomObject();
			
			//修改patientName,如张三用张**代替
			String name=dcmObj.getString(Tag.PatientName);
			System.out.println(name);
			String[] arr=name.split("\\s+");
			StringBuffer sb=new StringBuffer();
			sb.append(arr[0]).append("**");
			dcmObj.remove(Tag.PatientName);//修改姓名tag
			dcmObj.putString(Tag.PatientName, VR.PN, sb.toString());
			
			din.close();
			
			//Save Changes
			FileOutputStream fos;
			try {
				fos = new FileOutputStream(fileDCM);
				BufferedOutputStream bos=new BufferedOutputStream(fos);
				DicomOutputStream dos=new DicomOutputStream(bos);
				try {
					dos.writeDicomFile(dcmObj);//将脱敏处理后的图片写入到输出文件
					dos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}
		} catch (IOException e) {
			e.printStackTrace();
			return;
		}
	}
	public static void main(String[] args) {
		dealImg("D:\\db_pic\\101\\5206632-0000000001-0001-10001-1.2.392.200046.100.2.1.114365574053.131105094655.2.1.1.1.dcm");
	}
}


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Porcelain_cs/article/details/72230687

智能推荐

JAVA:直面校招!滴滴2021线上笔试题,好家伙,我直接好家伙!_程序员线上笔试_coder诸葛的博客-程序员秘密

点赞关注,不会迷路!前言作为程序员的觉悟—— 就是要头顶脱发不留恋,代码还得天天练。 今天你练了吗?(你们放心,我头发还在)下面分享一些滴滴校招在线笔试题,给你们稍微简单练练手哈。一、D星群岛(全A,A了0.82的人考虑一下:四个岛,现在有两条桥1-2 3-4)时间限制: 3000MS内存限制: 589824KB题目描述:D星群岛由n个小岛组成。为了加强小岛居民之间的交流,头目决定启动一个造桥工程,将全部n个岛连接到一起。由于受到金融危机的影响,头目要求造...

matlab画图_matlab绘图两个纵坐标_Charcy阳的博客-程序员秘密

例 用不同的线型和颜色在同一坐标内绘制曲线 及其包络线。x=(0:pi/100:2*pi)';y1=2*exp(-0.5*x)*[1,-1];y2=2*exp(-0.5*x).*sin(2*pi*x);x1=(0:12)/2;y3=2*exp(-0.5*x1).*sin(2*pi*x1);plot(x,y1,'k:',x,y2,'b--',x1,y3,'rp');双纵坐标函数plotyy在Matlab中,如果需要绘制出具有不同纵坐标标度的两个图形,可以使用plotyy函数,它能把具有不.

NC140-排序-【数组】_学习是底线的博客-程序员秘密

题目描述给定一个数组,请你编写一个函数,返回该数组排序后的形式。示例1输入[5,2,3,1,4]返回值[1,2,3,4,5]题解:试了冒泡排序和选择排序两种算法,都超时。 int arr[5] = { 5,2,3,1,4 }; //冒泡排序 for (int i = 0; i &lt; 5 - 1; i++) { for (int j = 0; j &lt; 5 - i - 1; j++) { if (arr[j] &gt; arr[j + 1]) {

Android ViewPager 分页滑动_安卓开发 上滑分页_浮游生物123的博客-程序员秘密

ViewPager android.support.v4.view.ViewPager 滑动界面ViewPager<android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height

抽象工厂的缺点和解决方法_解决抽象工厂的问题_always_ming的博客-程序员秘密

先上干货,后面才是代码例子: 参考《设计模式之禅》的话“抽象工厂模式是工厂方法模式的升级版本”。其实就是用工厂方法生产具有多维度变化的产品类。什么是多维度的类?即一个类会有多个维度会影响其发生变化。比如下面例子的汽车类,一个维度是牌子,一个维度是型号。(23种设计模式里面还有结构型的桥接模式和行为型的访问者模式,也可以用来处理多维度类的问题) 我们知道,抽象工厂最大的缺点是产

力扣刷题笔记 50 Pow(x, n)_力扣pow_瓜瓜的笔记的博客-程序员秘密

题:实现 pow(x, n) ,即计算 x 的 n 次幂函数。(-100.0 &lt; x &lt; 100.0n 是 32 位有符号整数,其数值范围是 [−2∧31, 2∧31 − 1] 。)---------------------------------------------------------------------------------------一个数的n次幂,一般要分三种情况考虑: n &lt; 0, n = 0, n &gt; 0.通常解法, 暴力法,对n进行循环,时间复

随便推点

SpringBoot 一(入门篇)_学springboot之前要学什么_Matteo、的博客-程序员秘密

1、spring能干什么?​ 在学SpringBoot之前我们肯定已经学过了spring、SpringMvc、Mybatis等框架了。使用整合这三个框架的方式去开发我们的代码比我们直接使用原生的Servlet去做Web开发更方便,在体验到SSM框架带来的好处的同时,我们也在为使用SSM框架开发之前要写一大堆的配置文件而苦恼,毕竟将这些东西都整合在一起不容易。也就是说我们做Spring Web项目开发之前要做的步骤包括但不限于以下步骤:配置web.xml去加载Spring、SpringMvc等配置数

吐血整理收集时间长达一个月的Java: JVM(生命周期、结构体系、堆、栈、运行机制&原理)核心知识要点梳理_jvm栈的生命周期_折翼之舞°的博客-程序员秘密

JVM的基础概念JVM的中文名称叫Java虚拟机,它是由软件技术模拟出计算机运行的一个虚拟的计算机。JVM也充当着一个翻译官的角色,我们编写出的Java程序,是不能够被操作系统所直接识别的,这时候JVM的作用就体现出来了,它负责把我们的程序翻译给系统“听”,告诉它我们的程序需要做什么操作。我们都知道Java的程序需要经过编译后,产生.Class文件,JVM才能识别并运行它,JVM针对每个操作系统开发其对应的解释器,所以只要其操作系统有对应版本的JVM,那么这份Java编译后的代码就能够运行起来,这就是

使用 Docker 搭建 Java Web 运行环境_java思维导图666的博客-程序员秘密

Docker 是 2014 年最为火爆的技术之一,几乎所有的程序员都听说过它。Docker 是一种“轻量级”容器技术,它几乎动摇了传统虚拟化技术的地位,现在国内外已经有越来越多的公司开始逐步使用 Docker 来替换现有的虚拟化平台了。作为一名 Java 程序员,我们是时候一起把 Docker 学起来了!本文会对虚拟化技术与 Docker 容器技术做一个对比,然后引出一些 Docker 的名词...

疯狂Java讲义第五版第3章读书笔记_•••的博客-程序员秘密

第3章 数据类型和运算符3.1注释3.1注释

excel函数 OFFSET 、 ADDRESS 、 INDIRECT _offset和address函数怎样搭配_gzzwind的博客-程序员秘密

 OFFSET 全部显示全部隐藏<br />以指定的引用为参照系,通过给定偏移量得到新的引用。返回的引用可以为一个单元格或单元格区域。并可以指定返回的行数或列数。<br />语法<br />OFFSET(reference,rows,cols,height,width)<br />Reference     作为偏移量参照系的引用区域。Reference 必须为对单元格或相连单元格区域的引用;否则,函数 OFFSET 返回错误值 #VALUE!。<br />Rows     相对于偏移量参照系的左上角单元格

HDOJ 2544 最短路 (最短路 Dijkstra && SPFA && Floyd)_Paul-Yang的博客-程序员秘密

HDOJ 2544 最短路 (最短路 Dijkstra SPFA Floyd ) 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?

推荐文章

热门文章

相关标签