通过cornerstone2.0获取dicom文件头信息
在解析dicom头信息之前,需要先明确,DICOM文件的具体格式,可移步:https://blog.virtualman.top/index.php/post/57.html
/**
* 获取头部信息,仅限Dicom文件
*/
function getHeaderInfo() {
if(store.state.volumeInfo.type !== 'dicom'){
store.state.dicomHeadInfo ={};
return ElMessage.error('仅限DICOM文件');
}
cornerstone.imageLoader.loadImage(store.state.volumeInfo.volume.imageIds[0]).then(async (imageData) => {
if (imageData.data) {
store.state.dicomHeadInfo = {
PatientName: imageData.data.string("x00100010"),
PatientID: imageData.data.string("x00100020"),
PatientBirthDate: imageData.data.string("x00100030"),
PatientSex: imageData.data.string("x00100040"),
PatientWeight: imageData.data.string("x00101030"),
PatientHeight: imageData.data.string("x00101030"),
StudyDate: imageData.data.string("x00080020"),
StudyDescription: imageData.data.string("x00081030"),
AccessionNumber: imageData.data.string("x00080050"),
InstitutionName: imageData.data.string("x00080080"),
InstitutionAddress: imageData.data.string("x00080081"),
InstitutionalDepartmentName: imageData.data.string("x00081040"),
Manufacturer: imageData.data.string("x00080070"),
ManufacturerModelName: imageData.data.string("x00081090"),
SoftwareVersions: imageData.data.string("x00081090"),
ProtocolName: imageData.data.string("x00181030"),
SeriesDescription: imageData.data.string("x0008103e"),
SeriesNumber: imageData.data.string("x00200011"),
InstanceNumber: imageData.data.string("x00200013"),
Modality: imageData.data.string("x00080060"),
SeriesInstanceUID: imageData.data.string("x0020000e"),
StudyInstanceUID: imageData.data.string("x0020000d"),
SOPInstanceUID: imageData.data.string("x00080018"),
SOPClassUID: imageData.data.string("x00080016"),
ImageType: imageData.data.string("x00080008"),
Rows: imageData.data.string("x00280010"),
Columns: imageData.data.string("x00280011"),
PixelSpacing: imageData.data.string("x00280030"),
ImageOrientation: imageData.data.string("x00200037"),
ImagePosition: imageData.data.string("x00200032"),
SliceThickness: imageData.data.string("x00180050"),
SliceLocation: imageData.data.string("x00201041"),
PixelRepresentation: imageData.data.string("x00280103"),
BitsAllocated: imageData.data.string("x00280100"),
BitsStored: imageData.data.string("x00280101"),
HighBit: imageData.data.string("x00280102"),
WindowCenter: imageData.data.string("x00281050"),
Windowwidth: imageData.data.string("x00281051"),
// PixelData: imageData.data.string("x7fe00010"),
}
} else {
ElMessage.error("暂无图像信息");
}
}).catch((e)=>{
ElMessage.error("暂无图像信息");
store.state.dicomHeadInfo ={};
});
}
简单说下上述代码,这段代码定义了一个名为 getHeaderInfo
的函数,用于从一个 DICOM 文件中提取元数据信息,并将其存储在应用的状态管理器(store
)中。
首先检查当前加载的数据类型是否为 DICOM 类型,如果不是,则会通过 ElMessage.error
显示一条错误消息,并清除 DICOM 头信息。如果数据类型正确,那么它会使用 cornerstone.imageLoader.loadImage
方法加载第一个图像的 ID(因为dicom文件通常都是一组的形式加载,我们取头信息的时候只需要取出其中一张的头信息即可),并从中读取一系列标准的 DICOM 标签值。