我有一个16位体素数据集,我需要从中提取每个体素的整数值。数据集可以从here下载,它是头部Aneuyrism 16Bits'数据集(您需要点击血管图像下载16位版本)。它的大小是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)我得到一张黑白电影,中间有一个白色光盘,黑色背景和一些黑色像素在光盘中移动(我试图上传一帧电影,但它没有工作)。看看我下载文件的网站上的图片,我得到的电影画面看起来与那张图片截然不同,所以我得出的结论是我没有正确的体素值。
以下是与我的问题相关的一些问题:
答案 0 :(得分:1)
看起来你正确地读了数据。
显示时的问题是值的比例。 implay
似乎假设值位于[0,1]
,因此会将所有值限制在该范围内,您的数据范围为[0,3000]
。
简单地做
B = B / max(B(:))
会将您的数据重新调整为[0,1]
并再次使用
implay(B)
向您展示更明智的事情。