【问题标题】:Reading voxel values from binary file into matlab将二进制文件中的体素值读入matlab
【发布时间】:2016-02-18 09:17:17
【问题描述】:

我有一个 16 位体素数据集,我需要从中提取每个体素的整数值。数据集可以从here下载,它是'Head Aneuyrism 16Bits'数据集(需要点击血管图片下载16bit版本)。它的尺寸是512x512x512,但我不知道它是灰度还是彩色,也不知道这是否重要。看网站上的图片,我猜它是彩色的,但我不确定图片是否应该按字面意思拍摄。

关于 SO 的相关问题如下:How can I read in a RAW image in MATLAB?

以及关于 mathworks 的以下内容:http://www.mathworks.com/matlabcentral/answers/63311-how-to-read-an-n-dimensioned-matrix-from-a-binary-file

感谢这些问题的答案中的信息,我设法使用 matlab 从文件中提取了一些信息,如下所示:

fileID=fopen('vertebra16.raw','r');

A=fread(fileID,512*512*512,'int16');

B=reshape(A,[512 512 512]);

我不需要可视化图像,我只需要每个体素的整数值,但我不确定我是否使用我的脚本以正确的方式读取信息。 我发现尝试检查是否具有正确的体素值的唯一方法是使用以下方法可视化 B:

implay(B)

现在,使用上面的代码,然后使用 implay(B) 我得到一个黑白电影,中间有一个白色光盘,黑色背景和一些黑色像素在光盘中移动(我试图上传一帧电影,但它没有工作)。查看我下载文件的网站上的图像,我得到的电影帧似乎与该图像完全不同,所以我会得出结论,我没有正确的体素值。

以下是与我的问题相关的一些问题:

  • 我是否需要知道图像是灰度还是彩色才能正确读取体素值?
  • 数据集网站上只写了数据集是16位格式的,那么我怎么知道我是在处理有符号整数还是无符号整数?
  • 在上面链接的 SO 问题中,他们使用“uint8=>uint8”。我在 matlab 手册中找不到这个,所以我想知道 'uint8=>uint8' 是否是 'uint8' 的过时 matlab 表示法,或者它是否有不同的功能。我怀疑它会做一些不同的事情,因为如果我在上面的代码中使用 'int16=>int16' 而不是 'int16' 我会得到一部带有 implay 的全黑电影。

【问题讨论】:

    标签: image matlab voxel


    【解决方案1】:

    看起来您正确读取了数据。

    显示时的问题是值的比例。 implay 似乎假定值在 [0,1] 中,因此将所有值限制在该范围内,您的数据范围在哪里是 [0,3000]

    只是做

    B = B / max(B(:))
    

    会将您的数据重新调整为 [0,1] 并再次查看数据

    implay(B)
    

    向你展示了一些更明智的东西。

    【讨论】:

      猜你喜欢
      • 2013-06-22
      • 2017-12-01
      • 2011-12-24
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 2010-09-17
      • 1970-01-01
      • 2014-08-13
      相关资源
      最近更新 更多