DCM4CHE之图像伪彩和反色

概述

对于医疗dicom图像来说,为了更好的突出病灶点,对图像做伪彩和反色是必不可少的,今天就来介绍一下如何对dicom图像进行伪彩和反色操作。

步骤

  • 对dicom图像进行解析,生成图片(可以参考我的另一篇博客 DCM4CHE图像显示)
  • 对生成出来的图片进行伪彩和反色处理

注意:对图像进行伪彩处理需要伪彩表,简单来说就是一个256大小的数组,里面包含颜色值,为啥是256大家也能猜到,因为灰度图像的颜色范围是8位也就是2的8次方256,没一个灰度像素值(数组下标)对应一个彩色的颜色值。

具体实现

/*
 * 对图像进行伪彩处理
 */
public void pseudoColorProcess(BufferedImage BI) throws IOException {
		String[] colorTable = {"#000000", "#000003", "#000007", "#00000b", "#00000f", "#000013", "#000017", "#00001b", "#00001f", "#000023", "#000027", "#00002b", "#00002f", "#000033", "#000037", "#00003b", "#00003f", "#000043", "#000047", "#00004b", "#00004f", "#000053", "#000057", "#00005b", "#00005f", "#000063", "#000067", "#00006b", "#00006f", "#000073", "#000077", "#00007b", "#00007f", "#000083", "#000087", "#00008b", "#00008f", "#000093", "#000097", "#00009b", "#00009f", "#0000a3", "#0000a7", "#0000ab", "#0000af", "#0000b3", "#0000b7", "#0000bb", "#0000bf", "#0000c3", "#0000c7", "#0000cb", "#0000cf", "#0000d3", "#0000d7", "#0000db", "#0000df", "#0000e3", "#0000e7", "#0000eb", "#0000ef", "#0000f3", "#0000f7", "#0000fb", "#0000ff", "#0003fb", "#0107f7", "#020bf3", "#030fef", "#0313eb", "#0417e7", "#051be3", "#061fdf", "#0723db", "#0727d7", "#082bd3", "#092fcf", "#0a33cb", "#0b37c7", "#0b3bc3", "#0c3fbf", "#0d43bb", "#0e47b7", "#0f4bb3", "#0f4faf", "#1053ab", "#1157a7", "#125ba3", "#135f9f", "#13639b", "#146797", "#156b93", "#166f8f", "#17738b", "#177787", "#187b83", "#197f7f", "#1a837b", "#1b8777", "#1b8b73","#1c8f6f", "#1d936b", "#1e9767", "#1f9b63", "#1f9f5f", "#20a35b", "#21a757", "#22ab53", "#23af4f", "#23b34b", "#24b747", "#25bb43", "#26bf3f", "#27c33b", "#27c737", "#28cb33", "#29cf2f", "#2ad32b", "#2bd727", "#2bdb23", "#2cdf1f", "#2de31b", "#2ee717", "#2feb13", "#2fef0f", "#30f30b", "#31f707", "#32fb03", "#33ff00", "#36ff00", "#39ff01", "#3cff02", "#3fff03", "#42ff03", "#46ff04", "#49ff05", "#4cff06", "#4fff07", "#52ff07", "#56ff08", "#59ff09", "#5cff0a", "#5fff0b", "#62ff0b", "#66ff0c", "#69ff0d", "#6cff0e", "#6fff0f", "#72ff0f", "#75ff10", "#79ff11", "#7cff12", "#7fff13", "#82ff13", "#85ff14", "#89ff15", "#8cff16", "#8fff17", "#92ff17", "#95ff18", "#99ff19", "#9cff1a", "#9fff1b", "#a2ff1b", "#a5ff1c", "#a8ff1d", "#acff1e", "#afff1f", "#b2ff1f", "#b5ff20", "#b8ff21", "#bcff22", "#bfff23", "#c2ff23", "#c5ff24", "#c8ff25", "#ccff26", "#cfff27", "#d2ff27", "#d5ff28", "#d8ff29", "#dbff2a", "#dfff2b", "#e2ff2b", "#e5ff2c", "#e8ff2d", "#ebff2e", "#efff2f", "#f2ff2f", "#f5ff30", "#f8ff31", "#fbff32", "#ffff33", "#fefb32", "#fef731", "#fef330", "#feef2f", "#fdeb2f", "#fde72e", "#fde32d","#fddf2c", "#fcdb2b", "#fcd72b", "#fcd32a", "#fccf29", "#fbcb28", "#fbc727", "#fbc327", "#fbbf26", "#fbbb25", "#fab724", "#fab323", "#faaf23", "#faab22", "#f9a721", "#f9a320", "#f99f1f", "#f99b1f", "#f8971e", "#f8931d", "#f88f1c", "#f88b1b", "#f7871b", "#f7831a", "#f77f19", "#f77b18", "#f77717", "#f67317", "#f66f16", "#f66b15", "#f66714", "#f56313", "#f55f13", "#f55b12", "#f55711", "#f45310", "#f44f0f", "#f44b0f", "#f4470e", "#f3430d", "#f33f0c", "#f33b0b", "#f3370b", "#f3330a", "#f22f09", "#f22b08", "#f22707", "#f22307", "#f11f06", "#f11b05", "#f11704", "#f11303", "#f00f03", "#f00b02", "#f00701", "#f00300"};
		
		int w = BI.getWidth();
		int h = BI.getHeight();
		
		for(int i=0;i<w;i++) {
			for(int j=0;j<h;j++) {
				int pixel = BI.getRGB(i, j);
				int nR = (pixel >> 16) & 0xFF;
				
				int colorPixel = Integer.parseInt(colorTable[nR].replace("#", ""), 16);
				BI.setRGB(i, j, colorPixel);
			}
		}
		
		ImageIO.write(BI, "jpg", new File("D:/dicomFile/test/des.jpg"));
	}
	
	/*
	 * 对图像进行反色处理
	 */
	public void invertProcess(BufferedImage BI) throws IOException {
		int w = BI.getWidth();
		int h = BI.getHeight();

		for(int i=0;i<w;i++) {
			for(int j=0;j<h;j++) {
				int pixel = BI.getRGB(i, j);
				int nR = 255 - (pixel >> 16) & 0xFF;
				int nG = 255 - (pixel >> 8) & 0xFF;
				int nB = 255 - pixel & 0xFF;
				
				int colorPixel = convertRGBToInt(nR, nG, nB);
				
				BI.setRGB(i, j, colorPixel);
			}
		}
		
		ImageIO.write(BI, "jpg", new File("D:/dicomFile/test/des_invert.jpg"));
	}
	
	private int convertRGBToInt(int nR, int nG, int nB) {
		return ((0xFF << 24) | (nR << 16) | (nG << 8) | nB);
	}

main方法

	public static void main(String[] args) {
		File imageFile = new File("D:/dicomFile/test/src.jpg");
		ImageProcess process = new ImageProcess();
		 ImageReader reader = getImageReader();
		try {
			
			ImageInputStream iis = ImageIO.createImageInputStream(imageFile);
			reader.setInput(iis, true);
			
			process.pseudoColorProcess(reader.read(0));
			process.invertProcess(reader.read(0));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

结果

原始图片
在这里插入图片描述
伪彩图片
在这里插入图片描述
反色图片
在这里插入图片描述
好了,到此为止成功,大家要明白原理,知其然也要知其所以然。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啸鸢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值