我在Matlab中使用Otsu方法创建了二值化图像,并使用函数剪切出部分图像。现在我想用VolumeViewer命令看看这些图像。我知道得到的imgage的x,y和z维度。我目前正在运行这段代码(不包括循环后发生的volumeViewer(:
files= {'C3C3_000mal_550_539_527.raw';...
};
for i=1:numel(files)
Image = fopen(files{i},'r');
ImageData{i} = fread(Image,Inf,'uint16=>uint16');
ImageData{i} = reshape(ImageData{i},550,539,[]);
fclose(openedCrystalImage);
end
使用此代码在使用整形时会遇到以下错误:
使用整形时出错已知尺寸的乘积,296450,不可分为元素总数,78114575。
我计算了550*539=296450和296450*527=156229150:如果我们把最后一个数字除以元素的数量,它等于2,因此可以被元素的总数整除。在我看来,整形函数无法找到最后一个维度的大小或将其定义为1。定义z的大小也会导致建议使用括号[]的错误,因此函数可以找到它。
使用整形时出错元素数量不得更改。使用[]作为大小输入之一,自动计算适当的大小对于该尺寸。
现在转到奇怪的部分。此代码适用于另一组图像,具有不同大小的x、y和z范围。所以坦率地说,不知道问题在哪里。所以我真的很感激并回答我的问题
我想明白了。错误就在这里:
ImageData{i} = fread(Image,Inf,'uint16=>uint16');
显然,在将图像转换为8位文件而不是以前的16位文件之前,将它们保存为.raw。因此,我的尺寸是元素数量的两倍。有了这个改动,它就起作用了:
ImageData{i} = fread(Image,Inf,'uint8=>uint8');
我之所以能够看到其他图片,是因为z范围可以除以2。
因此,在为变量ImageData创建数组时,整形函数不是问题,而是整数数据的大小。
附言:我刚开始编程,所以答案的准确性应该用来衡量