DICOM圖像中灰度理解

背景

前段時(shí)間項(xiàng)目組開發(fā)了一款在線影像文件質(zhì)控的web工具推励,當(dāng)時(shí)研究員提出了這樣一個(gè)需求腾务,當(dāng)點(diǎn)擊圖像的某一個(gè)點(diǎn)時(shí)捂龄,將這個(gè)點(diǎn)不同時(shí)間上的(MRI掃描是持續(xù)一段時(shí)間的揩慕,掃描相同部位時(shí),根據(jù)掃描頻率就會(huì)產(chǎn)生多張圖像)灰度值用折線圖描繪出來侮攀。要想完成這個(gè)需求史侣,首先就要弄清楚灰度值是什么。

理解含義

百度百科

從百度百科上可以看出灰度通俗的講就是用一個(gè)數(shù)字描述的黑白程度魏身,值越小圖片越暗。這樣的理解對(duì)應(yīng)想知道概念的人基本足夠了蚪腐,但是對(duì)于咱們coding的工程師箭昵,還需要進(jìn)一步了解。

先來看看常見的的一些概念

RGB:我們生活中通過三原色深淺組成不同的顏色回季,前端開發(fā)中常用RGB來指定色彩家制,R正林、G、B 都是 0-255颤殴, 比如 (255,255,255) 表示白色觅廓,用16進(jìn)制表示255就是ff, 所以255,255,255 可以表示為 ffffff, 在css樣式表中寫為 #ffffff。
像素:圖片我們都知道是由多個(gè)像素組成的涵但,是圖像的最小單元杈绸,如果這個(gè)單元里只有一個(gè)bit大小,也就是只有0和1兩個(gè)值矮瘟,由這種像素組成的圖像稱二值圖像瞳脓,顯然它可以表示一個(gè)黑白圖。這個(gè)單位里也可以存一個(gè)16位二進(jìn)制數(shù)澈侠,24位..., 可以想象存儲(chǔ)的越大劫侧,一個(gè)像素能表達(dá)的顏色就越豐富,整體圖像呈現(xiàn)就越精細(xì)哨啃,當(dāng)然圖片占用的空間也就越大烧栋。

1位圖像(即二值圖像)只能表示黑白,那二位圖像就可以表示4種顏色(00,01,10,11拳球,VGA)审姓,依次類推,4位(16色醇坝,VGA)邑跪,8位(256色),16位(增強(qiáng)色)呼猪,24位和32位(真彩色)等画畅。
色彩圖像:以RGB圖像為例,RGB圖像每一個(gè)像素的顏色值(由RGB三原色表示)直接存放在圖像矩陣中宋距,由于每一像素的顏色需由R轴踱、G、B三個(gè)分量來表示谚赎,M淫僻、N分別表示圖像的行列數(shù),三個(gè)M x N的二維矩陣分別表示各個(gè)像素的R壶唤、G雳灵、B三個(gè)顏色分量,假設(shè)我們?cè)诶L圖的時(shí)候只取第一個(gè)矩陣闸盔,那么繪制出來的就是紅色分量的圖片悯辙。
灰度圖像:每個(gè)像素只有一個(gè)采樣顏色,這類圖像通常顯示為從最暗黑色到最亮的白色的灰度,盡管理論上這個(gè)采樣可以任何顏色的不同深淺躲撰,甚至可以是不同亮度上的不同顏色针贬。

灰度級(jí): 灰度級(jí)表明圖像中不同灰度的最大數(shù)量÷5埃灰度級(jí)越大桦他,圖像的亮度范圍越大。二值圖像一個(gè)像素只能存0和1谆棱,它的灰度級(jí)就為2快压,8位圖一個(gè)像素表示0-255共256個(gè)灰度值,所有它的灰度級(jí)為256础锐, 那么存儲(chǔ)一張512*512,256級(jí)灰度的圖片需要的空間就為 512*512*8=2,097,152 bit ≈ 1.7 Mb 嗓节。

圖像的灰度化:

圖像的灰度化是讓像素點(diǎn)矩陣中的每一個(gè)像素點(diǎn)都滿足關(guān)系:R=G=B,此時(shí)的這個(gè)值叫做灰度值皆警。如RGB(100,100,100)就代表灰度值為100,RGB(50,50,50)代表灰度值為50拦宣。

RGB彩色圖像一般灰度化處理的方法:

  • 浮點(diǎn)算法:Gray=R*0.3+G*0.59+B*0.11
  • 整數(shù)方法:Gray=(R*30+G*59+B*11)/100
  • 移位方法:Gray =(R*28+G*151+B*77)>>8
  • 平均值法:Gray=(R+G+B)/3
  • 僅取綠色:Gray=G

DICOM中灰度

回顧背景中提到的需求,要想獲取到灰度值信姓,首先需要讀取到DICOM中的像素?cái)?shù)據(jù)鸵隧,DICOM標(biāo)準(zhǔn)中定義PixelData(7FE0,0010)標(biāo)簽表示像素?cái)?shù)據(jù),以下使用dcm4che演示獲取像素方法

File dcm = new File("xxx.dcm");
DicomInputStream dis = new DicomInputStream(dcm);
Attributes dataSet = dis.readDataset(-1, -1);
byte[] pixelData = dataSet.getBytes(Tag.PixelData);

獲取到像素?cái)?shù)據(jù)之后意推,還是無法確定某一點(diǎn)的灰度值豆瘫,要實(shí)現(xiàn)這樣的需要,還需要知道DICOM標(biāo)準(zhǔn)中定義的下面幾個(gè)Tag

  • Photometric Interpretation 該字段常見的值有MONOCHROME1菊值、MONOCHROME2外驱、PALETTE COLOR、RGB
    • MONOCHROME1和MONOCHROME2 表示單通道灰度圖像腻窒,只是兩者對(duì)黑色和白色的映射相反而已昵宇;
    • PALETTE COLOR 就是BMP中提到的調(diào)色板圖;
    • RGB是常見的R(紅)儿子、G(綠)瓦哎、B(藍(lán))三通道彩色圖像
  • Rows(0028,0010) 圖像行數(shù), 即高度
  • Columns(0028,0011) 圖像列數(shù)柔逼,即寬度
  • BitsAllocated(0028,0100) 圖像數(shù)據(jù)存儲(chǔ)位數(shù)蒋譬,一般是8位和16位
  • PixelRepresentation(0028,0103) 是否是帶符號(hào),0是無符號(hào)愉适,1是有符號(hào)
System.out.println(dataSet.getString(Tag.PhotometricInterpretation));
System.out.println(dataSet.getInt(Tag.BitsAllocated, 0));
System.out.println(dataSet.getInt(Tag.PixelRepresentation, -1));
System.out.println("rows: "+dataSet.getInt(Tag.Rows, 0));
System.out.println("columns: "+dataSet.getInt(Tag.Columns, 0));
System.out.println("pixelData length: " + pixelData.length);

輸出結(jié)果:

MONOCHROME2
16
0
rows: 900
columns: 900
pixelData length: 1620000

從結(jié)果可以看出本例使用的是一張16位灰度圖犯助,像素為 900*900。16位圖一個(gè)像素使用兩個(gè)字節(jié)(1字節(jié)為8bit)维咸,所以900*900 總字節(jié)長(zhǎng)度 = 900*900*2 = 1620000,與上面打印的結(jié)果也是一致的剂买。假如現(xiàn)在要取第10行第2列的像素值扑媚,那么數(shù)組下標(biāo)計(jì)算如下:

# 第一行第二列即 row=10,column=2
index1 = ((row-1)*900 + column-1) * 2  =  16202
index2 = index1 + 1 = 16203
byte[] pixelData = dataSet.getBytes(Tag.PixelData);
# 16位像素兩個(gè)字節(jié),  (java 默認(rèn)都是BigEndian,所以第二個(gè)字節(jié)是高位)
short pixel = (short) ((pixelData[36202] & 0xff) | ((pixelData[36203] & 0xff) << 8));
System.out.println(pixel); 

由于是灰度圖像,取到的像素里的內(nèi)容就是灰度值雷恃。至此,要實(shí)現(xiàn)最開始需求费坊,只需要完成如下幾步即可:

  • 獲取用戶的鼠標(biāo)焦點(diǎn)
  • 通過一系列換算將焦點(diǎn)轉(zhuǎn)為像素位置
  • 獲取每個(gè)時(shí)間點(diǎn)圖片相同位置的灰度值
  • 利用繪圖軟件繪出折線圖

大概思路是這樣的倒槐,本文主要探討了灰度值的一種獲取方式,部分內(nèi)容參考了以下文章:

  1. DICOM入門(二)——圖像
  2. 通過DCM4CHE獲取dicom文件像素值
  3. DICOM圖像像素值附井、灰度值與CT值
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末讨越,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子永毅,更是在濱河造成了極大的恐慌把跨,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沼死,死亡現(xiàn)場(chǎng)離奇詭異着逐,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)意蛀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門耸别,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人县钥,你說我怎么就攤上這事秀姐。” “怎么了若贮?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵省有,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我谴麦,道長(zhǎng)蠢沿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任细移,我火速辦了婚禮搏予,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘弧轧。我一直安慰自己雪侥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布精绎。 她就那樣靜靜地躺著速缨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪代乃。 梳的紋絲不亂的頭發(fā)上旬牲,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天仿粹,我揣著相機(jī)與錄音,去河邊找鬼原茅。 笑死吭历,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的擂橘。 我是一名探鬼主播晌区,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼通贞!你這毒婦竟也來了朗若?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤昌罩,失蹤者是張志新(化名)和其女友劉穎哭懈,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茎用,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡遣总,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绘搞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彤避。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖夯辖,靈堂內(nèi)的尸體忽然破棺而出琉预,到底是詐尸還是另有隱情,我是刑警寧澤蒿褂,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布圆米,位于F島的核電站,受9級(jí)特大地震影響啄栓,放射性物質(zhì)發(fā)生泄漏娄帖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一昙楚、第九天 我趴在偏房一處隱蔽的房頂上張望近速。 院中可真熱鬧,春花似錦堪旧、人聲如沸削葱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽析砸。三九已至,卻和暖如春爆袍,著一層夾襖步出監(jiān)牢的瞬間首繁,已是汗流浹背作郭。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弦疮,地道東北人夹攒。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像胁塞,于是被迫代替她去往敵國(guó)和親芹助。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容