离线
|
首先了解一下心电图纸的构成,首先背景是由1mm*1mm的小方格填充的。然后每5个小方格组成 一个大方格,像下面图所示就是心电图的一部分展示效果。心电图在上面绘制的时候 ,横向代表时间(s),纵向代表电压(mv)。
如果心电图进纸速度是25mm/s(大多数设备是这样的,其他速度也无所谓,后面根据这个参数计算就行了)
那么重点来了,我们知道在心电图数据中有一个increment参数,这个是步进的意思,一般是0.001秒。那么每次步进的距离就是25mm*0.001=0.025mm,如果我们每个小方格是1mm(也就是大方格是5mm),我们在绘制曲线的时候 ,x 轴每次移动就是0.025mm。但我们在计算机中的单位是像素,因此需要将每次的步进换算成像素。这里分两种处理方法介绍:
方法一使用分辨率:假如我们使用72像素/英寸的分辨率(这也是网页中常用的,打印机用的300的)。那么72像素/英寸换算成毫米的话就是72/25.4=2.83464像素(px)/毫米(mm),接着上面的步进计算每次步进距离为:0.025mm*2.83464px/mm=0.07像素(px)。也就是说每次绘制的时候x轴移动距离为0.07像素。(这时的小方格宽度是1mm=2.83464像素)
方法二:相对尺寸,我们假如定义小方格就是12像素(用它代表1mm的长度),那么每次步进的距离就是:0.025mm*12=0.3像素。
两种方式区别在于小方格的尺寸,如果不考虑打印的话,用方法二展示图片感觉更简单。
说完了x轴,下面看看y轴。
上面了解到increment参数影响了x 轴的步进,其实y轴也有一个类似的参数。我们命名为mm_Per_mV。它的作用就是代表纵向距离中一mv(毫伏)的高度是多少毫米。
比如上面的心电图中箭头位置有个40mm/mv,这是代表着1mv纵向距离为40mm。好了,就是这个值是我们绘制曲线的核心点,下面看一下我们心电图数据的内容(截取部分):
<code code="MDC_ECG_LEAD_AVF" codeSystem="2.16.840.1.113883.6.24" codeSystemName="MDC" />
<value xsi:type="SLIST_PQ">
<origin value="0" unit="uV" />
<scale value="1" unit="uV" />
<digits>-19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -20 -21 -21 -21 -21 -22 -22 -22 -22 -22 -22 -22 -22 -22 -22 -22 -22 -21 -21 -20 -21 -20 -20 -20 -20 -20 -20 -20 -20 -21 -21 -22 -22 -23 -24 -24 -25 -25 -26 -26 -26 -26 -27 -27 -27 -27 -27 -27 -27 -27 -27 -27 -26 -26 -26 -26 -26 -26 -27 -27 -28 -28 -29 -30 -31 -31 -31 -31 -31 -30 -30 -28 -27 -25 -23 -21 -20 -18 -17 -16 -15 -15 -16 -17 -19 -21 -23 -26 -29 -31 -34 -36 -38 -40 -42 -43 -44 -45 -45 -45 -45 -46 -46 -46 -46 -47 -48 -49 -50 -51 -52 -53 -55 -56 -57 -58 -59 -60 -61 -62 -63 -63 -64 -64 -64 -64 -64 -64 -65 -65 -66 -67 -67 -69 -70 -71 -72 -73 -74 -75 -76 -76 -76 -75 -74 -72 -70 -68 -65 -61 -57 -53 -49 -45 -41 -36 -33 -29 -26 -22 -19 -17 -14 -13 -11 -9 -8 -7 -5 -4 -3 -1 0 136********3 27 3136******** 56 59 6163******** 6159******** 49 48 47 46 46 45 46 46 46 46 44 43 40 37 32 26 19 12 3 -5 -14 -23 -32 -40 -49 -56 -63 -68 -73 -77 -81 -83 -85 -86 -87 -88 -89 -90 -91 -91 -92 -94 -95 -96 -98 -99 -100 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -114 -114 -115 -116 -116 -116 -117 -117 -117 -117 -118 -118 -118 -118 -119 -119 -120 -120 -121 -121 -121 -121 -120 -118 -117 -116 -114 -114 -114 -114 -116 -119 -123 -129 -136 -143 -152 -161 -170 -179 -188 -197 -205 -213 -219 -225 -229 -232 -233 -233 -230 -225 -217 -205 -190 -171 -147 -118 -84 -44 152********5 303 372 443 5135******** 757 802 838 864 880 884 877 858 827 786 734 674 605 53145********07 128 55 -12 -72 -124 -168 -202 -227 -244 -253 -256 -252 -244 -233 -220 -205 -191 -177 -165 -154 -145 -137 -132 -127 -123 -121 -118 -115 -112 -109 -106 -103 -100 -96 -93 -91 -88 -86 -85 -83 -83 -83 -83 -83 -84 -84 -84 -84 -83 -82 -81 -79 -78 -76 -74 -72 -71 -69 -68 -66 -65 -64 -62 -61 -60 -58 -57 -57 -56 -56 -55 -55 -55 -55 -55 -55 -54 -54 -54 -54 -53 -53 -52 -52 -51 -50 -50 -50 -49 -49 -48 -48 -47 -47 -46 -46 -45 -44 -43 -42 -40 -39 -37 -36 -35 -33 -32 -31 -30 -29 -28 -27 -27 -26 -25 -24 -23 -22 -20 -19 -17 -15 -13 -11 -9 -7 -4 -2 0 134******** 172********134******** 49 53 56 59 62 66 69 73 78 82 86 9195********0 1151******** 133********6 151********4 168********2 187********0 204 208 212 2152******** 225 227 229 231 232 234 235 237 238 240 241 242 243 243 244 244 244 244 243 242 241 239 238 236 233 231 228 224 221 2172******** 199********2 176********6 150********0 123 1171********3 87 82 77 7167******** 42 37 33 28 24 19 15 11 7 3 0 -3 -6 -9 -12 -15 -18 -21 -23 -26 -28 -30 -31 -33 -35 -36 -38 -39 -41 -42 -42 -43 -44 -45 -46 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -55 -56 -57 -57 -57 -57 -57 -57 -57 -56 -56 -55 -55 -54 -54 -53 -53 -53 -53 -53 -53 -53 -53 -54 -54 -54 -54 -54 -54 -54 -55 -55 -55 -56 -56 -56 -57 -57 -57 -57 -57 -57 -56 -55 -54 -52 -50 -48 -45 -42 -40 -37 -34 -32 -29 -27 -26 -25 -24 -24 -24 -25 -25 -26 -27 -28 -30 -31 -32 -33 -34 -35 -35 -35 -36 -35 -35 -35 -35 -34 -34 -34 -33 -33 -33 -32 -32 -32 -31 -31 -31 -31 -31 -31 -30 -30 -29 -29 -29 -28 -28 -27 -27 -26 -26 -25 -25 -25 -25 -24 -25 -25 -25 -25 -25 -25 -25 -25 -25 -24 -24 -24 -23 -23 -23 -23 -23 -24 -25 -25 -27 -28 -29 -30 -31 -31 -32 -31 -31 -30 -29 -27 -25 -22 -20 -17 -15 -13 -11 -10 -9 -9 -9 -10 -12 -14 -17 -19 -22 -25 -27 -30 -32 -34 -37 -38 -40 -41 -43 -44 -46 -47 -48 -50 -52 -53 -55 -56 -57 -58 -59 -60 -60 -60 -60 -60 -60 -60 -60 -60 -60 -60 -60 -60 -61 -62 -62 -63 </digits>
</value>
上面代码中scale 元素的value是指定纵向比例,单位是uv(微伏)。digits元素中就是心电数据了。我们需要将它们在y轴上绘制出来。正面给一下计算方法:
我们以上面的40mm/mv为例:上面心电数据我们依次排列显示在图上,首先取一个数-19。
看下图,我们定义好中心线,向下的就是负数,向上的就是正数。大概显示效果就是下面的黑点所示。
但如果我们不处理数据就直接原封不动的显示在图上的话,会有些问题。可以看看上面的数据从个位数到几百不等。我们需要让数据显示更友好一些,比如固定在4个大方格的高度中。这里我们就把电压数据按照上面的40mm/mv来进行转换。具体公式如下:
float dfy=((float)d/1000f)*40;//d就是心电图的数据,如上面的-19,-30等。除以1000的原因是心电图数据中的单位是uv,而纵向的单位是mv。
int gridSize=12;//1mm所代表的像素值
int scale=1;//显示比例,假如为2的话,纵向显示的会更加陡峭一些。
dfy=dfy*gridSize* scale;//将上面心电数据换算成像素
这样就将心电中的电压数据换算成了像素,剩下工作就简单了,将x,y坐标的像素值在电脑中绘制即可了。
最后看一下程序运行的效果图:
来源:https://blog.csdn.net/cctcc/article/details/106301516
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|