LeadTools中文图像处理教程(10):窗位(仅用于Medical)

发布时间:2014/09/19 00:09 发布者:Linda

返回博客中心

 

  • LeadTools中文图像处理教程(1):更改数据格式 点击进入
  • LeadTools中文图像处理教程(2):图像的几何变换 点击进入
  • LeadTools中文图像处理教程(3):倾斜校正 点击进入
  • LeadTools中文图像处理教程(4):调整图像亮度和对比度 点击进入
  • LeadTools中文图像处理教程(5):图像去噪 点击进入
  • LeadTools中文图像处理教程(6):检测和增强边缘、线条 点击进入
  • LeadTools中文图像处理教程(7):应用艺术效果 点击进入
  • LeadTools中文图像处理教程(8):调整色彩 点击进入
  • LeadTools中文图像处理教程(9):添加图像至另一个图像 点击进入
  • LeadTools中文图像处理教程(10):窗位(仅用于Medical) 点击进入
  • LeadTools中文图像处理教程(11):对比图像 点击进入

LeadTools是全球最优秀的图形、图像处理开发包,它可以处理各种格式的文件,并包含所有图形、图像的处理和转换功能,支持图形、图像、多媒体、条形码、OCR、Internet、DICOM等等,具有各种软硬件平台下的开发包,是不可多得优秀软件。

LeadTools医学图像处理方面的功能非常强大,本博文将为大家介绍

  • “窗位”相关知识
  • LeadTools WindowLevel及相关类
  • 如何使用WindowLevel及相关类设定图像的窗位,并将窗位信息保存至图像。

    “窗位”知识简介

    窗位(Window Level)又称窗水平,是图像显示过程中代表图像灰阶的中心位置。人体组织CT值的范围为-1000到+1000共2000个分度,人眼不能分辨这样微小灰度的差别,仅能分辨16个灰阶。为了提高组织结构细节的显示, 能分辨CT值差别小的两种组织,医疗人员可以根据诊断需要调节图像的对比度和亮度,这种调节技术称为窗技术-窗宽、窗位的选择。窗位是指窗宽上、下限CT值的平均数。因为不同组织的CT值不同,欲观察其细微结构最好选择该组织的CT值为中心进行扫描,这个中心即为窗位。窗位的高低影响图像的亮度:窗位低图像亮度高呈白色;窗位高图像亮度低呈黑色,但在实际操作中尚须兼顾其它结构选用适当的窗位。

     

    LeadTools WindowLevel及相关类简介

    窗位只适用于12位和16位的灰度图像,通过指定位范围和/或用户自定义的颜色表来绘制灰阶强度。WindowLevel为绘制方法提供了随需应变的窗位,且不会改变图像。WindowLevel将图像转换为窗位8位或24位RGB图像。通过nLowBit和nHighBit参数将“范围”传递给方法,通过pLUT参数将“用户预定义的颜色表”传递给方法。为了帮助您设定位范围和颜色表,LeadTools提供了MinMaxBitsCommand 类和 MinMaxValuesCommand类。MinMaxBitsCommand类可获取12位或16位灰度图像中值得最小和最大位。MinMaxValuesCommand获取图像中最大和最小的强度值。WindowLevelFillLookupTable使用局域指定值的颜色梯度填充用户分配的LUT。

    注意:只有TIFF和DICOM文件格式可以保存有窗位的图像。若想要图像中包含窗位,可以使用WindowLevel 并为flags参数指定RasterWindowLevelMode.PaintAndProcessing,或以支持窗位的文件格式加载图像。若有窗位的图像被保存为其他文件格式,图像数据会在保存前被转换的。

    更多信息您可以参考Saving Window-Leveled Bitmaps.

     

    使用LeadTools在图像中设定窗位的具体步骤:

    1. 打开Visual Studio .NET点击 文件->新建->项目…。打开新建项目对话框后,在模板中选择“Visual C#”或“Visual Basic”,随后选择“Windows窗体应用程序”。在名称栏中输入项目名称“WindowLevel”,并使用“浏览”按钮选择您工程的存储路径,点击“确定”。

    2. 在“解决方案资源管理器”中,右击“引用”,选择“添加引用”。根据当前工程的 Framework 版本和生成目标平台,选择添加相应的LeadTools控件,例如工程中的版本为 Framework 4.0、生成目标平台是 x86,则浏览选择Leadtools For .NET文件夹” <LEADTOOLS_INSTALLDIR>\Bin\DotNet4\Win32”,选择以下的DLL“:

    • Leadtools.dll
    • Leadtools.Codecs.dll
    • Leadtools.Codecs.Bmp.dll
    • Leadtools.WinForms.dll
    • Leadtools.ImageProcessing.Core.dll
    • Leadtools.ImageProcessing.Color.dll
    • Leadtools.ImageProcessing.Utilities.dll
    • Leadtools.Dicom.dll
    • Leadtools.Drawing.dll

    点击“确定”按钮,将以上所有的DLL添加到应用程序中。

    3.工具箱(视图->工具箱),添加两个Button控件(将button1的Text属性修改为“加载图像”,将button2的Text属性修改为“设定窗位并保存图像”),一个Panel控件(Name修改为panelImage)。如下图:

    clip_image002

    4. 切换至Form1的代码视图(右击Form1,选择查看代码),将下面几行代码添加到文件开始处:

      1: using Leadtools; 
    
      2: using Leadtools.Codecs; 
    
      3: using Leadtools.ImageProcessing; 
    
      4: using Leadtools.ImageProcessing.Core; 
    
      5: using Leadtools.ImageProcessing.Color; 
    
      6: using Leadtools.WinForms; 
    
      7: using Leadtools.Dicom; 
    
      8: using Leadtools.Drawing; 

    5. 将以下变量添加至Form1类:

      1: private RasterCodecs codecs;
    
      2: private RasterImage image;
    
      3: private RasterImageViewer imageViewer;

    6. 双击“加载图像”按钮,在button1 Click事件句柄中添加以下代码:

      1: codecs = new RasterCodecs();
    
      2: //加载图像
    
      3: image = codecs.Load(Path.Combine(Application.StartupPath, @"..\..\Pic\IMAGE1.cmp"));
    
      4: //显示图像
    
      5: imageViewer = new RasterImageViewer();
    
      6: imageViewer.BackColor = Color.DarkCyan;
    
      7: imageViewer.Dock = DockStyle.Fill;
    
      8: imageViewer.InteractiveMode = RasterViewerInteractiveMode.Pan;
    
      9: imageViewer.HorizontalAlignMode = RasterPaintAlignMode.Center;
    
     10: imageViewer.VerticalAlignMode = RasterPaintAlignMode.Center;
    
     11: imageViewer.AutoResetScaleFactor = false;
    
     12: panelImage.Controls.Add(imageViewer);
    
     13: imageViewer.BringToFront();
    
     14: imageViewer.Image = image;

    7. 双击“设定窗位并保存图像”按钮,在button2 Click事件句柄中添加以下代码:

      1:             if (image == null)
    
      2:             {
    
      3:                 MessageBox.Show("请首先加载图像!");
    
      4:                 return;
    
      5:             }
    
      6:             // 将图像转换为16位灰度图像
    
      7:             GrayscaleCommand grayscaleCmd = new GrayscaleCommand(16);
    
      8:             grayscaleCmd.Run(image);
    
      9: 
    
     10:             MinMaxBitsCommand minMaxBitsCmd = new MinMaxBitsCommand();
    
     11:             minMaxBitsCmd.Run(image);
    
     12: 
    
     13:             MinMaxValuesCommand minMaxValuesCmd = new MinMaxValuesCommand();
    
     14:             minMaxValuesCmd.Run(image);
    
     15: 
    
     16:             int lowBit = minMaxBitsCmd.MinimumBit;
    
     17:             int highBit = minMaxBitsCmd.MaximumBit;
    
     18: 
    
     19:             int size = (1 << (image.HighBit - image.LowBit + 1));
    
     20:             RasterColor[] palette = new RasterColor[size];
    
     21: 
    
     22:             // 用红色填充LUT的前半部分
    
     23:             for (int x = 0; x < size / 2; x++)
    
     24:             {
    
     25:                 palette[x].R = 255;
    
     26:                 palette[x].G = 0;
    
     27:                 palette[x].B = 0;
    
     28:                 palette[x].Reserved = 0;
    
     29:             }
    
     30: 
    
     31:             int minVal = minMaxValuesCmd.MinimumValue;
    
     32:             int maxVal = minMaxValuesCmd.MaximumValue;
    
     33: 
    
     34:             //用灰度值填充后半部分
    
     35:             for (int x = (size / 2); x < size; x++)
    
     36:             {
    
     37:                 palette[x].R = Convert.ToByte(Math.Min(255, ((x - minVal) * 255 / (maxVal - minVal))));
    
     38:                 palette[x].G = palette[x].R;
    
     39:                 palette[x].B = palette[x].R;
    
     40:                 palette[x].Reserved = 0;
    
     41:             }
    
     42:             image.WindowLevel(lowBit, highBit, palette, RasterWindowLevelMode.PaintAndProcessing);
    
     43: 
    
     44:             codecs.Save(image, Path.Combine(Application.StartupPath, @"..\..\Pic\WindowLevelResult.bmp"), RasterImageFormat.Bmp, 0);

    8. 编译、运行程序。结果如下图所示:

    clip_image004

    clip_image006

     

    本博文DEMO下载:

     

    Demo提供了LeadTools窗位的全部代码。为了运行Demo代码,你需要下载LeadTools全功能试用版

    LeadTools试用版下载

    了解LeadTools产品更多特性

    若您在使用LeadTools的过程中遇到任何问题,欢迎在葡萄城开发者社区LeadTools板块提问,我们的专业技术团队期待您的到来!

    点击查看更多LeadTools使用教程、博文


    关于葡萄城

    赋能开发者!葡萄城是专业的集开发工具、商业智能解决方案、低代码开发平台于一身的软件和服务提供商,为超过 75% 的全球财富 500 强企业提供服务。葡萄城专注控件软件领域30年,希望通过模块化的开发控件、灵活的低代码应用开发平台等一系列开发工具、解决方案和服务,帮助开发者快速响应复杂多变的业务需求,最大程度地发挥开发者的才智和潜能,让开发者的 IT 人生更从容更美好。

    了解详情,请访问葡萄城官网