摘 要:本文分析探討SVG顯示動態(tài)心電圖的方法,通過一個轉(zhuǎn)化工具實現(xiàn)SVG包裹動態(tài)心電圖數(shù)據(jù),并通過公用的瀏覽器軟件顯示心電圖,以期解決動態(tài)心電圖的網(wǎng)絡(luò)共享問題。
關(guān)鍵詞:SVG;動態(tài)心電圖
中圖分類號:TP399
動態(tài)心電圖(Ambulatory Electrocardiogram,AECG)是美國物理學(xué)博士,實驗物理學(xué)家Norman J·Holter于1957年發(fā)明的,故簡稱Holter。由于Holter記錄儀可以隨身佩帶,不受體位變化及活動的限制,長時間(一般不小于24小時)記錄人體生活狀態(tài)下的心電信號,相較常規(guī)的心電圖機、監(jiān)護心電圖等心電檢查方法,具有巨大的優(yōu)勢,所以動態(tài)心電圖在心血管臨床檢測和診斷方面的應(yīng)用越來越普及。但隨著動態(tài)心電圖的發(fā)展,動態(tài)心電圖數(shù)據(jù)共享問題出現(xiàn)了,尤其是因特網(wǎng)的應(yīng)用越來越普及,該問題越發(fā)突出。因為Holter生產(chǎn)商一般使用自己專有的數(shù)據(jù)格式來存儲動態(tài)心電圖數(shù)據(jù),并使用專有的軟件來分析處理這些數(shù)據(jù)。這就為不同廠商間不同機型進行數(shù)據(jù)交換設(shè)置了屏障,也限制了醫(yī)生使用這些數(shù)據(jù)進行交流溝通,大量的動態(tài)心電圖數(shù)據(jù)成為一個個信息孤島。
1 使用SVG顯示動態(tài)心電圖
要使用SVG顯示動態(tài)心電圖需要經(jīng)過下述三個處理過程:讀取解析專有格式的動態(tài)心電圖數(shù)據(jù)、將解析過的動態(tài)心電圖數(shù)據(jù)按SVG文件格式存儲、使用通用閱讀器讀取顯示SVG文件。下面以一個簡單的例子說明如何將專有數(shù)據(jù)格式的動態(tài)心電圖數(shù)據(jù)轉(zhuǎn)化為SVG文件的。
1.1 專有格式的動態(tài)心電圖數(shù)據(jù)
一般動態(tài)心電圖數(shù)據(jù)文件是按時間序列存儲的各個采樣時刻的不同通道的采樣值。如三通道8位AD的動態(tài)心電圖數(shù)據(jù)的格式如下所示:
CH1 CH2 CH3 第1行
CH1 CH2 CH3 第2行
…
CH1 CH2 CH3 第n行
CH1 CH2 CH3 第n+1行
…
CH1 CH2 CH3 文件結(jié)尾
其中CH1,CH2,CH3為通道編號名稱,代表所在位置通道的數(shù)據(jù);一行表示同一時刻的各個通道的數(shù)據(jù),如第n行表示時刻n各個通道的數(shù)據(jù);每個符號所代表的數(shù)據(jù)占一個字節(jié),一行共3個字節(jié),對應(yīng)三通道動態(tài)心電圖的三個數(shù)據(jù)通道;“行”是為了描述方便而引入的術(shù)語,實際文件為二進制文件,其存儲順序為CH1CH2CH3CH1CH2CH3……,一直到文件尾。讀取上述專有數(shù)據(jù),并按通道解析,形成單通道數(shù)據(jù)序列,即上表中的“列”所構(gòu)成的數(shù)據(jù)序列,如第一通道,就是CH1所在的“列”構(gòu)成的數(shù)據(jù)序列,解析后的數(shù)據(jù)序列為CH1CH1CH1……。專有軟件繪制心電圖的時候,就是以時間軸為橫軸,按一定的比例尺等距離的在時間軸上繪制心電圖采樣點,即上述數(shù)據(jù)序列,點與點之間用線段連接,就形成了我們常見的心電圖。
1.2 使用SVG文件包裹動態(tài)心電圖數(shù)據(jù)
SVG 是Scalable Vector Graphics的縮寫,是基于可擴展標(biāo)記語言XML的,用于描述可縮放二維矢量圖形的一種圖形格式和網(wǎng)絡(luò)標(biāo)準(zhǔn)。關(guān)于SVG,有專門的著作或網(wǎng)站[2]進行講述,這里不再贅述。SVG有多種基本形狀:矩形、圓形、橢圓、線段、折線、多邊形等,而這些元素與路徑元素
<?xml version=”1.0” encoding=”gb18030”?>
上面程序?qū)嶋H上是一個完整的SVG文件,其中path元素占據(jù)了大部分篇幅,是該文件的主要內(nèi)容。Path data中的字母是說明繪圖方式的指令,如M表示移動到其后的坐標(biāo)對位置;每個坐標(biāo)對由一對數(shù)值表示,分別表示X軸和Y軸坐標(biāo)大小,數(shù)值間用空格隔開。實際上我們在第二個坐標(biāo)對及以后的所有坐標(biāo)對前省略了字母L(畫線到其后的坐標(biāo)對指令),這是SVG語法所允許的。
路徑元素繪制輪廓線時需要的是縱橫坐標(biāo)對,在解析專有動態(tài)心電圖數(shù)據(jù)時得到的僅有特定通道的數(shù)據(jù)序列。實際上上述數(shù)據(jù)序列是動態(tài)心電圖幅度序列,是按固定的時間間隔對心電信號采樣得到的結(jié)果。繪圖時需要將時間因素考慮進來,形成橫坐標(biāo);觀察上面數(shù)據(jù)對中的第一個值,它們是等距離的,這正符合心電圖是按固定時間間隔進行采樣的。時間橫坐標(biāo)和心電圖幅度數(shù)據(jù)形成的縱坐標(biāo)一起構(gòu)成坐標(biāo)對,作為路徑元素的坐標(biāo)對集合成員。這樣一段心電圖就通過路徑元素描繪出來了。注意這里并非說的繪制,它只是通過一段可讀的文本描述了一段心電圖,這段文本需要瀏覽器解析并在顯示器設(shè)備上將所描述的心電圖顯示出來。需要注意的是路徑元素
1.3 生成SVG文件的實例
下述代碼主要實現(xiàn)將專有動態(tài)心電圖數(shù)據(jù)解析并轉(zhuǎn)化到SVG文件中。
void ConvertToSVG()
{
unsigned char buf[3*1000];
CString zSource,zTarget;
CString strSource=\"h:\\patientdata\\2002040500.dat\";
CString strTarget=\"d:\\test.svg\";
FILE *hFile=fopen(strSource,\"rb\");
fread(buf,1,3*1000,hFile);
fclose(hFile);
FILE *hTarget=fopen(strTarget,\"w\");
fprintf(hTarget,\"<?xml version=\\"1.0\\" encoding=\\"gb18030\\"?>\n\");
fprintf(hTarget,\"
fprintf(hTarget,\"
for(int i=600;i<1000;i+=2)
{
fprintf(hTarget,\"%ld %ld \",i-500,128+400-buf[i*3]);
}
fprintf(hTarget,\"\\"/>\n\");
fprintf(hTarget,\"
fprintf(hTarget,\"\n\");
fprintf(hTarget,\"\");
fclose(hTarget);
}
編譯并運行這段VC代碼,其執(zhí)行結(jié)果就是生成一個名為“Test.SVG”的文件,用Firefox瀏覽器打開該文件,其顯示結(jié)果如圖所示。
2 使用SVG實現(xiàn)動態(tài)心電圖的優(yōu)勢
首先通過下面的表格對照說明上述一段動態(tài)心電圖,不同類型的數(shù)據(jù)文件所需要的數(shù)據(jù)量及其限制。
文件類型數(shù)據(jù)量(字節(jié))說明
專有數(shù)據(jù)文件約200不是可見的圖形,不可用于網(wǎng)絡(luò)
BMP文件大于300K 24位圖形,清晰,可用于網(wǎng)絡(luò)
JPG文件大于10K圖形,不清晰,網(wǎng)絡(luò)常見
SVG文件小于2K圖形,清晰,最適用于網(wǎng)絡(luò)
前述的SVG文件的大小只有2K字節(jié)不到,如果將在瀏覽器里顯示的對應(yīng)圖形拷屏保存成24位位圖文件,其大小為300K以上,它基本可以保持上圖一樣的顯示效果;而將上圖保存為有損壓縮的JPG文件,其大小在10K以上,但顯示清晰度已不能保證;而無疑專有數(shù)據(jù)文件的數(shù)據(jù)量最小,但其并不適用于網(wǎng)絡(luò)環(huán)境;所以SVG最適合于網(wǎng)絡(luò)傳輸。
其次,SVG通過文本格式的描述性語言來描述圖像內(nèi)容,因此SVG是一種和圖像分辨率無關(guān)的矢量圖形格式。這也意味著由SVG所生成的動態(tài)心電圖可以無限放大而不失真,便于使用者觀察心電圖細(xì)節(jié),為診斷提供清晰的依據(jù)。其文本描述的特性,還可以在同一個文件中包含動態(tài)心電圖圖形和標(biāo)注文字等,這為通過標(biāo)注文字進行動態(tài)心電圖搜索等奠定了基礎(chǔ)。
最后,SVG是W3C(World Wide Web Consortium國際互聯(lián)網(wǎng)標(biāo)準(zhǔn)組織)制定的開放標(biāo)準(zhǔn)。也就是說,它并不是屬于任何個體的專利,而是一個通過協(xié)作、共同開發(fā)的工業(yè)標(biāo)準(zhǔn)。正是因為這點,才使得SVG能夠得到更迅速的開發(fā)和應(yīng)用。而動態(tài)心電圖方面至今沒有一個統(tǒng)一的國際標(biāo)準(zhǔn)加以規(guī)范。如果能夠利用此標(biāo)準(zhǔn),甚至在此標(biāo)準(zhǔn)基礎(chǔ)上開發(fā)出規(guī)范動態(tài)心電圖的標(biāo)準(zhǔn),無疑是一個開創(chuàng)性的工作。
2 結(jié)束語
本文通過一個簡單的轉(zhuǎn)化工具實現(xiàn)SVG包裹動態(tài)心電圖數(shù)據(jù),并通過公用的瀏覽器軟件顯示心電圖。上述代碼所實現(xiàn)的轉(zhuǎn)化工作還比較簡陋,如果真正形成一個完善的轉(zhuǎn)化工具,還需要考慮很多實際問題,比如時間和幅度的標(biāo)準(zhǔn)化,如何實現(xiàn)用戶通過網(wǎng)頁進行交互訪問長時間的動態(tài)心電圖,心電圖的標(biāo)注及如何合理利用這些獨立的標(biāo)注文本等。
參考文獻:
[1]曾文慶,蔣家正.以XML為基礎(chǔ)的心電圖管理系統(tǒng)[J].Journal of Information Technology and Applications,2006(02).
[2]SVG教程.http://www.w3school.com.cn/svg/
作者簡介:李新春(1972-),男,回族,教師,本科,研究方向:軟件開發(fā)。