从多个图像中提取多个ROI像素值

时间:2013-11-18 17:25:19

标签: matlab mask roi

我的编程挑战超出了我非常结巴的Matlab专业知识。我有一个图像列表和单元格数组中的ROI掩码列表,我想分别提取每个ROI的平均像素值, 我的代码是这样的:

files=dir('*.tif');
for f=1:length(files)
image=im2double(imread(files(f).name));       
pixel_value(:,f)=cellfun(@(x) extractROIpixel(x,image), mask);    
% apply extractROIpixel on each cell of the mask array
end

function [ mean_pixel_value ] = extractROIpixel( mask, img )
      mask=im2double(mask);
      mask(mask == 0) = NaN;
      mask_area=mask.*img;
      mean_pixel_value=mean(mask_area(~isnan(mask_area)));  
end

这可行,但非常慢(<5分钟),我有400张图像要处理200个长单元阵列的掩码(200个ROI)。 我确信这是由于设计不佳,因为Matlab被广泛用于这种图像处理任务,但我无法想出另一种经济实惠的方法,感谢提前。

1 个答案:

答案 0 :(得分:0)

怎么样:

files=dir('*.tif');
for f=1:length(files)
   image=im2double(imread(files(f).name));
   masked=cellfun(@(x) image.*x, mask);
   stats{f}=cellfun(@(x) regionprops(x, 'MeanIntensity'), masked);
end

我没有对这两种方法进行基准测试,因此我不知道它是否更有效。