从 tiff 堆栈中计算高于阈值的体素数
Counting number of voxels above threshold from a tiff stack
我已经将一个 tiff 堆栈上传到 MATLAB 中,并且正在尝试计算某个阈值内的体素数。图像的最大值是 0 到 255,我的阈值是 75 到 255。图像已经分色,现在只有红色和黑色。我的代码如下,
FileTif='ImageStack.tif';
InfoImage=imfinfo(FileTif);
mImage=InfoImage(1).Width;
nImage=InfoImage(1).Height;
NumberImages=length(InfoImage);
FinalImage=zeros(nImage,mImage,NumberImages,'uint16');
for i=1:NumberImages
FinalImage(:,:,i)=imread(FileTif,'Index',i,'Info',InfoImage);
end
idx = find(FinalImage >= 75 & FinalImage <= 255);
length(idx)
我的问题是这是否捕捉到了我所说的我正在尝试做的事情。或者更确切地说,当以这种方式上传 tiff 堆栈时,我的 3D 矩阵 FinalImage 的元素的颜色值是否在 0 到 255 之间?我相信我是正确的
max(FinalImage(:))
min(FinalImage(:))
returns 分别为 255 和 0,尽管当我在 ImageJ 上使用体素计数器插件并获得不同的值时会出现混淆。我不确定这种差异是由于插件中的体素计数方法还是 ImageJ 阈值图像堆栈的方式造成的。任何关于差异的线索都将不胜感激!
我解决了我的问题,如果其他人需要,我会在这里发布答案。我在设置阈值后单击 'apply',这会将其更改为二进制,从而导致错误结果。如果我设置阈值然后使用体素计数器插件,那么我将得到与我在 MATLAB 中的代码相同的结果。
我已经将一个 tiff 堆栈上传到 MATLAB 中,并且正在尝试计算某个阈值内的体素数。图像的最大值是 0 到 255,我的阈值是 75 到 255。图像已经分色,现在只有红色和黑色。我的代码如下,
FileTif='ImageStack.tif';
InfoImage=imfinfo(FileTif);
mImage=InfoImage(1).Width;
nImage=InfoImage(1).Height;
NumberImages=length(InfoImage);
FinalImage=zeros(nImage,mImage,NumberImages,'uint16');
for i=1:NumberImages
FinalImage(:,:,i)=imread(FileTif,'Index',i,'Info',InfoImage);
end
idx = find(FinalImage >= 75 & FinalImage <= 255);
length(idx)
我的问题是这是否捕捉到了我所说的我正在尝试做的事情。或者更确切地说,当以这种方式上传 tiff 堆栈时,我的 3D 矩阵 FinalImage 的元素的颜色值是否在 0 到 255 之间?我相信我是正确的
max(FinalImage(:))
min(FinalImage(:))
returns 分别为 255 和 0,尽管当我在 ImageJ 上使用体素计数器插件并获得不同的值时会出现混淆。我不确定这种差异是由于插件中的体素计数方法还是 ImageJ 阈值图像堆栈的方式造成的。任何关于差异的线索都将不胜感激!
我解决了我的问题,如果其他人需要,我会在这里发布答案。我在设置阈值后单击 'apply',这会将其更改为二进制,从而导致错误结果。如果我设置阈值然后使用体素计数器插件,那么我将得到与我在 MATLAB 中的代码相同的结果。