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