C#開發PACS醫學影像處理系統(七):讀取影像Dicom信息

Dicom的文件信息通常是由設備信息、圖像信息、病人信息等Tag標記組成的,用字節長度和偏移量來區分,html

具體數據結構能夠自行去參考Dicom文件解析,內容比較多,這裏不贅述。算法

 

對於經常使用的Tag,能夠簡單的理解爲兩層結構,第一層是組,第二層是組包含的元素,每一個組號和元素號用2個字節表示(Uint16),數據結構

例如經常使用的組有 0002組描述設備通信,0008組描述特徵參數,0010組描述患者信息,0028組描述圖像信息參數,架構

例如 0010組裏面又包含病人姓名、年齡、性別等。併發

 

一樣的,按照上一篇文章,仍是用fo-dicom來解析Dicom信息,能夠直接經過DicomTag的類型感知來獲取你想要的Tag值。函數

        //實例化文件處理對象並打開文件
            DicomFile dicomFile = DicomFile.Open(@"C:\101\1.dcm");
            //獲取dicom圖像對象
            DicomImage dicomImage = new DicomImage(dicomFile.Dataset);

            //接收變量
            string [] name;
            //讀取病人姓名
            dicomFile.Dataset.TryGetValues<string>(DicomTag.PatientName, out name);
            if (name != null)
            {
                Console.WriteLine(name[0]);
            }

 

有時候咱們並不知道某個Tag值對應的名稱叫什麼,例如 0x0010 0x0020, 因此去DicomTag 類型裏面搜索將是一件很痛苦的事情,高併發

這時候須要本身封裝一個Tag值操做類,重載建立標籤函數,不只支持uint16,還支持string字符串的組號和元素帶入並查詢工具

 /// <summary>
    /// 標籤管理器
    /// </summary>
    public static class TagManager
    {
        /// <summary>
        /// 設置一個標籤
        /// </summary>
        /// <param name="alignment">標籤方位</param>
        /// <param name="tagRow">標籤所在行數(四個角1到10,上下左右只支持一行)</param>
        /// <param name="dicomTag">標籤值</param>
        /// <param name="tagFont">標籤樣式</param>
        public static TagHandler CreateTag(TagAlignment alignment, int tagRow, DicomTag dicomTag, ImageTagFont tagFont = null)
        {
            TagHandler tag = new TagHandler
            {
                Alignment = alignment,
                DicomTag = dicomTag,
                TagRow = tagRow,
                TagType = TagType.TagValue,
                TagFont = tagFont
            };
            return tag;
        }


        /// <summary>
        /// 設置一個標籤
        /// </summary>
        /// <param name="alignment">標籤方位</param>
        /// <param name="tagRow">標籤所在行數(四個角1到10,上下左右只支持一行)</param>
        /// <param name="group">標籤組</param>
        /// <param name="element">標籤元素</param>
        /// <param name="tagFont">標籤樣式</param>
        public static TagHandler CreateTag(TagAlignment alignment, int tagRow, ushort group, ushort element, ImageTagFont tagFont = null)
        {
            TagHandler tag = new TagHandler
            {
                Alignment = alignment,
                Group = group,
                Element = element,
                TagRow = tagRow,
                TagType = TagType.TagValue,
                TagFont = tagFont
            };
            return tag;
        }


        /// <summary>
        /// 設置一個標籤
        /// </summary>
        /// <param name="alignment">標籤方位</param>
        /// <param name="tagRow">標籤所在行數(四個角1到10,上下左右只支持一行)</param>
        /// <param name="groupHexStr">標籤組(16進制字符串)</param>
        /// <param name="elementHexStr">標籤元素(16進制字符串)</param>
        /// <param name="tagFont">標籤樣式</param>
        public static TagHandler CreateTag(TagAlignment alignment, int tagRow, string groupHexStr, string elementHexStr, ImageTagFont tagFont = null)
        {
            TagHandler tag = new TagHandler
            {
                Alignment = alignment,
                GroupHexStr = groupHexStr,
                ElementHexStr = elementHexStr,
                TagRow = tagRow,
                TagType = TagType.TagValue,
                TagFont = tagFont
            };
            return tag;
        }


        /// <summary>
        /// 設置一個標籤
        /// </summary>
        /// <param name="alignment">標籤方位</param>
        /// <param name="tagRow">標籤所在行數(四個角1到10,上下左右只支持一行)</param>
        /// <param name="tagText">標籤內容</param>
        /// <param name="tagFont">標籤樣式</param>
        public static TagHandler CreateTag(TagAlignment alignment, int tagRow, string tagText, ImageTagFont tagFont = null)
        {
            TagHandler tag = new TagHandler
            {
                Alignment = alignment,
                TagText = tagText,
                TagRow = tagRow,
                TagType = TagType.UserData,
                TagFont = tagFont
            };
            return tag;
        }


        /// <summary>
        /// 設置一個標籤
        /// </summary>
        /// <param name="alignment">標籤方位</param>
        /// <param name="tagRow">標籤所在行數(四個角1到10,上下左右只支持一行)</param>
        /// <param name="tagType">標籤類型</param>
        /// <param name="tagFont">標籤樣式</param>
        public static TagHandler CreateTag(TagAlignment alignment, int tagRow, TagType tagType, ImageTagFont tagFont = null)
        {
            TagHandler tag = new TagHandler
            {
                Alignment = alignment,
                TagRow = tagRow,
                TagType = tagType,
                TagFont = tagFont
            };
            return tag;
        }
    }

 

一樣,咱們也能夠設置自定義樣式,例如顏色、字體、字號、透明度、自定義文本內容等等,佈局

對於不一樣的掛片類型,配合對應的掛片協議便可自動顯示醫院閱片或膠片打印所須要的Tag。字體

TagManager.CreateTag(TagAlignment.RightBottom, 1, "By ET-Dicom", new ImageTagFont { TagColor = Color.Blue, TagSize = 18 })

 

 

這樣單元格的邊角標記就完成了,在設計器中,Tag控件用Textblock就能夠了。

 

 

 

配合掛片協議後最終呈現效果:

 

C#開發PACS、RIS醫學影像處理系統

目錄整理:

(一)PACS客戶端:

C#開發PACS醫學影像處理系統(一):開發背景和功能預覽

C#開發PACS醫學影像處理系統(二):界面佈局之菜單欄

C#開發PACS醫學影像處理系統(三):界面佈局之工具欄

C#開發PACS醫學影像處理系統(四):界面佈局之狀態欄

C#開發PACS醫學影像處理系統(五):查詢病人信息列表

C#開發PACS醫學影像處理系統(六):加載Dicom影像

C#開發PACS醫學影像處理系統(七):讀取影像Dicom信息

C#開發PACS醫學影像處理系統(八):單元格變換

C#開發PACS醫學影像處理系統(九):序列控件與拖拽

C#開發PACS醫學影像處理系統(十):Dicom影像下載策略與算法

C#開發PACS醫學影像處理系統(十一):Dicom影像掛片協議

C#開發PACS醫學影像處理系統(十二):繪圖處理之圖形標記

C#開發PACS醫學影像處理系統(十三):繪圖處理之病竈測量

C#開發PACS醫學影像處理系統(十四):處理Dicom影像窗寬窗位

C#開發PACS醫學影像處理系統(十五):Dicom影像交叉定位線算法

C#開發PACS醫學影像處理系統(十六):2D處理之影像平移和縮放

C#開發PACS醫學影像處理系統(十七):2D處理之影像旋轉和翻轉

C#開發PACS醫學影像處理系統(十八):Dicom使用LUT色彩加強和反色

C#開發PACS醫學影像處理系統(十九):Dicom影像放大鏡

 

(二)PACS三維:MRP、MIP、VR

C#開發PACS醫學影像三維重建(一):使用VTK重建3D影像

 

(三)PACS網頁端:開發Web版本的PACS

C#開發Web端PACS(一):基於PACS客戶端思想重寫Web端

 

(四)PACS移動端:開發基於HTML5移動端版本的PACS

C#開發移動端PACS(一):使用HTML5和CSS3開發PACS手機端頁面

C#開發移動端PACS(二):使用 .Net MVC 開發手機端PACS服務端

 

(五)PACS服務端:

C#開發PACS醫學影像處理系統服務端(一):醫療設備的鏈接與收圖

C#開發PACS醫學影像處理系統服務端(二):高併發架構

 

(六)PACS與RIS系統的通訊與集成

在RIS系統中調起PACS並打開Dicom影像

 

(七)雲PACS與遠程會診

C#開發PACS醫學影像處理系統之雲PACS(區域PACS)(一):架構概述

C#開發PACS醫學影像處理系統之雲PACS(區域PACS)(二):遠程會診與雙向轉診

 

(八)科幻級視頻特效:使用Adobe After Effects 製做PACS影像處理系統宣傳視頻

 

 

QQ:1850969244

近10年開發經驗,主攻C#、ASP MVC,HTML5,

B/S C/S 皆可,目前研究醫療領域醫學影像相關技術,

任何技術問題歡迎加QQ交流。