医学图像处理中的图像格式通常为dcm格式,在C++中读取使用可以通过DCMTK库中的接口函数来实现。通常文件的读取步骤如下:
- 使用DcmFileFormat类构造最基本的文件对象。
- 使用loadFile()函数读取文件,并通过OFCondition类型的返回值判断操作是否成功。
- 所有的数据都存在DcmDataSet对象中,用getDataSet方法得到图像矩阵
读取操作如下所示:
int CLoadImageOperation::ReadDcmImage(char * image_path)
{
int nRet(0);
unsigned short* pusDcmData = NULL;
unsigned short usRow = 0;
unsigned short usCol = 0;
DcmFileFormat dFile;
unsigned short width;
unsigned short height;
OFCondition loadState = dFile.loadFile(image_path);
if (loadState.status() == OF_ok)
{
DcmDataset *dataset = dFile.getDataset();
DcmMetaInfo *metainfo = dFile.getMetaInfo();
dataset->findAndGetUint16(DCM_Rows, height);
dataset->findAndGetUint16(DCM_Columns, width);
usRow = height;
usCol = width;
DcmElement*element = NULL;
dataset->findAndGetElement(DCM_PixelData, element);
element->getUint16Array(pusDcmData);
int nSize = usRow * usCol;
memcpy(m_pusImgData, pusDcmData, nSize * sizeof(UINT16));
}
else
{
nRet = OF_error;
}
return nRet;
}