读取并显示dicom文件的图像数据和覆盖层数据
2016-11-29 14:10
1061 查看
一、图像数据
图像数据存储在标签<7FE0,0010>中,按照一行一行 的像素字节排列过去。在读取dicomTag时,会保存<7FE0,0010>在文件中指向的位置.
一般后面会专门的读取图像的字节流.
步骤如下:
新建一个位图:
Bitmap gdiImg=new Bitmap(cols, rows); //其中cols和rows为图像的行列值,存储在<0028,0010>和<0028,0011>连个标签中
确定图像每个像素的字节数:
dataLen / 8 * colors //colors指<0028,0002>,对于RGB为3,灰度图像为1,dataLen指<0028,0100>,每个像素的bit位数,除以8正好是字节数
对像素值做调窗操作
将值赋给bitmap
gdiImg.SetPixel(j, i , pixel);
总结:从左往右,从上往下扫描读取:
//for (int i = 0; i < gdiImg.Height; i++)
//{
// for (int j = 0; j < gdiImg.Width; j++)
// {
// if (reads >= pixDatalen)
// break;
// byte[] pixData = dicomFile.ReadBytes(dataLen / 8 * colors);
// reads += pixData.Length;
二、overlayData
覆盖层数据存储在标签<60xx,3000>中,其他有如下几个重要的标签:
(60xx,0010) Overlay Rows
(60xx,0011) Overlay Columns
(60xx,0050) Overlay Origin overlayData相对于图像数据的像素坐标 表示rows\columns,如果是位于左上角,这个值为1\1
(60xx,0040) Overlay Type 表明这个覆盖层数据时一个图像,还是一个感兴趣的区域,枚举值:G-Graphics,R-ROI
(60xx,0100) Overlay Bits Allocated 此值为1
解决实例:
西门子的波普图有重叠层
覆盖层 的图像显示有一个属性可以设置不透明度,控制覆盖层图像与像素图像的和谐显示
//设置不透明度
dc.PushOpacity(0.4);
图像数据存储在标签<7FE0,0010>中,按照一行一行 的像素字节排列过去。在读取dicomTag时,会保存<7FE0,0010>在文件中指向的位置.
一般后面会专门的读取图像的字节流.
步骤如下:
新建一个位图:
Bitmap gdiImg=new Bitmap(cols, rows); //其中cols和rows为图像的行列值,存储在<0028,0010>和<0028,0011>连个标签中
确定图像每个像素的字节数:
dataLen / 8 * colors //colors指<0028,0002>,对于RGB为3,灰度图像为1,dataLen指<0028,0100>,每个像素的bit位数,除以8正好是字节数
对像素值做调窗操作
将值赋给bitmap
gdiImg.SetPixel(j, i , pixel);
总结:从左往右,从上往下扫描读取:
//for (int i = 0; i < gdiImg.Height; i++)
//{
// for (int j = 0; j < gdiImg.Width; j++)
// {
// if (reads >= pixDatalen)
// break;
// byte[] pixData = dicomFile.ReadBytes(dataLen / 8 * colors);
// reads += pixData.Length;
// Color c = Color.Empty; // if (colors == 1) // { // int grayGDI; // double gray = BitConverter.ToUInt16(pixData, 0); // //调窗代码,就这么几句而已 // //1先确定窗口范围 2映射到8位灰度 // int grayStart = (windowCenter - windowWith / 2); // int grayEnd = (windowCenter + windowWith / 2); // if (gray < grayStart) // grayGDI = 0; // else if (gray > grayEnd) // grayGDI = 255; // else // { // grayGDI = (int)((gray - grayStart) * 255 / windowWith); // } // if (grayGDI > 255) // grayGDI = 255; // else if (grayGDI < 0) // grayGDI = 0; // c = Color.FromArgb(grayGDI, grayGDI, grayGDI); // } // else if (colors == 3) // { // c = Color.FromArgb(pixData[0], pixData[1], pixData[2]); // } // gdiImg.SetPixel(j, i, c); // } //}
二、overlayData
覆盖层数据存储在标签<60xx,3000>中,其他有如下几个重要的标签:
(60xx,0010) Overlay Rows
(60xx,0011) Overlay Columns
(60xx,0050) Overlay Origin overlayData相对于图像数据的像素坐标 表示rows\columns,如果是位于左上角,这个值为1\1
(60xx,0040) Overlay Type 表明这个覆盖层数据时一个图像,还是一个感兴趣的区域,枚举值:G-Graphics,R-ROI
(60xx,0100) Overlay Bits Allocated 此值为1
解决实例:
西门子的波普图有重叠层
覆盖层 的图像显示有一个属性可以设置不透明度,控制覆盖层图像与像素图像的和谐显示
//设置不透明度
dc.PushOpacity(0.4);
相关文章推荐
- android 解析并显示dicom文件的数据和图像
- HTML5 FileReader详解与实例---读取并显示图像文件
- VTK实现Dicom文件的读取及显示
- JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
- 复制文件时,如何显示进度条(使用BlockRead函数读取数据,并插入application.ProcessMessages)
- Visual C++中实现对图像数据的读取显示
- DICOM医学图像处理:DICOM存储操作之“多幅BMP图像数据存入DCM文件”
- ENVI读取img并显示图像数据
- python 在excel文件中写入date日期数据,以及读取excel日期数据,如何在python中正确显示date日期。
- JQuery读取XML文件数据并显示
- ubuntu下C语言打开bmp图像文件并读取数据
- C++文件流操作,从文件中读取数据并显示
- JQuery读取XML文件数据并显示的实现代码
- 1.读取Dicom文件并进行显示
- Qt从指定目录读取图像文件保存并在QLabel上不断显示Demo
- MATLAB读取和显示obj文件的数据
- Android从文件读取图像显示的效率问题
- Visual C++中实现对图像数据的读取显示
- Android从文件读取图像显示的效率问题
- Qt实现读取显示obj文件——绘制数据