使用pydicom读取RGB DICOM是否自动转为(x,y,channel)格式?附转二进制需求
关于pydicom读取RGB DICOM图像的格式与转二进制图像的解决方案
1. Planar Configuration参数与像素格式的说明
DICOM标准中,Planar Configuration参数定义了RGB像素的存储方式:
- 值为1时,表示平面式存储(先存储所有R通道像素,再依次存储G、B通道的全部像素)
- 值为0时表示交错式存储(按像素顺序存储R、G、B分量,即第一个像素的RGB,第二个像素的RGB……)
pydicom在读取RGB DICOM时,会自动将平面式存储(Planar Configuration=1)的像素数据转换为(x, y, channel)格式,也就是你得到的(301, 301, 3),这是工具库的默认处理逻辑,目的是让用户能直接用常见的图像维度进行后续操作,无需手动拆分平面数据。
2. 将RGB DICOM转为二进制图像的步骤
二进制图像指仅包含黑、白两种颜色的图像,需先将RGB转为灰度图,再通过阈值分割实现,具体操作如下:
步骤1:读取DICOM文件并获取RGB数据
import pydicom import numpy as np from skimage.color import rgb2gray from skimage.filters import threshold_otsu # 读取目标DICOM文件 ds = pydicom.dcmread("your_rgb_dicom_file.dcm") # 获取(x, y, 3)格式的RGB像素数组 rgb_pixels = ds.pixel_array
步骤2:将RGB图像转为灰度图
有两种常用方式:
# 方式1:使用scikit-image工具库转换 gray_pixels = rgb2gray(rgb_pixels) # 方式2:手动按加权公式计算(符合人眼对颜色的感知) gray_pixels = 0.2989 * rgb_pixels[..., 0] + 0.5870 * rgb_pixels[..., 1] + 0.1140 * rgb_pixels[..., 2]
步骤3:阈值分割生成二进制图像
可以用自动阈值算法(如Otsu)或手动指定阈值:
# 自动计算最优阈值 threshold = threshold_otsu(gray_pixels) # 生成布尔型二进制数组,大于阈值为True(白色),否则为False(黑色) binary_pixels = gray_pixels > threshold # 若需转为0-255的uint8格式(方便保存或展示) binary_pixels = (binary_pixels * 255).astype(np.uint8)
注意事项
- RGB类型的DICOM一般为真彩色图像,无需额外做窗宽窗位调整;若为特殊场景下的伪彩DICOM,需先确认原始数据含义再处理。
- 确保已安装依赖库:执行
pip install pydicom numpy scikit-image完成安装
内容的提问来源于stack exchange,提问作者侯元昊
相关产品推荐
相关产品推荐

