DCM医学影像文件的格式与读取方法分享

医学影像DCM是个类似PNG的分块格式,内涵丰富医疗信息,由于应用领域较窄,OpenCV没有提供对其加载支持,一般采用dcmtk库进行加载。

博主本着研究探索的精神写了这段代码,并分享出来,提供了解析DCM的DIB数据、宽高、窗宽窗位、像素间距的功能,支持反色DCM。

将来可以参考spec文档进行扩充,可以在大框架中加入块的处理,从而抽取更多感兴趣的信息,也可以加入压缩DCM的支持。


// 输入:文件名
// 输出:宽高 窗宽窗位 像素间距 dib
unsigned short* dcmLoadImage(char* fn, int& width, int& height, int& windowWidth, int& windowLevel, double& pixelSpacing)
{
	// 读取整个文件到内存
	FILE* f = fopen(fn, "rb");
	fseek(f, 0, SEEK_END);
	int dcmSize = ftell(f);
	fseek(f, 0, SEEK_SET);
	unsigned char* dcm = new unsigned char[dcmSize];
	fread(dcm, dcmSize, 1, f);
	fclose(f);
	
	// 解析
	width = -1;
	height = -1;
	windowWidth = -1;
	windowLevel = -1;
	pixelSpacing = 0.0;
	bool invert = false;
	unsigned short* dib = NULL;
	int dibSize = -1;
	int p = 132;
	while( p


你可能感兴趣的:(DCM医学影像文件的格式与读取方法分享)