数据获取
XMLHttpRequest() 通过XMLHttpRequest()获取nifti文件中的数据,获得到一个ArrayBuffer数组
数据获取
nifti有头部和数据部分
- 头部解析 头部一般为348字节,根据头部格式进行解析
- 数据部分: 根据头部的128字节处获得偏移值,一般偏移值为352字节;
标注
进行标注要对数据部分进行改写,而头部不需要动,若需要标签,要的到value的最小值和最大值,先将数据部分全部设为最小值,然后根据标注需要将特定部分的value值改为自己需要的值
ArrayBuffer简介
ArrayBuffer 对象用来表示通用的、固定长度的原始二进制数据缓冲区
高深点说,arrbuffer可以理解为一段内存;通俗点的话就是arrbuffer是一个数组,只不过这个数组有点特殊,你只能看不能改。
虽然将数据从原始数据摘出来,但是将其进行BUFFER转换过后转换后的buffer数组与原数组长度相同
比如:
获得的nifti原数据
获得的头部数据
虽然为unit8array长度只有352,但ArrayBuffer长度与原数据长度相同
头部转化为Buffer
头部转化为Buffer,长度变为原数据相同,虽然只有前352(头部实际长度)位有数据,其余全为0
ArrarBuffer 的使用
由于在web上进行标注,所以需要先将data部分转换成Float32格式,可以在canvas上绘制。
由于对头部进行解析,将头部化为unit8形式
数据部分为float32格式,最终获得标注nifti文件过的文件需要 将unit8格式与float32格式进行连接
`先将头部unit8格式转换为buffer格式,在将其转换成float32格式,与数据部分相同,这样可以进行float32同格式的链接,需要注意不能将头部和数据部分都换成buffer,因为buffer数组不可改,不能进行链接
并且头部转换为buffer之后,其长度与原数据(头部与数据部分之和)长度相同,转化为float32格式也为总长度,因此连接时应从数据部分的偏移量开始!
var arr4=arr1.buffer;//arr1 unit8
var arr3= new Float32Array(arr4);
var o=88;//偏移值为352,化作float32为88,不准确,应根据头部数据设置
for(var d=0;d<arr2.length;d++)//arr2已经标注且进行修改,将头部与进行修改过的数据部分进行连接
{
arr3[o]=arr2[d];
if(d===5789784)
{
console.log("验证");
console.log(arr3[o]);
console.log(arr2[d]);
console.log(o);
}
o++;
}
var arr0=arr3.buffer;//由于通过xhtmlrequest获得的nifti数据为ArrayBuffer形式,在这里进行转换为ArrayBuffer形式,最终可以保存成nifti文件的数组
、