当我使用dcmtk时,为什么我要从2^15中减去dicom图像的像素值?
Why should I subtract my pixel values of dicom image from 2^15 when I'm using dcmtk?
我正在使用dcmtk读取dicom图像,并且我在新示例中具有以下属性:
(0028,0004) Photometric Interpretation: MONOCHROME2
(0028,0010) Rows: 512
(0028,0011) Columns: 512
(0028,0030) Pixel Spacing: 0.4688 .4688
(0028,0100) Bits Allocated: 16
(0028,0101) Bits Stored: 16
(0028,0102) High Bit: 15
(0028,0103) Pixel Representation: 1
(0028,0106) Smallest Image Pixel Value: 0
(0028,0107) Largest Image Pixel Value: 2732
(0028,1050) Window Center: 1366
(0028,1051) Window Width: 2732
我使用getOutputData(16)读取int16_t数据。这让我很惊讶,因为值在-1*(2^16)附近是负的,当我减去2^15的值时,一切似乎都没问题,我可以看到图像!: - (
现在我有两个问题:
- 为什么我要减去2^15的值,它就行了?图像上没有可用的填充值!
- 在getOutputData的文档中,它说的是渲染的像素数据总是unsigned.。当我的图像数据因为(0028,0103)属性而被签名时,这意味着什么?如果这个方法不合适,那么我可以通过dcmtk得到真实的数据吗?
关键是Pixel Representation(0028,0106)数据元素。
PixelRepresentation = 0 -> unsigned
PixelRepresentation = 1 -> signed
在你的例子中,你有一个值'1',所以你必须读取和解释这些值为有符号整数。
从未使用dcmtk,但看起来您必须应用模态VOI的斜率/截距参数才能获得正确的数字。
参见重新缩放斜率和重新缩放截距以及DICOM图像的窗宽和中心计算。
根据文档getOutputData在呈现之前应用表示VOI,因此您总是获得无符号数据。因此,如果你请求16位数据,你将得到从0到65535的像素,而不管数据集中指定的最小值和最大值;这是因为返回的数据是要显示的,而不是存储在图像中的原始数据。我认为你应该把值右移8位,或者只是要求8位数据(即使图像是16位):我不认为你的图形卡可以处理16位,如果灰度。
DICOM报头说数据作为带符号值存储在DICOM文件中,但看起来文档说getOutputData将其转换为无符号值。因此,尝试读取getOutputData的输出作为uint16_t而不是int16_t。
我找到了答案。优秀的官方开发人员在这里对此进行了解释。见第2页。它与DCMTK工具包完全相关。
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 如何使用Imebra库将压缩像素(用我自己的编码器压缩)回到DICOM图像文件中
- 如何在VTK DICOM阅读器中读取图像类型(0008,0008)
- 将VTKLOOVIUTS设置在卷DICOM图像上
- 从PixelData值(DCMTK)开始解压缩JPEG DICOM图像
- DICOM图像处理,可视化和GUI-C++和Python
- 如何使用Imebra库修改DICOM文件中的图像像素
- 在QLabel/QGraphicsView中显示Dicom图像
- 保存itkImage为DICOM时,不写入图像位置/方向
- 当我使用dcmtk时,为什么我要从2^15中减去dicom图像的像素值?
- 将16位灰度DICOM图像转换为8位:正确的步骤
- 在.net中使用open cv打开dicom图像时链接错误