摘 要:本文設(shè)計(jì)出MRI圖像上腦出血量的準(zhǔn)確計(jì)算應(yīng)用程序系統(tǒng).基本思想是:首先識(shí)別MRI影像上的出血區(qū)域,然后計(jì)算出血區(qū)域所包含的像素總量,最后換算成準(zhǔn)確的患者腦出血體積.該系統(tǒng)是由C++語言作為系統(tǒng)開發(fā)基本編程語言,以MFC、OpenCv4.0、Visual Studio 2017、Windows操作系統(tǒng)作為系統(tǒng)主要開發(fā)環(huán)境,用患者M(jìn)RI圖片作為系統(tǒng)處理對(duì)象來源所開發(fā)設(shè)計(jì)的應(yīng)用系統(tǒng),是一款運(yùn)行于PC端的免安裝的桌面應(yīng)用程序.
關(guān)鍵詞:MRI;MFC;OpenCv4.0;腦出血;像素;計(jì)算
中圖分類號(hào):R743.3? 文獻(xiàn)標(biāo)識(shí)碼:A? 文章編號(hào):1673-260X(2019)10-0078-04
1 系統(tǒng)分析
1.1 系統(tǒng)的功能需求分析
MRI影像上腦出血量的精準(zhǔn)計(jì)算軟件系統(tǒng)主要為醫(yī)院提供腦出血患者血腫體積的快速計(jì)算功能.主要功能有以下幾點(diǎn):
(1)單層出血面積計(jì)算,操作者選定處理圖層的圖片并圈取出血區(qū)域大概范圍,系統(tǒng)會(huì)自動(dòng)計(jì)算出當(dāng)前檢測圖層的出血面積大小;
(2)腦部出血的血腫的總體積計(jì)算,操作者在完成所有單個(gè)圖層出血面積的計(jì)算后,單擊軟件系統(tǒng)的按鍵可以直接輸出血腫的總體積;
(3)打印檢測結(jié)果,操作者完成患者的血腫體積計(jì)算后,打印檢查檢測結(jié)果并形成書面診斷結(jié)果報(bào)告.
1.2 系統(tǒng)關(guān)鍵技術(shù)
1.2.1 MPBM基本原理
應(yīng)用MRI影像測定患者腦出血體積的基本原理:患者進(jìn)行核磁共振成像檢查時(shí),成像結(jié)果是核磁共振儀器將患者頭顱按一定的軸線與角度分割成厚度相同的連續(xù)斷面,者該患者腦出血的體積就等于每一層的的面積乘以層厚的積分[1].而通過計(jì)算機(jī)軟件方法可以利用頭顱腦出血面圖像的像素?cái)?shù)(Pi)、單個(gè)像素的面積(S)及單個(gè)切層的層厚(Di)計(jì)算出被測血腫塊的體積(V).層厚越小,層數(shù)(i)越多,測量結(jié)果越接近血腫塊實(shí)際體積[2].理論上,精確的計(jì)算公式如下:
實(shí)際應(yīng)用中的計(jì)算公式為:
例如,豫北地區(qū)某醫(yī)院在MRI檢查中,常設(shè)每層厚度di=6mm,相鄰層間距為2mm,每幅圖像大小為512×512像素(5.89×5.89inch或14.95×14.95厘米),算得s=8.525×10-4cm2,故腦血腫體積計(jì)算公式為
1.2.2 MPBM操作
MRI圖像預(yù)處理包括以下步驟:
(1)打開圖像處理軟件(如Windows自帶的“畫圖”軟件),讀入一幅待處理的頭顱MRI圖像副本;
(2)識(shí)別出血區(qū)域;
(3)在工具欄中選擇“自由圖形選擇”工具,完整描繪出血區(qū)域的邊界,右鍵單擊選定區(qū)域,在下拉菜單中選定“反向選擇”功能,并“剪切”掉血腫區(qū)域之外的部分(非出血區(qū)域“變白”),保存該副圖像到磁盤上某一特定文件夾;
(4)如果一幅圖像上有兩個(gè)或多個(gè)出血區(qū)域,則對(duì)該幅圖像的每個(gè)出血區(qū)分別實(shí)施第3步,得到相應(yīng)兩個(gè)或多個(gè)預(yù)處理圖像,然后通過復(fù)制和粘貼,合并形成該層一副預(yù)處理圖像[3];
(5)類似地預(yù)處理該患者每一幅頭顱出血層的MRI圖像.
1.2.3 腦血腫體積的計(jì)算原理
設(shè)經(jīng)預(yù)處理共得到n幅出血層的血腫圖像,則腦血腫體積算法的NS流程圖如圖1所示.
2 系統(tǒng)設(shè)計(jì)
根據(jù)系統(tǒng)需求分析結(jié)果,對(duì)系統(tǒng)進(jìn)行規(guī)范的,可靠和科學(xué)的設(shè)計(jì)不僅需要滿足系統(tǒng)的需求分析內(nèi)容,同樣需要滿足以下四個(gè)方面:
(1)安全性.對(duì)患者診斷信息以及醫(yī)院診斷數(shù)據(jù)的保護(hù)十分重要,診斷結(jié)果不僅是患者的隱私,更是醫(yī)院相關(guān)研究的重要數(shù)據(jù)來源;
(2)兼容性.因?yàn)槊恳慌_(tái)的PC級(jí)Windows操作系統(tǒng)用戶的配置不同,因此開發(fā)過程中應(yīng)讓應(yīng)用程序在運(yùn)行的滿足兼容性要求;
(3)高效性.如何高效地利用計(jì)算機(jī)資源和程序高效的執(zhí)行計(jì)算與處理功能,這正是用戶的需求;
(4)先進(jìn)性.在符合用戶的要求的同時(shí),適當(dāng)使用目前流行技術(shù),并根據(jù)用戶的使用意見不斷對(duì)軟件進(jìn)行迭代更新.
2.1 系統(tǒng)功能模塊設(shè)計(jì)
MRI影像上腦出血量的精準(zhǔn)計(jì)算應(yīng)用程序軟件需要實(shí)現(xiàn)BMP格式圖片的讀取,單層出血面積計(jì)算,出血總體積的計(jì)算,檢測結(jié)果保存和打印的四個(gè)功能模塊實(shí)現(xiàn).該系統(tǒng)的功能模塊如圖2所示.
2.2 系統(tǒng)開發(fā)環(huán)境和目標(biāo)平臺(tái)
2.2.1 系統(tǒng)開發(fā)環(huán)境
(l)Microsoft Visual Studio編程軟件;
(2)微軟公司開的C++基礎(chǔ)類庫—MFC;
(3)基于BSD許可(開源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺庫OpenCv4.0.
2.2.2 系統(tǒng)目標(biāo)平臺(tái)
該應(yīng)用程序系統(tǒng)所用的平臺(tái)是Windows7、Windows8、Windows10或者更高的版本.
3 編碼與實(shí)現(xiàn)
3.1 基于MFC的對(duì)話框程序創(chuàng)建
由于本軟件是基于MFC對(duì)話框進(jìn)行開發(fā),且本應(yīng)用程序在使用過程中不需要數(shù)據(jù)庫軟件和網(wǎng)絡(luò)資源,對(duì)于檢測結(jié)果是保存于本地磁盤的指定文件夾的目錄下.因此在開發(fā)前先進(jìn)行MFC的對(duì)話框創(chuàng)建,創(chuàng)建步驟如下:打開Microsoft Visual Studio 2017開發(fā)軟件→新建→項(xiàng)目→Visual C++→MFC/ATL→MFC應(yīng)用程序,修改項(xiàng)目名稱為MRI Accurate calculation cerebral hemorrhage,更改項(xiàng)目創(chuàng)建地址為D:\Microsoft Visual Studio\C++\,然后點(diǎn)擊確定.
3.2 BMP圖片讀取
本PC端桌面應(yīng)用程序處理的圖片格式主要是24位的BMP格式圖片,而核磁共振成像圖片是本軟件的處理的圖片唯一來源.當(dāng)操作選擇本地磁盤的指定圖片到系統(tǒng)后,系統(tǒng)需要對(duì)圖片的相關(guān)信息判斷,如是判斷圖片是否正確讀入、圖片是否是BMP格式、圖片是否是24位的、BMP圖片的文件頭是否正確讀入等相關(guān)信息的判斷[4].
3.3 BMP圖片處理
本PC端應(yīng)用程序在系統(tǒng)讀入圖片后,由操作人員圈取出血的大致區(qū)域,系統(tǒng)會(huì)根據(jù)圈選的曲線對(duì)圖片進(jìn)行相關(guān)處理(以操作者圈取出血區(qū)域的曲線為分割線,在圈選區(qū)域內(nèi)的像素點(diǎn)保持其像素原值不變以待系統(tǒng)下一步處理,在圈選區(qū)域之外的像素點(diǎn)進(jìn)行像素值變換處理,使其像素值為255,其原因是255像素值不屬于出血區(qū)域的像素值),排除在系統(tǒng)通過像素識(shí)別出血區(qū)域的時(shí)候不必要的其他因素影響,防止其誤導(dǎo)系統(tǒng)在計(jì)算合格的像素點(diǎn)數(shù)時(shí)候存在誤差,導(dǎo)致單個(gè)圖層的出血面積計(jì)算不準(zhǔn)確進(jìn)而影響到出血體積的計(jì)算.
3.4 單個(gè)檢測層的出血面積計(jì)算
MRI影像上腦出血量的精準(zhǔn)計(jì)算PC端應(yīng)用程序在對(duì)出血面積經(jīng)行計(jì)算的時(shí)候,先對(duì)系統(tǒng)處理過的圖片像素進(jìn)行遍歷,逐個(gè)判斷單個(gè)像素點(diǎn)的像素值是否在符合腦出血的像素值范圍.當(dāng)單個(gè)像素值在屬于腦出血的像素值范圍的時(shí)候,對(duì)屬于出血的像素點(diǎn)進(jìn)行+1的操作,反之系統(tǒng)自動(dòng)進(jìn)入下一個(gè)像素點(diǎn)的像素值判斷,直到遍歷完被處理圖片的所有像素[5].獲取到被處理圖片符合出血范圍的像素總個(gè)數(shù)后,用總個(gè)數(shù)乘以單個(gè)像素的面積(單個(gè)像素面積:0.0008525944cm2)計(jì)算出被處理的該張圖片上的出血面積.主要的核心代碼如下:
if (!pBmpData10)
{
AfxMessageBox(_T("存儲(chǔ)器錯(cuò)誤!"));
delete pBmpData10;
return;
}
if (bmpFile.Read(pBmpData10, dataBytes) != dataBytes)
{
AfxMessageBox(_T("讀取BMP數(shù)據(jù)失??!"));
delete pBmpInfo10;
delete pBmpData10;
return;
}
bmpFile.Close();
CWnd *pWnd = GetDlgItem(PICTURE10);
CRect rect;
pWnd->GetClientRect(&rect);
CDC *pDC = pWnd->GetDC();
pDC->SetStretchBltMode(COLORONCOLOR);
StretchDIBits(pDC->GetSafeHdc(), 0, 0, rect.Width(), rect.Height(), 0, 0, bmpInfo.biWidth, bmpInfo.biHeight, pBmpData10, pBmpInfo10, DIB_RGB_COLORS, SRCCOPY);
bmpWidth10 = bmpInfo.biWidth;
bmpHeight10 = bmpInfo.biHeight;
biBitCount10 = bmpInfo.biBitCount;
dst10.release();
bmpFile.Remove(StrFileName);
int lineByte = (bmpWidth10 * biBitCount10 / 8 + 3) / 4 * 4;
CString str;
int z = 0, m = 0, n = 0;
double k = 0;
if (biBitCount10 == 24)
{
for (int i = 0; i < bmpHeight10; i++)
{
for (int j = 0; j < bmpWidth10; j++)
{
for (int k = 0; k < 3; k++)
{
m = *(pBmpData10 + i * lineByte + j * 3 + k);
}
if (m < 35) {
z++;
}
n++;
}
}
k = z * 0.0008525944;
str.Format("%f", k);
SetDlgItemText(AREA10, str);
}
}
3.5 出血體積的計(jì)算
MRI影像上腦出血量的精準(zhǔn)計(jì)算PC端應(yīng)用程序會(huì)在計(jì)算完所有的單個(gè)圖的出血面積后,根據(jù)當(dāng)前系統(tǒng)中已處理的單個(gè)圖層面積計(jì)算出出血的體積.
3.6 系統(tǒng)運(yùn)行效果
通過雙擊打開MRI Accurate calculation cerebral hemorrhage.exe啟動(dòng)應(yīng)用程序軟件,可以看到窗口有10個(gè)選擇圖片按鈕、生成檢測結(jié)果和打印結(jié)果等信息.
當(dāng)進(jìn)行多個(gè)圖片依次讀入應(yīng)用程序處理后,單擊生成檢測結(jié)果按鈕,系統(tǒng)自動(dòng)在顯示出血體積位置打印出患者腦出血體積.程序運(yùn)行情況如圖3所示.
4 系統(tǒng)測試與運(yùn)行
4.1 系統(tǒng)測試的目的
進(jìn)行軟件測試主要目的在于三點(diǎn),其一確定軟件以正確的方式去做開發(fā)者期待軟件做的事情;其二,通過測試為開發(fā)人員提供軟件風(fēng)險(xiǎn)評(píng)估所需要的相關(guān)信息;其三,通過測試發(fā)現(xiàn)軟件開發(fā)過程存在的編程問題,并保證軟件的高質(zhì)量開發(fā)過程.對(duì)于本PC端應(yīng)用程序系統(tǒng)我們主要是在運(yùn)行于Windows系統(tǒng)上,針對(duì)使用對(duì)象是醫(yī)院的腦出血體積檢測的相關(guān)醫(yī)生,因此考慮醫(yī)院真實(shí)環(huán)境和需求進(jìn)行測試.
4.2 系統(tǒng)測試范圍
MRI影像上腦出血量的精準(zhǔn)計(jì)算應(yīng)許程序軟件是運(yùn)行于PC端Windows操作系統(tǒng)上.所以測試包括兼容性測試、讀取圖片測試、單個(gè)出血面積計(jì)算測試、體積計(jì)算測試、檢測結(jié)果保存測試與打印功能測試.
4.3 測試結(jié)果
4.3.1 容錯(cuò)性和易用性測試
在對(duì)軟件進(jìn)行功能測試的時(shí)候進(jìn)行容錯(cuò)性的測試十分重要,主要對(duì)檢測系統(tǒng)對(duì)合法輸入和非合法輸入處理和判斷的能力(合法輸入的時(shí)候檢查系統(tǒng)功能是否可以正常實(shí)現(xiàn),非法輸入的情況下檢測系統(tǒng)是否可以及時(shí)判斷出錯(cuò)誤并進(jìn)行相應(yīng)的處理)[6].易用性測試主要測試軟件在使用過程中操作容易,使用過程簡潔并且不存在不必要的操作,并且測試內(nèi)容包含系統(tǒng)操作是否滿足用戶操作習(xí)慣.
4.3.2 測試用例設(shè)計(jì)
本軟件在測試過程中從軟件啟動(dòng)、使用和計(jì)算結(jié)果等多個(gè)方面經(jīng)進(jìn)行相關(guān)的測試,對(duì)MRI影像上腦出血量的精準(zhǔn)計(jì)算經(jīng)行測試設(shè)計(jì),具體如表l所示.
4.3.3 測試結(jié)果
按照5.3.2中測試用例對(duì)軟件進(jìn)行測試,其結(jié)果和測試用例預(yù)期結(jié)果一致,如表5.2所示.該軟件經(jīng)過測試,達(dá)到設(shè)計(jì)之初要求,可以滿足對(duì)腦出血體積的精確計(jì)算,并控制結(jié)果在允許的誤差范圍內(nèi).具體如表2所示.
5 結(jié)論
MRI影像上腦出血量的精準(zhǔn)計(jì)算應(yīng)用程序(MRI Accurate calculation cerebral hemorrhage)的開發(fā)是為了更加精確快捷的計(jì)算出腦出血而研發(fā)設(shè)計(jì)的一個(gè)基于Windows操作系統(tǒng)應(yīng)用程序軟件.此PC端應(yīng)用程序軟件可實(shí)現(xiàn)對(duì)BMP格式的圖片讀取,并根據(jù)操作者圈取的大致出血區(qū)域進(jìn)行計(jì)算核磁共振成像的單個(gè)圖像的出血面積和患者腦出血體積.它改變?cè)瓉鞰RI不報(bào)告腦出血量、腦出血計(jì)算過程復(fù)雜、耗時(shí)漫長和結(jié)果不精確等現(xiàn)狀,為患者提供可靠治療依據(jù)并爭取到寶貴治療時(shí)間.同時(shí)該系統(tǒng)操作簡單快捷,使用者可以輕松上手,具有較高的實(shí)效性,還可以根據(jù)操作者需求保存并打印每次檢測結(jié)果,不僅使檢測結(jié)果清晰的呈現(xiàn)于患者面前,而且后期對(duì)每次的檢測結(jié)果有跡可循,實(shí)現(xiàn)電子化自動(dòng)存檔.MRI影像直接報(bào)告腦出血量,從而減少診斷時(shí)間、節(jié)約治療成本、緩解CT資源緊張局面.
參考文獻(xiàn):
〔1〕盛波,陳松,呂發(fā)金,肖智博,呂富榮.體視學(xué)法在顱內(nèi)血腫體積測量的應(yīng)用[J].中國CT和MRI雜志,2016(01):5-7.
〔2〕劉滌,杜芳,程海泉.基于MRI圖像紋理分析的應(yīng)用及研究進(jìn)展[J].中國醫(yī)學(xué)計(jì)算機(jī)成像雜志,2018(05):426-429.
〔3〕謝勇.基于FCM聚類算法人腦MRI圖像分割[J].大理大學(xué)學(xué)報(bào),2017(12):49-52.
〔4〕侯東奧.MRI腦部腫瘤分割及其三維重建[D].南昌航空大學(xué),2018.
〔5〕路玲玲.基于Converse 3D的房屋管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].河南農(nóng)業(yè)大學(xué),2017.
〔6〕岳書丹.修建性詳細(xì)規(guī)劃電子報(bào)批系統(tǒng)規(guī)整端的設(shè)計(jì)與實(shí)現(xiàn)[J].洛陽師范學(xué)院學(xué)報(bào),2019(05):32-36.