int16,uint8等图像背后的逻辑

时间:2018-02-17 22:23:02

标签: python image numpy dicom

我可能会误解图像中的数据类型。让我们说我们有一个uint8图像。由于uint8介于0和255之间,因此0是最暗的,255是最亮的强度值。

相同的逻辑会使-32768成为最暗的,32767是最强的int16图像强度值。但是,我有一个int16图像(它最初是一个dicom),其中最暗的像素是-1024,最亮的是4095.我说int16因为像素保存在int16类型的numpy数组中。

此外,当我连接两个int16 numpy数组时,其中一个是a = np.ones((100,100), dtype=np.int16) * 32767而另一个是b = np.ones((100,100), dtype=np.int16) * 32766,它会产生二进制图像,其中32767s是白色,32766s是黑色。

有人可以帮助我解决我的错误吗?

1 个答案:

答案 0 :(得分:3)

简短回答

没有错,这就是DICOM的工作方式。

答案很长

在DICOM标准中,像素值与其颜色(灰度级)没有直接关系。这些值应与所获取项目的物理属性相对应(例如,在计算机断层扫描中,像素值以Hounsfield Units。*进行测量。*(除非它们是线性重新缩放的,请参见下文)。)

基于由用户设置的任意选择的最小值和最大值动态地显示像素图像的灰度级。每个像素值小于或等于最小值是黑色,每个像素大于或等于最大值是白色,其他像素值是线性内插灰度级。

因此,在二进制图像中,黑色最小值等于32766,白色最大值等于32767,这是完全没法的。

如果您使用DICOM查看器,您可以动态更改这些最小值和最大值,因此您将更改图像的总对比度和亮度。放射科医师有必要诊断,例如不同范围的肺和骨骼。如果您将DICOM导出为其他文件格式,您应该选择什么是颜色映射。通常它是全范围的(最低值变为黑色,最亮的变为白色)。

还有另外两个值,通常用来代替最小值和最大值:"窗口宽度" (ww)和"窗口级别" (WL)。 $self->visible = true;ww = max-min

你应该看看这些问题和答案:

*你还应该考虑标签" rescale intercept" (0028,1052),"重新缩放斜率" (0028,1053),像素数组的线性重新缩放值为最终值,但通常是在dicom工具包中实现。

  

FinalPixelValue =(RawPixelValue * RescaleSlope)+ RescaleIntercept