之前给朋友吹下牛说自己可以处理大部分仪器的数据,这周收到一份数据,看了好几天文档,把每个英文句子翻译后仔细研究还是没看懂这段数据如何处理
朋友说这个一共 6 组数据,4 组 是常见的(中性 噬酸 淋巴 单核) 64 次嵌套 64 次两层 for 循环,但是他也没有完全画出图像!
我咨询了另外一个 pb 开发人员他把画出的图像发我,但是由于我使用的 python 他使用 pb,没有问清楚是怎么处理了,特发到论坛请教下大家(主要是想学习下):
下面是相关文件下载地址
https://bitsend.jp/filesgroup/a190c44286b0559a6f0465eed0e2e346.html
各个文件说明:
** DxH 500 Series.pdf 是仪器数据的接口说明文档,里面有图像如何处理的说明,没有看明白 **
200520.txt #仪器传输过来的原始数据
20200520_232!OV_5DIFF.jpg 和 20200520_236!OV_5DIFF.jpg 是朋友解码正确的两个散点图
200520.txt 文件样例如下(<STX><ETB>为传输控制符)
<STX>2M|3|!!!5DIFF|622A01010240004000000A5004040 省略图像数据 0000000<ETB>56
<STX>300000000 省略图像数据 0000000<ETB>38
<STX>400000000 省略图像数据 0000000<ETB>3E
我处理时候 将头部的“<STX>2M|3|!!!5DIFF|”、“<STX>3”、“<STX>4” 和尾部 “<ETB>3E”删除,然后取两位由 16 进制转为 10 进制数据 类似如下内容,引号里面的内容是我删除的
622A01010240004000000A5004040 ***** 0000000“<etb>56\n<STX>3”00000000 ******0000000“<ETB>38\n<STX>4”00000000 ****** 0000000“<ETB>3E”
转换后数据:
‘622A01’对应数据 [ 62>98,2A>42,01>1 ]
这个设备是一个用于研究血液的科研仪器
1
ku9527 2020-05-24 22:37:10 +08:00
你这个需要知道具体数据的意义才能画图吧,如第一个病人的数据 4.88*10e9/L,横坐标和纵坐标分别是啥?
|
2
qile1 OP @ku9527 DxH 500 Series.pdf 这个文件有具体说明,但是我一直没有理解里面说的是啥,结果和直方图我都可以处理,就是散点图我用 python 不知道如何画图,具体描点从哪里开始,什么颜色,看了那个文档还是不知道如何下手
|
3
ku9527 2020-05-24 23:23:30 +08:00
哪有啊,那只是通讯协议,4.88 这是个医学数据,你最后会拿到一堆这样的数据。要作图,你总得知道你图的横坐标代表甚,纵坐标代表甚吧
|
4
qile1 OP @ku9527 感谢回复,”DxH 500 Series.pdf“这个文件的 APPENDIX D Graphic Results and Dataplots 标签,也就是 D-1 页 开始说明画图方法,”Histograms“为直方图 ”Dataplots“为散点图的说明!
4.88*10e9/L 这个是 wbc 项目的结果和单位,就是白细胞的值是 4.88 单位 10e9/L |
5
ku9527 2020-05-25 12:45:24 +08:00
仔细看了,你的理解有误吧, ‘622A01’对应数据为三个字节 : 0x2a62 代表字节数,你不能把 62 转成 98,那不对,0x01 代表只支持一个数据块。这样后面你就能做图了吧
|
6
ku9527 2020-05-25 19:50:03 +08:00
而且你给出的图,最后颜色也不对呀,10 个调色板数据如下 :
1, red=0, green=0, blue=0 2, red=0, green=101, blue=255 3, red=115, green=166, blue=57 4, red=214, green=52, blue=214 5, red=255, green=125, blue=66 6, red=255, green=255, blue=255 7, red=140, green=138, blue=140 8, red=0, green=144, blue=144 9, red=206, green=206, blue=206 10, red=221, green=238, blue=221 我看你图上还有红色,哪个也对应不上红色啊 |
7
qile1 OP @ku9527 颜色不对也可能是他画的时候有问题,好像确实没有红色,明天我问问看仪器上面有没有红色
0x2a62 这个 0x2a 是哪里来的? “622A01”这个前面也没有数据,自己实在笨,你说从哪里看到调色板颜色的 |
8
ku9527 2020-05-25 22:46:39 +08:00
622A01,中间不就是 2A 来吗
|
9
ku9527 2020-05-25 22:48:37 +08:00
调色板在 D-3 那页,Table D.5 Rendering information block
|
10
qile1 OP https://bitsend.jp/download/80fa17e3969192a961f8f81c110222dd.html
这个是仪器图像的照片 @ku9527 “622A01” 我把 622A 转为十进制数就是图像数据长度,然后按两个字符作为十六进制转为 10 进制来处理数据,是不是还得分割成几个图像才可以? 再次感谢回复我的主题。 |
11
ku9527 2020-05-26 21:04:39 +08:00 1
@qile1 这个图像颜色对,是那个调色板的颜色。图像不是分隔的。那个图像的 64 次循环是因为宽和高都是 64,在这个仪器上是这样。你要是换个更大的仪器,仪器显示屏更大的话,这个值可能会改变。对于 64*64 中的其中一个点,它不是直接画一个点,存的是那个 txt 文件中返回的系统图像库的索引。你要在那个点的位置画一个系统图像。该图像库大小为 0x50=80 个。不是你文档中的 120, 然后每个系统图像大小为 4*4d 大小。最终你画出的图像大小为 256*256.
|
13
qile1 OP @ku9527 再请教下,我第一次尝试把数据 按 numpy.reshape(64,64) 分成 64*64,然后画到一个 64*64 表格里面,但是图像发布不是样例那样的类型,您说的图像索引是不是分成 64 行后取第一个作为颜色索引?
我又尝试从 最后一组颜色“221,238,221”后面开始截取数据:即原来数据是 4096 个 到 221 那个位置截取[44:]得到的是一个 4052 个的列表,我在一个 64*64 的画布上面 将每个数据转换为 plt.scatter(xv, yv, s=数据点 c=图像索引, marker='o') 画出来的图像是深紫色,而且也不是样例那样的散点图,请教您下,图像截取是否有误,获取图像索引的正确方法应该是啥,如有打扰,先说声抱歉。 |