DCMTK、ITK、VTK读取dicom影像数据的方法
直接上代码,调用不同的医学影像库读取dicom影像信息
1. DCMTK读取影像中的pixelData
//参数 list:为输入的图像文件名列表
bool DCMTKReadDicoms(QStringList list)
{
DJDecoderRegistration::registerCodecs();
DJEncoderRegistration::registerCodecs();
DcmRLEEncoderRegistration::registerCodecs();
DcmRLEDecoderRegistration::registerCodecs();
DcmFileFormat dcmff_ ;
DcmDataset *dset = dcmff_.getDataset();
DcmElement *element = nullptr;
for (int i = 0; i < list.size(); i++)
{
OFCondition result;
result = dcmff_.loadFile(list.at(i).toStdString().data());
dset->chooseRepresentation(EXS_LittleEndianImplicit, nullptr);
result = dset->findAndGetElement(DCM_PixelData,
element);
DcmPixelData *dpix = NULL;
dpix = OFstatic_cast(DcmPixelData *, element);
/* 因为我们有压缩数据,所以必须利用DcmPixelSequence
以便以原始格式访问,例如解压缩
使用外部库
*/
DcmPixelSequence *dseq = NULL;
E_TransferSyntax xferSyntax = EXS_Unknown;
const DcmRepresentationParameter *rep = NULL;
// 查找访问DCMTK中数据的正确表示所需的键
dpix->getOriginalRepresentationKey(xferSyntax, rep);
// 访问原始数据表示并在像素序列内获得结果
result = dpix->getEncapsulatedRepresentation(dset->getCurrentXfer(), rep, dseq);
if (